Re: 三項演算子(Re:こんなコード書く?)
加藤@ODNです.
In article <d0uobu$2cr$1@ns.src.ricoh.co.jp>, Junn Ohta wrote:
>fj.comp.lang.cの記事<42328fca.7081%katoh@pop12.odn.ne.jp>で
> katoh@pop12.odn.ne.jpさんは書きました。
>> 「実行される箇所」というのは(機械語ではなく)ソース上の(字面の)話です
>> ね?
>
>機械語でも、もとのソースの対応する範囲の外には飛ば
>ない、外からも入ってこないという意味で閉じている、
>つまりフローに影響しないわけですよね。
あ,フローってのはそういう意味でしたか.
>> こういうのを副作用と呼ぶかには,かなり疑問がありますが...
>
>「こういうの」じゃなくて、?:や&&を使えば条件によっ
>て関数が呼ばれてその結果文字が出力されるとか、そう
>いう点を副作用と呼びました。
それはその関数の副作用であって,演算子の副作用ではありません.
>> && や || は,一方の値に依っては,残りを計算しなくても全体の値が決まると
>> いう,その演算の(ある意味特殊な)性質を利用しているので,?: 演算子とは
>> 若干性質が異なるように思えます.
>
>計算というか、評価が行われるかどうかを問題にしてい
>るわけです。必ずしも全体を評価しない、という点で似
>ているかなと。
私の,「若干性質が異なる」という主張のポイントはここですね.&&, || は
第一項の値に依存して「必ずしも」ですが,?: は「必ず」なんです.
>> また,乗算でも,第一項がゼロだったら残りを計算
>> せずに結果をゼロにするというのも考えられます(Cで許されたっけ?).
>
>こちらの場合は、残りを計算結果に反映するかどうかは
>ともかくとして、評価はしないとC言語としてはまずい
>でしょ?
これはそういう話ではなくて,&&, || 以外にも計算を中断できる演算は他にも
あるという例です.
>> もちろん,?: に後ろの二項とも評価するように操作的な意味を与える事は可能
>> で,それをしなかったのは何故か,という話なら,Cの場合は,実行速度最優先
>> で設計したから,ということだと思います.
>
>それはまあそういってもいいかな。実行速度最優先にす
>るために何かを犠牲にした、というわけではなくて、評
>価しない項を作るということに積極的な意義をもって設
>計しているような気はするんですけどね。
ですね.<積極的な意義
#雑駁に言えば,便利だから(爆.
--
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