加藤@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>