静的型付けとは?実行前に型エラーを捕まえる
静的型付けとは、変数と式の型がプログラムの実行前、コンパイル時に検査されることを意味し、多くの型エラーが早期に捕まえられます。
静的型付け言語では、すべての値の型がコンパイル時に既知であり検査されます。数値が期待される場所に文字列を渡すと、コンパイラはプログラムが動く前にそれを拒否します。Java、Go、Rust、TypeScriptのような言語は静的型付けです。見返りはバグの一群を早期に捕まえられることで、コストはより多くの前もっての手間です。
型が検査されるとき
静的型付けはbuildの一部として、コンパイル時に型を検証します。型の不一致は実行時のクラッシュではなくコンパイルエラーです。コンパイルを生き延びたプログラムは、実行時にそれら特定の型の誤りを犯さないことが保証されます。
静的型付けの利点
- 本番ではなくbuild時に多くのバグを捕まえる。
- より優れたツール: 型に基づくautocomplete、リファクタリング、インラインドキュメント。
- シグネチャが期待を述べる自己文書化されたコード。
- 大きなコードベースをリファクタリングするときの自信。
静的 vs 動的型付け
静的型付けは実行前に型を検査し、動的型付けはプログラムの実行中に検査します。静的はエラーをより早く捕まえツールを助けますが、より冗長で硬直的です。動的はより柔軟で簡潔ですが、型エラーを実行時へ先送りします。
静的な型のコスト
より多くの型注釈を書き、時には型チェッカーと格闘します。コンパイルにも時間がかかります。トレードオフは、実行時の驚きを減らす代わりに、前もっての労力とより遅いbuildです。
手短な例
TypeScriptでは、function area(r: number) を宣言して area("3") を呼ぶのはコンパイルエラーです。buildがfailするため、その誤りは決して実行時に届きません。
CIにおける静的型付け
型チェックはbuildのステップであり、型エラーは意図どおり決定論的にpipelineをfailさせます。それらはflakyではなくリトライを決して必要としません。大きなコードベースでは型チェックは遅くメモリを多く消費し得ます。より大きなrunner(Latchkey)はそれを速め、一時的なOOMやtoolchainの不調を自動でリトライします。
重要なポイント
- 静的型付けはコンパイル時に型を検査し、プログラムが動く前に多くのエラーを捕まえる。
- 冗長さとbuild時間を代償に、ツールとリファクタリングの安全性を高める。
- 型エラーは決定論的にbuildをfailさせるため、リトライではなく修正すべきである。