動的型付き言語は許容する
コレが面白い
だいぶ前にコレを読んで、動的型付きの見方がちょっと変わった
用語の整理
例外
ランタイムエラー
e.g. ゼロ除算のerror
e.g. 空リストの先頭要素アクセスによるerror
動的型エラー
表現式の静的型と値の動的型の不整合
故に動的型付き言語では起こり得ない
なぜなら静的型がないので
期待していない値に対する例外
動的型付き/静的型付き、いずれでも起きうる
e.g. Rubyで1+"hoge"
静的型検査では、
「期待していない値」を格段に減らせる
動的型言語では、
「期待していない値」を敢えて受け付けて何らかの処理をする自由度が残される
期待していない値をどうするかを自分で決められる
+演算子は、両方の項の型が異なっていたとしても、何らかの処理を行う
1+"hoge"なら1hogeにする
「こういう仕様だ」と言語側が決める
ていうかRubyって、エラーになるんだ
code:ruby
puts 1+"hoge"
code:out
prog.rb:3:in `+': String can't be coerced into Integer (TypeError)
from prog.rb:3:in `<main>'
じゃあ、ちょっと話変わってくるなmrsekut.icon
何らかの処理の結果、エラーを返している
動的型付き言語の場合は、ここでエラーを出さずに何かしらの処理をすべきじゃないのか
JSは、1hoge
PHPは文字列で+が使えない