Pythonの型宣言

Pythonには型宣言はありません。あると思ってたのは私の誤解です...。
Python中心の話題と、私が触った言語、興味がある言語に基づき話を進めて行きます。

JavaScript2.0以前の型宣言

JavaScript2.0以前は型宣言はない、動的型付け言語です。

JavaScript2.0の型宣言

JavaScript2.0からは型宣言が可能になる。数値型の場合こんな感じ。


var i:Integer = 100;

ちなみに、JavaScript2.0では定数はconstで宣言可能。

参考:http://www.mozilla-japan.org/js/language/js20/libraries/types.html:JavaScript2.0 型
参考:http://d.hatena.ne.jp/amachang/20060520/1148064043:IT戦記 mozillaのjavascript2.0を書いてみた(自分用)

ECMAScript4だと型宣言は数値型の場合こんな感じ。


var i:int = 100;


ecmascript4のインタプリタは下記公式サイトで配布されてるので触れてみるのみいいかも。
参考:http://www.ecmascript.org/index.php:ecmascript

ActionScript3.0の型宣言

調べてないけど、確かECMAScriptと同様だったかと。
(基本、JavaScript, ActionScript, ECMAScriptは親戚も親戚。兄弟や親子みたいな言語だからな...)

本題のPython2.6,Python3の型宣言

結論から言うと、Pythonには型宣言ない。動的片付け言語。

JavaScript2.0とかECMASCript4を調査した後に、
「あれ、Pythonって型宣言できるんだっけ?」と思い、google先生に問い合わせ。

問い合わせた結果、このid:nishiohirokazu氏ダイアリーに到達。
[http://d.hatena.ne.jp/nishiohirokazu/20090213/1234475993:西尾泰和のはてなダイアリー [Python]型の宣言をしてコンストラクタでassert]


class Monster(object):
hitpoint = int
defense = int
attack = int

でこのソースコードを見た時点で私の脳みその判断は...

Pythonには型宣言がある」

(ちょっ!ソース読めよ!!)...ここが誤解箇所でした。

Pythonの組み込み型を調べる。

そんな誤解をした状態で、Pythonのドキュメント和訳を調べててやっと気づいた訳です...
http://www.python.jp/doc/release/lib/types.html:3. 組み込み型

Pythonの哲学

下記の書籍の引用ですが、

初めてのPython 第3版 (大型本)


Pythonでは、言語の各要素の組み合わせ型に一貫性があり、組み合わせ型の種類もごく少なく抑えられています。

との記載があります。

これを私はPythonの哲学の一つであると認識しています。

この哲学を基に考えると、プログラマが任意で型宣言をできる仕組みをPythonが言語として設けるかというとそれはないとすぐ分かったのに〜>_<

追:Javaの型宣言

Javaはむろん型宣言ばりばり、宣言型の静的型付け言語。
お恥ずかしながら数値型の宣言。


Integer i1 = 100;

追:SchemeGauche処理系)

型宣言はない。動的型付け言語。
この点がLispとの大きな違いではないかな...。
(型宣言については処理系によってまちまちな気がするけど。)
(あと、哲学がPythonと似てる気がする。)

追:Lisp(ANCI Common Lisp処理系)

型宣言あり。動的型付け言語。
(こちらもSchemeと同様、型宣言については処理系によってまちまちな気がするけど。)
参考:[http://d.hatena.ne.jp/taka_2/20081010:プログラマとSEのあいだ [Book][Lisp]「Ansi Common Lisp」読了]

追:PHP5.3系

型宣言はありません。動的型付け言語です。
文字列連結時の.やビルドイン関数、ビルドイン関数名に違和感があり好きになれないけど、
使えるレンタルサーバーが多い点、Webに関するサーバーサイド言語としてシェアが高いのが...いや業務で使ってるからあまり言えない...

近年Javaっぽさがまし、クラス、デストラクタ、インストラクタなどが盛り込まれる。

PHPプログラマには是非下記を読んでほしい。
http://www.ibm.com/developerworks/jp/opensource/library/os-php-7oohabits/:IBM developerWorks Japan PHP でオブジェクト指向の設計をするための 7 つの良い習慣を身につける

私について

今後も触れる限り他の言語、処理系を触ってみます。
有名どころでも、Ruby, C, C++, アセンブラ, Cobol, ...,触ってない言語がたくさん。

(業務でまずはPythonを実戦投入することが直近の目標。)