226
180

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-04-14

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

変数への異なる型の再代入はまじでキモいので止めたほうが良いことに気づきます。
いくら動的といえど、型を変えられると再代入を機械に任せることになります。

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


型が異なるときは新しい変数を宣言しましょう。

a = 1
b = "hello"

こうすれば `a` は`int`型で`b`は`str`型であることが判断できます。そして、さらにこのように型を記載してあげましょう。
a: int = 1
b: str = "hello"

これで誰が見てもこの2つの変数がどういった値かがわかります。
しあわせなPythonコーディングへの第一歩を踏み出すことができました。

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

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

しかし、Type Annotationを使うことでコードを書く自分も、読む他人も、反映する機械も幸せになれるのです。
そして、プログラミングのまだ見ぬ可能性に気づくことができるでしょう。これからは積極的にType Annotationを使っていきましょう。

226
180
22

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
226
180

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?