作者: うぇいく
日時: 2008/3/2(13:49)
うぇいく です。

 実装としてのprocedureとfunctionの差は、「式の途中で使う意味の有る値を
返すかどうか」で分けています。

 では、読むときはどうか? というと、2つの間に差はありません。どちらの
場合でも、「そーゆーもの」(仕様の通りに動くと仮定)としておいておきます。
# 手続き型の呼び出しだからといって、APIや標準ライブラリの内部動作を
# 追いかけたりしません。

なので、関数でも手続きでも、自分が動くという感覚はありません。

仕様が解らない場合には、新しい手続き/関数ごとに中を参照しますが、それは、
「解らないものは解るところまで追いかける」だけなので、関数か手続きかには
依存しません。
# 標準APIなど、仕様のわかっているものは追いかけません。
# また、1度確認した処理/関数は2度目は見に行きません(動作を覚えてれば)

 なお、関数は単一の数値(やオブジェクトや集合)を返却するため、仕様が
単純で結果として理解しやすいと考えています。呼出元との分離がよくできており、
意識をそちらに向けなくても(移動した感覚が無い状態で)、読み進めてゆけるの
だろう と。

 なお、部品として汎用的に作成している手続き/関数は、だいたい上記に
あてはまると思いますが、一連の処理を階層的/ブロック的に分けている
ような場合は、また、違う可能性があります。
# うまく分けていればともかく、こっちのケースだと、「処理1」「処理2」
# みたいに分けちゃうこととかあったり(結合の薄い部分で物理的に分割しただけ)
----- Original Message -----
(前のほうは略。)
>>  ここでメタファが重要になります。
>> 
>>  サブプロシージャはブラックボックス化された手続きですので、「その中身」を
考え
>> ることなく「何が起こるのか」を理解すればいいわけです。
>> 
>>  関数も同じく、結果の値(オブジェクト)と置き換えられると考えれば問題あり
ませ
>> ん。
>
>この「メタファ」で言えば、詮ずるところは、どちらも
>「ブラックボックス化」が狙いですよね?
>その上で、
>
>> 私はPascalで独習してたこともあって、「手続き(プロシージャ)」と「関数(フ
ァン
>> クション)」
>
>を、「はっきりと意識して使い分け」るというのは、どういう感覚
>(考え方?)なのでしょうか?
>
>あるいは、「手続き(プロシージャ)」と「関数(ファンクション)」
>を意識上で区分することによって「得られるメリット」とでも言えば
>いいのかな・・・。
>
>特に、
>
>>  手続きは「命令」ですから、コードの中から外の何か(機器や、
>> 外部変数など)を操作するのが目的です。
>
>>  それに対し、関数は関数の中でコードが完結しています。
>
>この2つの違いは、
>
>「手続き」は挙動の遷移先であり、自分自身が動いてゆく感じ。
>
>「関数」は返り値だけを得るための問い合わせる感じで、
>自分自身はそこに居座る感じ。
>
>そんな風に感じましたが、「“自分自身が動いてゆく”必要が
>どうしてあるのか?」というのが、がよくわかりません。
>
>>  まぁ、それでフローが見え難くなるようなコード
>
>そのコードそのものが悪かったのかもしれませんが、
>仮に、コードそのものは悪くなかったとした場合、
>やはり、「“自分自身が動いてゆく”必要がどうしてあるのか?」と。
>