記事内にはプロモーションが含まれています

Pythonの三項演算子がわかりにくい理由と正しい使い方

Pythonの三項演算子がわかりにくい理由と正しい使い方 プログラミングの疑問解決

Pythonを学び始めたり、他のプログラミング言語から移ってきたりした人が、最初に「おや?」と戸惑う文法の一つに「三項演算子」があります。

ifelseの位置が直感的じゃない…」
「他の言語と書き方が違って、どうにも読みにくい」

もしこう感じているとしても、それは自然なことです。
Pythonの三項演算子は、その独特な語順から「わかりにくい」と言われることが少なくありません。

この記事では、なぜPythonの三項演算子がそのような構文になっているのか、という背景から説明し、わかりにくいと感じられる理由を解説していきます。

また、三項演算子はどのような場面で使うべきか、逆にどのような場面では避けるべきかという「使い分け」の指針も紹介しますので、是非参考にしてください。

【本記事の信頼性】

  • 執筆者は元エンジニア
  • 大手プログラミングスクールのWebディレクター兼ライターを経験
  • 自らも地元密着型のプログラミングスクールを運営
忖度一切なし!
受講生から評判の良いプログラミングスクール
スクール
特徴
受講料金
大手比較サイトで4年連続人気NO.1!受講生からの評判も非常に高く、Web系のエンジニアを目指すならRUNTEQ一択。
657,000円
(最大約53万円の給付金が適用される)
月単価80万円以上の現役エンジニア講師による指導!一度入会すればサポートは半永久的。
498,000円
格安で質の高いWeb制作スキルを習得したい人におすすめ!業界最安級の料金でありながら、コミュニティやサポートが充実。
129,800円~
完全無料でプログラミングが学べる貴重なスクール!最短1ヶ月で卒業可能。ゼロスク運営会社への就職もできる。
完全無料
長期間に渡って学習し、希少人材を目指す人に最適なスクール!受講料は高いものの、高収入を得られる人材を目指せる。
96~132万円

Pythonの三項演算子の基本構文

まずは、基本の形から確認していきましょう。

Pythonの三項演算子は、通常のif-else文を一行で簡潔に書くためのものです。

通常のif文との比較

例えば、ある数値が偶数か奇数かを判定して、結果を文字列で返す処理を考えてみます。

通常のif-else文で書くと、このようになりますね。

num = 10
result = ''

if num % 2 == 0:
  result = '偶数'
else:
  result = '奇数'

print(result)

実行結果は以下の通りです。

偶数

上記のif文の4行のコードが、三項演算子を使うとたった1行で書けるのです。

num = 10

result = '偶数' if num % 2 == 0 else '奇数'

print(result)

これが三項演算子の基本形、「真の場合の値 if 条件式 else 偽の場合の値」です。
コードが短くなり、スッキリした印象を受けるのではないでしょうか。

なぜPythonの三項演算子は「わかりにくい」のか?

コードが短くなるのはよいことですが、わかりにくくなっては意味がありません。

では、なぜPythonの三項演算子は「わかりにくい」と感じられるでしょうか?

この項目では、わかりにくいと感じてしまう主な理由を解説していきます。

他の言語との構文の違い

C言語やJava、JavaScript、PHPなど、多くのプログラミング言語における三項演算子は、以下のような構文を採用しています。

条件式 ? 真の場合の値 : 偽の場合の値

この形式に慣れている人からすると、Pythonの真の場合の値 if 条件式 else 偽の場合の値という語順は、条件式が中央に来るため、処理の流れを追いづらく感じてしまうのです。

これが「わかりにくい」と感じる最大の原因と考えられます。

「英語のように読める」というPythonの設計思想

なぜPythonは、あえて独特な語順を採用したのでしょうか。

そこには、「コードは書く時間よりも読まれる時間の方が遥かに長い」という考えに基づいた、Pythonの設計思想が関係しています。

Pythonは、プログラムをまるで自然な英文を読むかのように、直感的に理解できることを目指して設計されました。

先ほどの例をもう一度見てみましょう。

result = '偶数' if num % 2 == 0 else '奇数'

これを英語の文章として読んでみると、 result is '偶数' if num is even, else '奇数' となり、非常に自然な英文の語順に近いことがわかります。

つまりPythonの三項演算子は、他の言語のプログラマーから見ると少し奇妙かもしれませんが、「処理の結果」が先に来ることで、人間が文章を読む際の思考の流れに沿った、可読性の高い書き方を目指した結果なのです。

三項演算子の実践的な使い方

三項演算子の思想がわかったところで、どのような場面で使うと効果的なのか、具体的な例を見ていきましょう。

シンプルな変数への代入

これまで見てきたように、条件によって変数に代入する値を切り替える、というシンプルな場面が最も基本的な使い所です。

age = 22
status = '成人' if age >= 20 else '未成年'
print(status)

実行結果は以下の通りです。

成人

f-string内での利用

f-string(フォーマット済み文字列リテラル)の中で使うと、さらにコードを簡潔にできます。

is_member = True
message = f"あなたは{'会員' if is_member else '非会員'}です。"
print(message)

実行結果は以下の通りです。

あなたは会員です。

if-else文を一度変数に格納する手間も省け、非常にスマートな記述になります。

ラムダ式(無名関数)との組み合わせ

lambdaで簡単な関数を定義する際にも、三項演算子は活躍します。

# 絶対値を返すラムダ式
get_abs = lambda x: x if x >= 0 else -x

print(get_abs(10))
print(get_abs(-5))

実行結果は以下の通りです。

10
5

関数の処理が一行で完結するため、相性が良い組み合わせと言えるでしょう。

三項演算子を「使わない」べき場面

三項演算子は便利ですが、乱用するとかえってコードの可読性を著しく下げてしまいます。

ここでは、三項演算子を使うべきではないアンチパターンを紹介します。

複雑な条件分岐

if-elif-elseのように、3つ以上の分岐がある場合は三項演算子で書くべきではありません。
書けなくはないのですが、非常に読みにくくなります。

# 非推奨な例
score = 75
result = '優' if score >= 80 else '良' if score >= 60 else '可'
print(result) # 良

このような場合は、素直に通常のif-elif-else文を使いましょう。

# 推奨される書き方
score = 75
if score >= 80:
  result = '優'
elif score >= 60:
  result = '良'
else:
  result = '可'

どちらが読みやすいかは一目瞭然ですね。

ネスト(入れ子)は絶対に避ける

三項演算子の中に、さらに三項演算子を入れる「ネスト(入れ子)」は、コードを解読困難にする代表的な悪手です。

# 絶対に避けるべき例
num = 10
result = '正の偶数' if num > 0 and num % 2 == 0 else ('負の数' if num < 0 else '0または正の奇数')

このようなコードは、書いた本人でさえ後から読むのが困難になります。

複雑なロジックは、必ず通常のif文を使って、わかりやすく記述することを心がけてください。

まとめ

以上、Pythonの三項演算子が「わかりにくい」と言われる理由などについて詳しく解説してきました。

なお、Pythonを体系的に学んだり、Pythonのスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。

細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。

Follow me!

PAGE TOP