0
0

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 1 year has passed since last update.

Pythonのような動的型付け言語でも「変数の型を考えること」は大切だと思う

Last updated at Posted at 2022-02-12

概要

型を宣言することの良い点は、プログラムで表現しようとしている対象深く考えるきっかけを与えてくれる点だと思います。

私はPythonを書き始めた頃、型宣言する必要がないために、変数の型を意識しませんでした。
最近、はプログラムを書く際に副操縦士や補助輪としてプログラマーを補佐する効果があると感じています。

たとえ話

プログラムはなにかを表現するものだと思います。
ここではバレーボールを表現してみます。

登場させるのはセッタースパイカーバレーボールです。

セッターがボールを上げて、スパイカーが相手コートへ打ちこむ様子を書きます。

例1

example1.py

ball = "ball"
setter = Setter()
spiker = Spiker()

setter.setup(spiker, ball)
spiker.spike()

これでも一応はバレーボールにおける、セッターがボールを上げて、スパイカーが相手コートへ打ち込むという様子を表現できていそうです。

例2

次の例を見てみます。

example2.py

ball = "soccer_ball"
setter = Setter()
spiker = Spiker()

setter.setup(spiker, ball)
spiker.spike()

この例ではball変数にsoccer_ballが入っています。
にもかかわらず、セッターもスパイカーも気にすることなく競技を続けているようですね。

例3

最後にかなり変な例を書きます。

example3.py

ball = "water"
setter = Setter()
spiker = Spiker()

setter.setup(spiker, ball)
spiker.spike()

今度はボールではなく**水(water)**になっています。
それでも、セッターとスパイカーは気にしていない様子。

型宣言をしてみる

たとえ話で出てきたサンプルコードは、どこかおかしいものでした。
特に例2と3は変ですね。

ここで考えてみたいことは、何が変だったかということです。
プログラムだけに閉じた話をすれば、何も変ではないです。実際に動作するでしょう。

ただ、バレーボールを表現しようとしたプログラムだとすれば、変です。

この違和感を型宣言をすることで確認しましょう。

example1_ver2.py

ball: str = "ball"
setter: Setter = Setter()
spiker: Spiker = Spiker()

setter.setup(spiker, ball)
spiker.spike()

ボールを表す変数ballstrとなっていることに違和感を覚えます。
バレーボールで使うボールは文字列ではなく、本物のボールだからです。

文字列のボールを使っているから、waterというヘンテコな値が入り込みました。

example1_ver3.py

ball: Ball = Ball()
setter: Setter = Setter()
spiker: Spiker = Spiker()

setter.setup(spiker, ball)
spiker.spike()

上記ではballBall型を入れています。
これならば違和感はないですね。

ちょっと状況を変えて、これが球技大会の中の位置種目としてバレーボールがある場合はどうでしょう。
サッカーやバスケットボールもあります。
ただのBall型だとサッカーボールやバスケットボールと混同しそうです。

example1_ver4.py

ball: VolleyBall = VolleyBall()
setter: Setter = Setter()
spiker: Spiker = Spiker()

setter.setup(spiker, ball)
spiker.spike()

VolleyBall型を入れることで、サッカーボールでもバスケットボールでもないバレーボールを使っていることがわかります。

まとめ

このように型を意識して書くことで、自分がプログラムで表現しようとしている対象のことを深く考えるようになります。
対象に対する理解深まるほどに、読んでいて自然なプログラムを書けるようになると感じます。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?