背景
以下のコードを見たとき、すぐに処理が分からなかった上に、p1
がTrue
のときに0
が割り当てられると誤読した。
val1 = p1.val if p1 else 0
なぜ誤読したか?
-
三項演算子は普段一切使用することなく、複数行のif else構文で記述していたから
等価な複数行の
if-else
表現では、if p1
が先行しているif p1: val1 = p1.val else: val1 = 0
なぜ三項演算子を普段使っていなかったか?
"三項演算子は可読性に問題があることが多いため使用するべきでない"という言説を学習初期に観測していたから。
誤読しないための解決策
-
三項演算子を以下の表記で暗記する
result = value_if_true if condition else value_if_false
-
英語で読み上げる
-
英語話者が定義した形式であるため、彼らの気持ちに寄り添って、思考プロセスに共感する
x = 10 y = 20 # the variable max_value # is assigned # the value of x # if x is greater than y; # otherwise, # it is assigned the value of y. max_value = x if x > y else y
つまり、
- 結論ファースト:
max_value
とはx
なんだ、と主張する。 - 条件: まあ
x > y
の時だけどね、と続ける。 - MECE: 違ったら
y
ね、として、MECE(もれなくダブりなく)を満足する構造で締めくくる
という思考プロセス、論理的構造が、英語話者の頭にあるのだ。
- 結論ファースト:
-
所感
日本語のみで考えていたら、三項演算子の表記は丸暗記するのみで、何となく気持ち悪い感覚が心に残ったままでいたと思う。
英語で読み上げて、彼らの表現したい気持ち、思考をたどってみれば、確かにこの表記で定義するだろうなあと腑に落ちたのであった。