Re: 三項演算子(Re:こんなコード書く?)
以前同じような議論をした記憶が。
In article <42328fca.7081%katoh@pop12.odn.ne.jp>
Hideki Kato <katoh@pop12.odn.ne.jp> writes:
> && や || は,一方の値に依っては,残りを計算しなくても全体の値が決まると
> いう,その演算の(ある意味特殊な)性質を利用しているので,?: 演算子とは
> 若干性質が異なるように思えます.例えば,& や | の仲間の ^ (exclusive or)
> にはこれは適用できません.
&& と &、|| と | は全く異なる演算子なんで、^ を持ち出しても無意味です。
> もちろん,?: に後ろの二項とも評価するように操作的な意味を与える事は可能
> で,それをしなかったのは何故か,という話なら,Cの場合は,実行速度最優先
> で設計したから,ということだと思います.
おそらく、algol60の条件式(if 条件式 then 式 else 式)由来だと思います。
excelのセル関数IFはTHEN部もELSE部も必ず評価するので使いにくいことこの上なし。
> 蛇足ですが,Lisp で and や or を cond の代わりに使うのは,私は,邪道(あ
> るいは,トリッキーで真っ当なプログラマーはやるべきではないこと)だと思い
> ます.
and,or は全引数を評価してからand/or演算をする仕様であっても動作するように
書くべきという考えでしょうか。condだけ対象外な理由がわかりません。
perlで、hogehoge or die というのをよく見かけますが、あれも邪道だと思いますか?
# Cでも 0||3 が1でなく3になればすっきりすると思いますが。
--
tksotn
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735