型システム。
そして、TypeScript。
Shigeki Suwa
@すわくん
https://ztrehagem.dev
プログラミングの話です。
用法、要領を守って正しくお聞きください。
型
値
0 1 2 1.5 -10
“あいうえお”
true false
値の種類
数値
文字列
真偽値
・・・
値の集合
文字列
数値
真偽値
true false
0 1 2 ...
1.5 ...
-10 ...
“a”
”foobar”
”あいう”
...
型 == 値の集合
数値型
文字列型
真偽値型
◯◯型の値
数値型の値 0, 1, 2, 0.5, -10, ...
文字列型の値 “a”, “foo”, “あいう”, ...
真偽値型の値 true, false
演算
演算
足し算 引き算 掛け算 割り算
文字列連結
論理和 論理積
正しい演算
1 + 1
”abc” + “xyz”
true && false
正常に実行できる
正しくない演算
1 + “abc”
“foo” + true
false && 0
コンピュータを壊してしまう可能性
型と演算
数値 + 数値 …正しい
数値 + 文字列 …正しくない
型のない世界
変数
var x = 1
var y = “abc”
x + y
関数
function f ( a, b ) {
return a + b
}
f ( x, y )
実行時エラー
実行するまで何が起きるか分からない
型のある世界
型注釈
var x: number = 1
var y: string = “abc”
型検査
x + y
number + string
型エラー!
型注釈
function f ( a: number, b: number ): number {
return a + b
}
型検査
f ( x, y )
f: ( number, number ) => number
f ( number, string )
型エラー!
静的解析
プログラムの実行前
そのプログラムが正しいかどうか分かる
型システム
型システムとは
全ての値に型を付ける
型の情報をもとに解析する
プログラムの正しさを “計算する”
人の為の型システム
人は不完全なので間違う
型システムは人の間違いを検出する
型注釈は正確なドキュメント
プログラマは型を示す
型は型検査により正しさを表す
事実が書かれたドキュメントができる
JavaScript
Object
Text
{
foo: 100,
bar: 200,
baz: 300,
}
{
foo: 100,
bar: "hello",
baz: {
hoge: true,
},
}
治安なし
複雑なObject
簡潔で難解なコメント
真実味の薄いJSDoc
JavaScript
高い表現力・柔軟に書ける
とりあえず動く
nullチェックしないでいいや
= 複雑で読みづらい
= なんで動いてるか分からん
= たった1行が消せない
TypeScript
Interface
Text
interface {
foo: number
bar: number
baz: number
}
interface {
foo: number
bar: string
baz: {
hoge: boolean,
}
}
治安あり
複雑でも正確
必要最低限のコメント
真実しかないJSDoc
TypeScript
型注釈の読み書きがムズい
コンパイルが通らん
nullチェックしなきゃいけない
= 正確なドキュメントを書く
= ヒューマンエラーを検知
= 潜在的実行時エラー見落とし回避
Pros / Cons
Pros: 簡単な型になる
誰でも複雑な型は嫌い
簡単な型注釈で事足りるように作る
自然に読みやすいコードへ
Pros: エラーは友達
ちょっと触ったらすぐコンパイルエラー!
想定外・潜在的なミスを指摘
変更/削除しちゃいけない部分
Cons: 抽象化・共通化
具体的でないコードの型は、往々にして複雑・難解
設計レベルで整理できなければ、無駄に疲弊する
Cons: 小規模プロジェクト
大規模・長期なプロジェクトで全域的に書く場合、型は有利
対して小規模・短期なプロジェクトでは、型は足手まとい
型システム。
そして、TypeScript。
It's over!
型システム。そして、TypeScript。
By Shigeki Suwa
型システム。そして、TypeScript。
- 970