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 )
型エラー!
プログラムの実行前
そのプログラムが正しいかどうか分かる
全ての値に型を付ける
型の情報をもとに解析する
プログラムの正しさを “計算する”
人は不完全なので間違う
型システムは人の間違いを検出する
プログラマは型を示す
型は型検査により正しさを表す
事実が書かれたドキュメントができる
Text
{
foo: 100,
bar: 200,
baz: 300,
}
{
foo: 100,
bar: "hello",
baz: {
hoge: true,
},
}
複雑なObject
簡潔で難解なコメント
真実味の薄いJSDoc
高い表現力・柔軟に書ける
とりあえず動く
nullチェックしないでいいや
= 複雑で読みづらい
= なんで動いてるか分からん
= たった1行が消せない
Text
interface {
foo: number
bar: number
baz: number
}
interface {
foo: number
bar: string
baz: {
hoge: boolean,
}
}
複雑でも正確
必要最低限のコメント
真実しかないJSDoc
型注釈の読み書きがムズい
コンパイルが通らん
nullチェックしなきゃいけない
= 正確なドキュメントを書く
= ヒューマンエラーを検知
= 潜在的実行時エラー見落とし回避
誰でも複雑な型は嫌い
簡単な型注釈で事足りるように作る
自然に読みやすいコードへ
ちょっと触ったらすぐコンパイルエラー!
想定外・潜在的なミスを指摘
変更/削除しちゃいけない部分
具体的でないコードの型は、往々にして複雑・難解
設計レベルで整理できなければ、無駄に疲弊する
大規模・長期なプロジェクトで全域的に書く場合、型は有利
対して小規模・短期なプロジェクトでは、型は足手まとい
It's over!