Python
変数
可読性

人の気持を考えてPythonコードを書こう


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です。これなら、変数の中身を見なくてもalist型だとひと目でわかります。

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勢なら大激怒ですね。

変数への異なる型の再代入はまじでキモいので止めたほうが良いことに気づきます。

いくら動的といえど、型を変えられると再代入を機械に任せることになります。

また、テスト時に参照を追えなくなるのでつらいです。

それなら新しい変数を宣言するほうが100億倍マシです。動的言語に頼るのは止めましょう。


機械にも人間にもやさしいプログラマになろう

Type Annotationは宣言したところでランタイム時にチェックされないので、もし型をミスっててもエラーを出してはくれません。(出すようにすることもできますが)

しかし、Type Annotationを使うことでコードを書く自分も、読む他人も、反映する機械も幸せになれるのです。

そして、プログラミングのまだ見ぬ可能性に気づくことができるでしょう。これからは積極的にType Annotationを使っていきましょう。