Python 条件分岐 #6

株式会社リュディアです。今回は条件分岐の 1 手法として三項演算子についてまとめてみます。前回までの条件分岐のまとめへのリンクは以下を参考にしてください。

私が初めて三項演算子を使ったのは C 言語に触れ始めた時期ではるか昔です。C言語の三項演算子は以下のように記述します。

max = a > b ? a : b

これは a > b が成立するなら max = a、成立しないなら max = b とする、という意味です。昔のプログラマはテクニカルな記述をすることで上級者のふりをする、というようなところもあったため複雑な三項演算子の記述をよく見かけました。ある時期からソフトウェアシステムが大規模化しチームでの開発が主流となりプログラムに可読性の高さを要求するようになってきました。Python は特にインデントで制御構造を記述することで誰が書いても同じようなコードになるようにという思想が貫かれています。そのため三項演算子についてまとめるかどうか正直悩みましたが、うまく使うと可読性を落とすことなく簡潔に記述できますのでまとめてみることにします。

では最初の例です。以下の if 文で書かれたコードと三項演算子で書かれたコードを見比べてください。いずれも同じ結果になります。

a = 3
if a < 3:
   print('a < 3')
else:
   print('a >= 3')

>> a >= 3

# 三項演算子で上の if 文を記述した場合
a = 3
print('a < 3') if a < 3 else print('a >= 3')

>> a >= 3

この内容であれば三項演算子を使ってもよいと思います。最初はわかりづらいかもしれませんが大きく可読性が下がるとも思えません。

次に以下の例を見てください。

a = 3
if a < 3:
   print('a < 3')
elif a < 10:
   print('3 <= a < 10')
else:
   print('10 <= a')

>> 3 <= a < 10

# 三項演算子で上の if 文を記述した場合
a = 3
print('a < 3') if a < 3 else print('3 <= a < 10') if a < 10 else print('10 <= a')

>> 3 <= a < 10

これは三項演算子を使うのがよいかどうか微妙な例としてあげました。if 文の例を見てから三項演算子の例を見ればわかりますが、私の場合はいきなり見せられると頭の中でプログラムの流れを読んでいたのが急に思考を止められるというか可読性が下がっているように感じます。このあたりは個人の好みやチームのレベルにも依存するので一概には言えないです。

個人的には三項演算子は相当に厳選して使うべきであって、可能なら使わない方がよいと思っています。私もたまには使うのですが、可読性が落ちていないか?という観点でしっかりと考えるようにしています。

皆様も他人の書いたコードを読むために三項演算子については知っておいてよいとは思いますが、利用する場合には本当に使うべきなのか?他の人がこのコードを見たときにどう思うか?ということを考えてから使うべきだと思います。

では、ごきげんよう。


この記事が気に入ったらサポートをしてみませんか?