nikkie-ftnextの日記

イベントレポートや読書メモを発信

Pythonにはif文と条件式があります(『Rustの練習帳』著者への手紙)

はじめに

麻衣さああああああああんん!!!! 鹿児島に来ているnikkieです。

行きの飛行機の中で『Rustの練習帳』を読んでいました。
これは大変面白いです!!(今後の1日1エントリで回収されるでしょう)
読んだ範囲で1点だけ、Pythonに関して著者との間で解釈不一致があったので、簡単に取り上げます。

Pythonにはif文とif式があります。(2.2.4の注1)

nikkieの解釈:
Pythonにはif文と条件式があります。

目次

if

Python言語リファレンスより
https://docs.python.org/ja/3/reference/compound_stmts.html#if

if 文は、条件分岐を実行するために使われます:

Python 3.9以降は具象構文はPEGで定義されます。
この見た目の話は私には興味深く、過去のエントリ(やPyCon)で取り上げました。

if式ではなく、条件式

『Rustの練習帳』著者がif式と読んでいるものは、条件式と思われます。
https://docs.python.org/ja/3/reference/expressions.html#conditional-expressions

条件式 (しばしば "三項演算子" と呼ばれます) は (以下略)

言語リファレンスを読み込んでいるPython使いはまれだと体感しており、「条件式」で伝わることは観測範囲では全然ありません。
ただ、言語リファレンスに沿って、「if式」ではなく「条件式」と呼びたいかなと思います。

条件式にはPEPがあります(積ん読

ちょっと戦争を引き起こしましょう。

シンタックスもキモい

1 if x else 0

三項演算子も最悪だ。冗長で、醜く、プログラマのメンタルモデルに一致しない。

"日本語話者エンジニアである自身のメンタルモデルに一致していない"と言い換えていただいた方が良いかもしれない。

英語においては"A if condition. otherwise B"という言い方を普通にするので、読みやすさという観点でこれにあっているのだ。

はい!戦争終わり!!

Pythonifは文であり、式ではありません。
ifが式の言語(例:Rust)ではブロック内の最後の式の評価結果をif(式)の評価結果にできると思いますが、Pythonでそれはできません。
この点からもif式と呼ぶよりは条件式(三項演算子)かなと思います。

終わりに

Pythonにはif文とif式があります。」をきっかけとしたアウトプットでした。

  • Pythonifであり、式ではない
    • (=制御に影響するが、なにか値として評価されるわけではない)
  • ifを使った条件式(三項演算子)はある

仮にこの本のレビュアだったら、「Pythonにはif文と条件式があります」のように修正を提案したと思います。

マサカリめいた記事を書きましたが、重箱の隅をつついているだけに過ぎません。
『Rustの練習帳』著者のRustやLinuxコマンドの知識は豊富なので、この本を読み進めるのはとても楽しみです🤗