読者です 読者をやめる 読者になる 読者になる

Sphereとともに

scalaとかplayframeworkとか。技術ブログにしたいなと。環境は Windows7x64, mac です。たまに声優さん情報が混ざります。最近ちょっとClojure触りました。

静的型付け言語と動的型付け言語

一般的にどちらが良いかを論じるつもりはないのでそういった話を見たい人は

もっと別の技術力のある方たちの議論を見たほうがよいでしょう。

あくまで、自分の感じたところをつらつらと書きます。


静的型付け言語:Scala

動的型付け言語:Clojure

を頭に浮かべながら。

静的型付け言語はコンパイル時など実行前に型が決まっている。

動的型付け言語は実行時に型が決まる。

【記述量】

Javaなどの静的型付け言語ではすべて型を書かなければならないが

Scala型推論が働き、型の記述を省略可能であるため記述量は気にならない。

※ どうやらClojure型推論の機能を有しているらしい。(動的なのに(*´・ω・)(・ω・`*)ネー)

一方、動的型付け言語は型を書かないので、多くの静的型付け言語よりも記述量は短くなる。

【可読性】

静的型付け言語は型を書くので、読みやすい。

この変数はこの型っていうのがパッと見て分かるのがいい。

動的型付け言語は型を書かないので、読んでいてよくわからない。

型推論があって記述を簡略するんじゃ一緒じゃないか?とか思うかもしれないけど・・・

【安心感】

動的型付け言語は決して型がないわけではないので、型エラーは出る。

出るのだけれど、それが実行時にしかわからないというのが自分にとっては厄介に感じられる。

適当に書いても動いちゃうのは便利だけど、それが恐怖だったりもする。

例えば次のようなコードはコンパイルは通る。(こんなコードありえないけど)

(defn add[x y]
  (println (+ x y)))

(defn -main []
  (add "3" "4")
  )
$ lein compile
$

その点、静的型付け言語はコンパイル時に型が間違っていればコンパイルエラーとなる。

def add(x: Int, y: Int) = {
    x + y
}

def main(args: Array[String]) = {
    add("x", "y")
}
> scalac Main.scala
Main.scala:7: error: type mismatch;
 found   : String("x")
 required: Int
                add("x", "y")
                    ^