作者: davi
日時: 2008/3/02(02:56)
機械伯爵さん  <  こん??は でび です

こっちが本筋の話。

On Sat,  1 Mar 2008 21:30:56 +0900 (JST)
kikwai@... (機械伯爵) wrote:

> どんな処理についてそう言われたのかわからないので、はっきりとは言えませんが、
> 私はPascalで独習してたこともあって、「手続き(プロシージャ)」と「関数(ファン
> クション)」は、はっきりと意識して使い分けています。

なんか、メインが2〜3行しかないものだったと思います。

で、メインの中では別の所で宣言しているexecの成功/失敗の
判定程度と、失敗した時にイニシャライズ(を呼び出す宣言)
くらいしか行っていない。
当然、イニシャライズ手続きそのものも、外部に定義されている。

execの宣言の所も、実際には別の所で定義している手続きを
Do しているだけ。

イニシャライズはおろか、execそのものさえ外側で
宣言しているのに納得がイカンのですよ。

で、そのDoされている所を見に行くと、その手続きの
内部で、さらに別の所に宣言してある関数を呼び出して
戻り値を得ている。


>「手続き(プロシージャ)」と
>「関数(ファンクション)」

こういう観点は持ってみていませんでした。
つまり、一緒くたに見ていたのですが、印象としては、参照先を
ドンドン先延ばしして飛ばして行くような感じでした。

ファイルオブジェクトでたとえて言えば、exeファイルそのものを
直接呼び出すことは絶対にしないで、直接呼び出して触るのは
エイリアスとして置かれているものだけ、みたいな…。

>  ここでメタファが重要になります。
> 
>  サブプロシージャはブラックボックス化された手続きですので、「その中身」を考え
> ることなく「何が起こるのか」を理解すればいいわけです。
> 
>  関数も同じく、結果の値(オブジェクト)と置き換えられると考えれば問題ありませ
> ん。

この「メタファ」で言えば、詮ずるところは、どちらも
「ブラックボックス化」が狙いですよね?
その上で、

> 私はPascalで独習してたこともあって、「手続き(プロシージャ)」と「関数(ファン
> クション)」

を、「はっきりと意識して使い分け」るというのは、どういう感覚
(考え方?)なのでしょうか?

あるいは、「手続き(プロシージャ)」と「関数(ファンクション)」
を意識上で区分することによって「得られるメリット」とでも言えば
いいのかな・・・。

特に、

>  手続きは「命令」ですから、コードの中から外の何か(機器や、
> 外部変数など)を操作するのが目的です。

>  それに対し、関数は関数の中でコードが完結しています。

この2つの違いは、

「手続き」は挙動の遷移先であり、自分自身が動いてゆく感じ。

「関数」は返り値だけを得るための問い合わせる感じで、
自分自身はそこに居座る感じ。

そんな風に感じましたが、「“自分自身が動いてゆく”必要が
どうしてあるのか?」というのが、がよくわかりません。

>  まぁ、それでフローが見え難くなるようなコード

そのコードそのものが悪かったのかもしれませんが、
仮に、コードそのものは悪くなかったとした場合、
やはり、「“自分自身が動いてゆく”必要がどうしてあるのか?」と。

でび  http://davi.txt-nifty.com/1984/