段階的に型情報増やすための情報
型がないソースコードに、安全性を高めるために型情報を増やしていく
そもそも漸進的型づけの言語自体がそう多くない
今回はtypescriptを想定してまとめる
pythonとかphpも型がつけられるようになってきてる
情報自体はどの言語の資料でもいい
code:ts
type FixMe = any
type ToDo = any
type Inexpressible = any
type NotWorthIt = any
type FuckIt = any
こういう感じで、単なるanyじゃなくて筆者の気持ちを込める
code:js
/** @type {number} */
var x;
x = 0; // OK
x = false; // Error: boolean is not assignable to number
typescriptはjsでも型検査ができて、JSDoc アノテーションで指定できる
バンドラはそのままで、typescriptは型検査飲みさせる形で導入したり
ファイルを限定して検査したり
段階的にlintをやっていく手続きも参考になる
eslintを導入していく例
ルールを段階的に増やしていく
ルールの削減をせず、全ファイルの1行目にeslint-disable入れて、いけるタイミングで少しずつdisableを消していく方法もどこかで読んだ気がする
これはルールをちょっとずつ増やすとまたファイルを跨いで修正すべきことが増えて面倒、という場合に便利かも
PHP7 で堅牢なコードを書く - 例外処理、表明プログラミング、契約による設計
対処より予防
関数内部でifで対処するんじゃなくて、そもそも正しい型の値が入るようにする、という考えのわかりやすい資料
型を段階的につけていく場合、
既存のコードの内部に対処的なコードを入れるのではなく
結合部分にassert的なコードを書いて、何かの処理やロジック部分は変数内部の確認をしないでいいようにする
あるいは、内部で確認をするにしても、関数の最初の方にまとめてやるようにして、移動、削除しやすいようにする
良いスライドだ〜mrsekut.icon*2
typescriptの場合は、
コード中で利用するアプリケーション固有の型が決まってきたら、
その型を引数とするような関数やクラスでロジックを書いて
そのチェックはそれらの外側でやるようにしていけば良さそう