4章型制約
大半の開発者は型アノテーションの初歩を学んで満足するが、学ぶべきことはまだたくさんある。型アノテーションには価値ある高度な機能が多く含まれる。高度な型アノテーションを使うと、データ型に制約を加え、データ型が表現できるものをさらに制限できる。目標は、意図しない状態を表現できないようにすることだ。システム内で矛盾するデータ型、無効なデータ型を物理的に作れないようにすべきだ。最初から間違ったコードが書かれなければ、コードベースにエラーは紛れ込まない。型アノテーションを使えば、この目標を達成して時間とコストを節約できる。この章では6種類の型制約テクニックを説明する。
Optional
- コードベース内の
None
参照を置き換える。 Union
- 扱える複数のデータ型を表す。
Literal
- 指定できる値をごく一部に制限する。
Annotated
- 扱えるデータ型と値の条件を指定する。
NewType
- 特定のコンテキスト内だけで扱えるデータ型を作る。
Final
- 変数を束縛し変更できないようにする。
それではOptional
型でNone
参照に対処する方法から始めよう。
4.1 Optional型
null参照は「10億ドル級の過ち」と呼ばれることが多いが、これはアントニー・ホーアが最初に述べたことだ。
私が10億ドル級の過ちと呼ぶものがある。それは1965年にnull参照を発明したことだ。当時、私はあるオブジェクト指向言語(ALGOL W)における参照のために最初の包括的な型システムを設計していた。私の目標は、コンパイラの自動チェックにより参照を使っているすべての箇所を完全に安全にすることだった。しかし、ただ実装が容易になるというだけの理由で、null参照を認めるという誘惑に勝てなかった。そのために無数のエラー、脆弱性、システムクラッシュが発生することになった。これらはおそらく過去40年で10億ドル分の苦痛と損害を引き起こしたはずだ ...
Get ロバストPython ―クリーンで保守しやすいコードを書く now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.