PythonからSwiftに移行した人の9割は死ぬ
こんなお告げを聞いたことがあります。
なぜなら、動的な言語ばかり書いているとだんだん人の気持ちが考えられなくなってくるからです。
それだけではありません。機械の気持ちすらも考えられなくなります。だから動的言語は罠なのです。
しかし、Pythonerのみなさん。そしてPythonistのみなさん。Pythonにも人と機械の気持ちを考えられる機能があります。
それがType Annotation
です。
Type Annotationとは
Type Annotation
とは、和訳すると「型注釈」です。
要は変数の型をカッチリ決めておこうということです。
例えば、なんの変哲もないPythonコードがあったとしましょう。
a = [1, 2, 3]
こいつの型は?と聞かれて、みなさんは右辺の[1, 2, 3]
という形を見てようやくlist
型だ〜!と理解できます。
次に、またまた何の変哲もないコード
a: list = [1, 2, 3]
ここでSwift勢が全員歓喜します。そう、Type Annotation
です。これなら、変数の中身を見なくてもa
がlist
型だとひと目でわかります。
Pythonで大規模開発をしたいと考えている人、可読性のためにも今すぐType Annotation
を使いましょう。
Type Annotation
を肌で感じたいという人はSwiftを触ってみればいいと思います。
Pythonでの詳しい使い方はこちら。
サポートはバージョン3.5
からなので注意してください。実はGenerics
型なんかも使えるんですね。すごい。
型と値の違い
俺がType Annotation
を推すのにはもう一つ理由があります。
それは、思考の整理のためです。
たとえば、以下の関数があります。
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
はい。Python使いならお馴染みの何の変哲もないシグモイド関数$\sigma$です。
これだけを見て、xがlist
型なのかnp.ndarray
型なのか、はたまたint
型なのかすぐに見分けがつきませんよね。
ではこれならどうでしょう。
import numpy as np
def sigmoid(x: np.ndarray) -> np.ndarray:
return 1 / (1 + np.exp(-x))
ここで再びSwift勢が歓喜。
こうして、引数と返り値の型をアノテートしてやることで自らの思考の整理になります。
特に初心者が躓きがちなのは型がごちゃごちゃになるという問題です。
このように、慎重に一つ一つの変数やメソッドの型に気をつける癖を付けることがプログラマへの第一歩と言えるでしょう。
変数の乱用はやめましょう
さあ、これでようやくみんなもType Annotation
の重要性がわかってきたと思います。
それでいざType Annotation
を使ってみると、だんだんこういうのが気持ち悪くなってきませんか?
a = 1
a = "hello"
Swift勢なら大激怒ですね。
変数への異なる型の再代入はまじでキモいので止めたほうが良いことに気づきます。
いくら動的といえど、型を変えられると再代入を機械に任せることになります。
また、テスト時に参照を追えなくなるのでつらいです。
型が異なるときは新しい変数を宣言しましょう。
a = 1
b = "hello"
こうすれば `a` は`int`型で`b`は`str`型であることが判断できます。そして、さらにこのように型を記載してあげましょう。
a: int = 1
b: str = "hello"
これで誰が見てもこの2つの変数がどういった値かがわかります。
しあわせなPythonコーディングへの第一歩を踏み出すことができました。
機械にも人間にもやさしいプログラマになろう
Type Annotation
は宣言したところでランタイム時にチェックされないので、もし型をミスっててもエラーを出してはくれません。(出すようにすることもできますが)
しかし、Type Annotation
を使うことでコードを書く自分も、読む他人も、反映する機械も幸せになれるのです。
そして、プログラミングのまだ見ぬ可能性に気づくことができるでしょう。これからは積極的にType Annotation
を使っていきましょう。