Re: 三項演算子(Re:こんなコード書く?)
加藤@ODNです.
In article <uhdjh3sm3.fsf@anet.ne.jp>, OOTANI TAKASHI wrote:
>以前同じような議論をした記憶が。
>
>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部も必ず評価するので使いにくいことこの上なし。
あ,それはあるかも.#Lisp1.5 にも入れときゃ良かったのに.< if
>> 蛇足ですが,Lisp で and や or を cond の代わりに使うのは,私は,邪道(あ
>> るいは,トリッキーで真っ当なプログラマーはやるべきではないこと)だと思い
>> ます.
>
>and,or は全引数を評価してからand/or演算をする仕様であっても動作するように
>書くべきという考えでしょうか。condだけ対象外な理由がわかりません。
読み難い,バグり易い,cond で十分,が理由です.
#GNUS の件は二番目の例でした.
>perlで、hogehoge or die というのをよく見かけますが、あれも邪道だと思いますか?
perl は使った事がないので分かりません.
># Cでも 0||3 が1でなく3になればすっきりすると思いますが。
ふむむ,それも面白いかも.
--
Hideki Kato <mailto:katoh@pop12.odn.ne.jp>
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