kahirokunn
twitter: https://twitter.com/kahirokunn
qiita: https://qiita.com/kahirokunn
まだ自分にない技術や関連理論に挑戦したり、深ぼるのが好きです
最近は圏論の方に挑戦してる
フリーランス
型システムに関するメリットの言語化・理解の向上をし、
引き続き気持ちよくTypeScriptを使っていけたらと
> TypeScript extends JavaScript by adding types to the language.
> TypeScriptは、JavaScriptに型を追加することでJavaScriptを拡張します。
> TypeScript speeds up your development experience by catching errors and providing fixes before you even run your code.
> TypeScript は、コードを実行する前にエラーをキャッチして修正を提供することで、開発経験をスピードアップします。
> 型システム(英: type system)とは、プログラミング言語において、その式などの部分が持つ値を、その種類(型(type)、データ型も参照)に沿って分類し、プログラムが正しく振る舞うこと、といった性質について保証する手法である。
> プログラミング言語ごとにある型システムは型付けされたプログラムがどのようにふるまい得るかを規定し、その規則から外れたふるまいを不正であると判定する。
型
> 「値の種類」が型である。
型検査
> プログラムにおけるエラーはさまざまだが、型に基づく一連のエラーがある。単純な例としては、浮動小数点数を表現しているデータを整数型として扱ってしまう、といったようなものである。この例では 0 と +0.0 のような特別な場合を除いてたいていの場合は得られる結果は無意味であり、より複雑な構造を持った値の場合は構造を壊して不正にしてしまうかもしれない。このような異常をプログラムが起こさないことを検査するのが型検査である。
安全性
> 型にまつわるものに限らず一般に、プログラムが言語で定義していない状態や、言語仕様で「未定義」とされている状態にならない、という性質。プログラムのエラーをランタイムやインタプリタが検出して異常終了するような場合も「安全」の側に含まれる。型にまつわる安全性が型安全性である。
> 型安全性が実現できる内容は言語に依存する。なぜならば、安全性とは「言語仕様で未定義とされている状態にならない」という性質である、つまり言語仕様によって決定されているからである。
可読性
> 表現力の高い型システムでは型はプログラマの意図を説明することができるので、ドキュメントの役割を果たすこともある。例としてタイムスタンプが整数の派生型である環境において、プログラマが単なる整数ではなくタイムスタンプを返す関数を宣言すると、その型情報が関数の意味を記述していることになる。
抽象化またはモジュール化
> 型によってプログラマは低レベルでの実装に煩わされずにより高レベルで考えることができるようになる。例えば文字列型によってプログラマは文字列を文字列として、単なるバイトの列ではないものとして考えることができる。また型によってプログラマは2つのサブシステム間のインタフェースを表現することができる。これはサブシステムの相互運用性に必要な定義を局所化し、それらのサブシステムが通信する際に起きる矛盾を防止する。
また、型システムは軽量形式手法なので、国立情報学研究所の形式手法の資料によると、以下の項目のメリットはある程度得られるかと