- 型は、関数とデータが従うべき厳密な契約
- 型は、ある値が属しうる集合
- 型は関数を通じて変換でき、それによって範囲を変更できる
- 単射関数 - 範囲の小さい型から大きい型へ変換すること
- 全射関数 - 範囲の大きい型から小さい型へ変換すること
- 全単射関数 - 一対一に対応
- ロジックの入力と出力を型で表せる
- つまり、型を通じてロジックを抽象化できるということ
- 入力と出力を型で表し、それを通じてロジックを設計できる
- 基本データ型に名前を付けて、別の型として区別できる
- 型システムを活用すると、さまざまな問題を解決できる
- ジェネリクスを用いた一般化
- ファントム型を用いた範囲制限
- ユニオン型(あるいは和型)を用いた振る舞いの制限
- 最小型を用いた TODO 処理
- 型を用いた有限状態マシンの実装
- 依存型を用いた検証
- 型駆動開発は、まず型を定義し、それを通じてコードを書く方法論
- 型駆動開発は、望むならどこにでも適用でき、各手続きの結果を型として定義することから始める
- 要件を分析するときは、型で抽象化してみること
- 同じ基本データ型であっても意味が異なるなら、それを区別するために別の型として定義するのがよい
- 要件を分析して型を考えたら、ロジックを型で抽象化してみること
(String) -> List<Token> のような形で抽象化できる
- 型駆動開発はテスト駆動開発と相性がよい
- 入力と出力結果をあらかじめ定義してコードを書くという点で、型駆動開発とテスト駆動開発は似ている
- 型駆動開発が型システムを使ってコンパイル時にあらかじめ安全性をチェックできる一方で、テスト駆動開発は型だけでは捉えられないエラーや例外状況をテストコードで捉えられる
- 設計者の立場で型システムを活用することは、ほかの開発者のためのコード規則を作ることに等しい
- ただし、型を一つひとつ定義して型が多くなりすぎたり、型定義が複雑になりすぎたりすると、かえってコードを書きづらくなったり可読性が下がったりするため、常に適切な状態を保つことが重要
2件のコメント
> 単射関数とは、変換後の値の集合において終域と値域が一致しない場合を指す。これをもう少し単純に表現すると、範囲の小さい型から大きい型へ変換することを意味する。
単射関数とは、任意の異なる2つの変数の像が互いに異なる関数を指します。つまり、単射関数
fの定義域Xに属するすべての要素aとbについて、a ≠ bならf(a) ≠ f(b)です。韓国の高校数学でいう「一対一関数」が単射関数です。詳しいご説明ありがとうございます。:) 私の理解が誤っていましたね。以前から何度か指摘されていた部分でもあるので、もう少し勉強して内容を改めて整理します。