静的型付けと動的型付け
おはようございます, やまじゅんです.
この記事はklis Advent Calendarの記事になります.
やるやる言いながら25日大幅に過ぎてからの更新ですみません.
klis Advent Calendar 2014 - Adventar
遅くなったので余ってる所埋めるつもりでいきます.
元々僕はブログなど持っていなかったのですが, Advent Calendarに記事を書かないかと誘われ, せっかくだし一つくらいアウトプットの場があっても良いなと思い軽率にブログ開設した次第です.
これからちょくちょく更新していきたいなと思うのでよろしくお願いします.
誰だお前は
形式的にはklis14のやまじゅんです. 三年次編入で入ってきたので実質klis12として活動しています.
- あまりプログラミングはしない人間です.
- 元々は電気情報工学科に居ました. 電気回路, 電子回路, 電磁気などやっておりました.
- 画像を対象とした機械学習(特にDeep Learning)について研究する予定です.
- 詳しくはTwitterでも.
はじめに
型システムに関してはちゃんと勉強したわけではないので適当な事言ってるかもしれません, 言ってたらすみません.
そういうところは優しく指摘してくださると助かります.
静的型付"""き"""言語
日頃TLを見ているとよく「静的型付け言語」や「動的型付け言語」といった言葉を目にするような気がしますが, 最近知りましたがこれは誤植だそうですね(単純に日本語の話).
Twitterで「静的型付け言語」などとつぶやくと下のようなbotに星をぶつけられることもあるようです. 怖いですね.
「静的型付け」「動的型付け」みたいに「言語」を付けなければ問題ないっぽいです.
静的型付き言語と動的型付き言語の違い
まずはここからですね. Wikipediaから引用すると,
静的型付け
静的型付け(せいてきかたづけ、英: static typing)とは、プログラミング言語で書かれたプログラムにおいて、変数や、サブルーチンの引数や返り値などの値について、その型が、コンパイル時など、そのプログラムの実行よりも前にあらかじめ決められている、という型システムの性質のことである。
動的型付け
動的型付け(どうてきかたづけ、英: dynamic typing)とは、プログラミング言語で書かれたプログラムにおいて、変数や、サブルーチンの引数や返り値などの値について、その型を、コンパイル時などそのプログラムの実行よりも前にあらかじめ決めるということをせず、実行時の実際の値による、という型システムの性質のことである。
らしいんですけど, まあ要は静的型付けはコンパイル時に型エラーがないかチェックしますよー, 動的型付けは特にチェックはせずにいきなり実行しますよー(型エラーが出たらその時吐く), みたいな感じだと思ってます(僕は).
なんでだいたい静的型付き言語では変数宣言時に型名を書きますし動的型付き言語では書かないですね.
(ただしOCamlなど「型推論」がある静的型付き言語は型を書かなくてもコンパイラがその後の挙動から勝手に型を推論してくれます. ただしこれは動的型付け的なものではなくて, あくまでコンパイル時に型チェックしてますしその時点で型エラーがあれば吐きます.)
それぞれの型付けの利点
静的型付けと動的型付けで感じる利点を簡単に言ったら
静的型付け
- 型エラーを早期に検知できる
- コードの安全性を保証できる
- メソッドの特性がわかりやすい
動的型付け
- 型書かなくていい
- 修正への対応が容易
ぐらいしか思いつかない(プログラミングしないので).
欠点はそれぞれ相手の利点を逆にした感じですね.
静的型付き言語は大規模な開発だとかより厳格な整合性が求めれられる開発(OSなど)に向いていて,
動的型付き言語はそれ以外に向いてるってイメージです.
静的型付き言語は最初の型定義で間違えると後から修正するのが大変だとか, 仕様変更に伴う修正が大変だとかも言われてるみたいですが, 最近は型推論による型名省略でそこらへんの欠点が補われてるらしいですね.
最後に
型システムについてもっと勉強したいならこの本とかいいらしいです.
筑波大学附属図書館で借りるならこっち
http://www.tulips.tsukuba.ac.jp/mylimedio/search/book.do?target=local&bibid=1478785
書くことが思いつかなすぎて特に詳しくもないこんな話題に手を出してしまいました. すみませんでした.