結局「型」って なんなん???

696 Views

September 29, 24

スライド概要

東葛.dev用資料

型(型システム)の基礎

プログラミングにおける型は、人間と機械のインターフェイスとして機能し、データを認識しやすくする役割を持っています。型の体系は、動的型付けと静的型付け、強い型付けと弱い型付け、公称型と構造的部分型に分類され、それぞれ異なる特徴を有します。また、各プログラミング言語における型の扱いについても具体的な例を挙げて説明しています。型はエラーを防ぎ、構造を把握するために必要不可欠であり、型付けの選択は開発条件や熟練度に依存します。

profile-image

Ruby/Javaプログラマー。エンジニアリングマネージャー。 軽度の広く浅いオタク。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

結局「型」って なんなん??? 東葛.dev 第2回

2.

目次📖 ● プログラミングにおける型 ● 型の体系 ○ 動的型付けと静的型付け ○ 強い型付けと弱い型付け ○ 公称型と構造的部分型 ● 各言語での型の扱い

3.

プログラミングにおける型 󰞵 ● 各言語の「型システム」により解釈するもの ● 人間と機械のインターフェイス ○ データの塊に名前をつけて認識しやすくする ■ カテゴライズ ○ 違う型ならエラーにする(一部の型の特性) ● 型の例 ○ 文字列 ○ 数値 ○ 真偽値 ○ オブジェクト

4.

型の体系 🧬 一言に型といってもいくつかに体系立てて分類される ● 動的型付けと静的型付け ○ プログラムがいつ型を認識するか ● 強い型付けと弱い型付け ○ 型が想定と違った場合にどうするか ● 公称型と構造的部分型 ○ 何をもって同じ型と認識するか

5.

各言語での扱い(というか具体的イメージの道しるべ) 型付け\振る舞い 公称型 構造的部分型 動的型付け たぶんない (名前を重視するのに 動作時に決定するのは無理) Ruby Python PHP JavaScript 静的型付け Java Rust(Traits) C++ Go TypeScript※ ※TypeScriptでプライベートなプロパティを持つクラスを作ると公称型として定義される 赤字は強い型付け

6.

型の体系 🧬 - 動的型付けと静的型付け プログラムがいつ型を認識するか 動的型付け ● 実行時に認識する ● Script言語はこれが多い ● 型パズルしなくても良しなにしてくれる 静的型付け ● コンパイル時に認識する ● 事前に型をチェックできるので早く実装ミスに気づける

7.

型の体系 🧬 - 強い型付けと弱い型付け 型が想定と違った場合にどうするか 強い型付け ● ほぼ必ずエラーにする 弱い型付け ● エラーにならないケースがある

8.

型の体系 🧬 - 強い型付けと弱い型付け 弱い型付けのサンプルコード

9.

型の体系 🧬 - 公称型と構造的部分型 何をもって同じ型と認識するか 公称型 ● 型の名前が同じことをもって同じ型として扱う ○ リスコフの置換原則を満たした型を含む 構造的部分型 ● インターフェイス(シグニチャ)をもって同じ型として扱う ○ アクセサであったり、関数であったり ○ 諸説あり:ダックタイピングの考え方

10.

各言語での扱い(というか具体的イメージの道しるべ) 型付け\振る舞い 公称型 構造的部分型 動的型付け たぶんない (名前を重視するのに 動作時に決定するのは無理) Ruby Python PHP JavaScript 静的型付け Java Rust(Traits) C++ Go TypeScript※ ※TypeScriptでプライベートなプロパティを持つクラスを作ると公称型として定義される 赤字は強い型付け

11.

備考⚠ 型 = クラス? ● そう扱っている言語はある ○ Javaなど ● 一方でそうではない言語もある ○ TypeScript ■ クラス:class ■ 型:types / interface

12.

まとめ🧵 ● 型は人間が構造を把握し、エラーを防ぐためにある ● 単に型付け言語と言っても種類がある ○ 動的型付けと静的型付け ○ 強い型付けと弱い型付け ○ 公称型と構造的部分型 ● 取り回しのしやすさなど、トレードオフ関係が成立する ○ どの程度、型に頼るのが書きやすいかは条件による ■ 熟練度 ■ 開発規模 etc. ● 高級プログラミング言語で型のない言語はない気がする