回 6-4 道 6 言語と処理系
静的型付けは、
読み終えたら型検査が
この頁の流れ
型検査が
動かす前に、 間違いに 気づけるか
気づける
たとえば 1 + (1 < 2) は、
この
静的型付けは どう動くのか
静的型付けは、
型が 決まる 時と、言語の例
| 比べる所 | 静的型付け | 動的型付け |
|---|---|---|
| 型を調べる時 | 動かす前 (コンパイルや | 動かしている |
| 型が付く所 | 変数、 | 値 |
| 間違いが | 動かす前に、 | その |
| 主な言語 | Java、 | Python、 |
静的型付け言語では、int と決めた変数に文字列を
TypeScript は JavaScript に
ちび電卓の 木と、 型の決まり
ちび電卓の(演算子, 左, 右) です。
("set", 名前, 式)変数に値を置く("print", 式)値を出す("if", 条件, [文…])条件が正しい ときだけ中を動かす ("while", 条件, [文…])条件が正しい間、 中をくり返す
この
- 数は
int。 + - * /はint と int から int を作る ( /は整数の割り算) - 比べる
<と==はint と int から bool を 作る。 この 回では、 bool どうしの ==は使わない ことにする - if と
while の 条件は bool でなければならない - 変数は、
最初に 置いた 値の 型のまま。 置く 前に 読んではいけない
型検査は 木を 1 回たどる
型検査器は、
値は 1 つも計算しません。if や while の
長所と短所
長所は
- 間違いが、
動かす前に、 通らない 枝も 含めて見つかる - 型が
説明書に なり、 エディターが 候補を 出したり、 名前の 付け替えを 助けたりできる
短所は
- 型を
書く 量が 増える。 型推論 (よく ある 問い 1) で減らせる - 決まりに
当てはまらない 書き方は、 正しく 動く コードでも 止められる - 試作のように
形が まだ決まらないうちは、 型を 合わせる 手間が 重く感じる
強い型と 弱い型は 別の物差し
静的か
Python は"5" + 1 で"51" にします。
ただし Python でも、1 + (1 < 2) は
動かす 値に付く型と Python の足し算
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
int
str
2
True
TypeError同じ名前 x に、1 + (1 < 2) はTrue は
動かして確かめる
1 本目は、
動かす ちび電卓の型検査
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
合計 通す
A 止める int + bool
B 止める while の条件が int
C 止める y が無い
D 止める x は int
E 止める int + bool合計のi < 11 はs + i と i + 1 は
型検査が
- A 数と
真偽を足す。 <の結果は bool なので、 +の右に置けない - B while の
条件が 数。 条件は bool でなければならない - C 置いていない変数
yを読む - D int で置いた
xに、bool を入れ直す
E はx はx < 3 はx + (1 < 2) を
if やdict(env) で
2 本目は
動かす 型検査なしで実行する
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
F
1
2
止まる + に bool
E
5
最後まで動いた
G
5
最後まで動いたF は
E と
型検査で 止められない 誤りは何か
型検査が
次のassert で
動かす 型は合っているのに壊れる
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
H 型検査は通す
0 で割った
I 型検査は通す
打ち切ったH の 10 / (x - 7) は、while 0 < 1 も、
3 つ目は
動かす 型は int でも入らない
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
1234.5 1234 04d2
32767.0 32767 7fff
40000.0 40000 入らない3 つとも int(v) の
静的型付けは 仕事で どう 確かめるのか
仕事では、
Python の
動かす 型ヒントは実行では調べない
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
42
abab
Hello World!
TypeError
n int
return inttwice("ab") はabab をgreeting(3) は、__annotations__ に
この
mypy の入門の例 (折って表示)
greeting(3)
# Argument 1 to "greeting"
# has incompatible type
# "int"; expected "str"
greeting("World!")
# No error確かめ方は
- Python なら、
mypy などの 型検査を CI で 走らせ、 型の エラーを 0 に保つ - TypeScript なら
tscをCI で 走らせる。 公式の 手引きに よると、 tsc は 既定では 型の エラーが あっても JavaScript を 書き出すので、 止めたいときは noEmitOnErrorを使う - 0 で
割る、 終わらない 繰り返し、 値の 範囲は 型では 止まらないので、 境目の 値 (0、 上限、 上限 + 1) を 入れる 試験を書く
関わる実例
Ariane 5 の 初飛行の 失敗 (1996年6月4日)
1996年6月4日、欧州の
報告書に
値は
崩れた
よくある問い
型推論が あれば、 型を 書かなくても 静的型付けですか
静的型付けです。("set", "x", 1) から x を
静的型付けと 強い 型付けは 同じですか
違います。
TypeScript は 静的型付けの 言語ですか
TypeScript は JavaScript に
静的型付けは 大きな 開発に 向いていますか
人が
確認クイズ
答えだと
1 問目
ちび電卓の
2 問目
この
型ヒントと実行
def twice(n: int) -> int:
return n * 2
print(twice("ab"))
print(twice(3))3 問目
型検査を
4 問目
1996年の Ariane 5 の
説明課題
静的型付けの
自分の
この回の 先の一歩
TypeScript の
一次資料
どれも 2026年10月27日に開いて、
- Ariane 501 - Presentation of Inquiry Board report (ESA、英語)。初飛行の
日と、約 40 秒後に 壊れたこと - ARIANE 5 Flight 501 Failure, Report by the Inquiry Board (ESA、
英語、PDF) 。64 ビットから16 ビットへの 変換、 Operand Error、 BH、守った変数の数、 2 台が 同じ 理由で 止まったこと - typing, Support for type hints (Python 公式文書、英語)。実行は
型の 注記を 強制しないこと - Built-in Types (Python 公式文書、英語)。bool は
整数の 下位の 型であること - struct (Python 公式文書、英語)。
hが2 バイトの short であること - mypy documentation と Getting started (mypy、英語)。静的な
型検査器である こと、 少しずつ足せる こと、 greeting の例 - The Basics (TypeScript 公式の
手引き、英語) 。型の注記が 消される こと、型推論、 noEmitOnError - Addition (+) (MDN、英語)。文字列が
あれば 文字列に 変えてつなぐこと
次へ
道 6 言語と処理系の回
- 6-1正規表現と
オートマトン後戻りが増える式頁で読む - 6-2字句解析と構文解析電卓の
式を木にする頁で読む - 6-3小さな
インタプリタ変数と if を持つ言語頁で読む - 6-4型と型検査型が
間違いを 先に止めるこの回
