作者: KIMURA Koichi
日時: 2008/3/01(23:51)
Bruce.です。

davi さんは書きました:
>> 同じ処理を別のところに二回書くのを避けただけです。
> 
>> まったく同じコードを複数個所に書き散らすのはバグの元ですから、
> 
> 理解。それはそうです。真っ当だと思います。
> 
> 知り合いに、1回しか呼んでいないのに何でもかんでも外に追い出す
> VBの中の人がいましてね…。
> 
> 「何書いてあるんだかわかんねーんだよ」と文句言ったら、「ファンク
> ションとサブプロシージャは違うのじゃ、その違いがわかって言って
> いるか?」と煙に巻かれました。
> 
> これ、絶対、煙に巻かれてますよね? 悔しいです。

この部分だけを読んだだけではなんともいえません。状況がわかりませんから。

まあ「ファンクションとサブプロシージャは違う」というのが具体的になにを
主張したいのか皆目わからんというのもありますけど。少なくとも一回しか
呼び出さないからということから出てくる反論とは思えません。

それはさておき。

確かに今回、わたしは複数箇所に同じことを書くことを避けるのを目的として
関数にくくりだしましたが、一度しか行わないことはすべてべた書きでいいか
というとそうとは一概には言えないと思います。

awkではほとんど意味がありませんが、関数もしくは手続きとしてある処理を
くくりだして独立させるということにより、その処理で使っている変数などを
局所化することができるという効果があります。

最近の言語ではそうでもありませんが、古くから使われている言語においては

    関数/手続き名
    変数の宣言
    処理の実体

のように明確に順序があり、変数の宣言を処理の実体の途中でおこなうことは
できません。
#Cではブロックがあればその先頭で宣言できますが、それはとりあえず除外

仮に変数をたくさん使うような「毛深い処理手順」があったとして、それを
独立した手続きなり関数なりにすることができれば、本体での変数宣言を
少なくすることができるというメリットもあります。

> 「万年初心者はなにゆえに万年初心者なのか?」ということの解の
> 1つには、抽象化とかオブジェクト化とかの高尚なお話以前に、
> 「あっちこっち飛んだらわからなくなる」というのが絶対あると
> 思います。

まあ大規模なプログラムとかを追いかけていると、呼び出している関数
(手続き)の中までもぐって行ったりしたときに頭の中のスタックが
あふれそうになりますね :)


> で、入門書で、「デバッグの仕方」とか「そのときどんな値が入って
> いるのかを、状況遷移の一段階ずつを追って知る方法」を明示的かつ
> 超重要としてハッキリ書いてくれているものには出会ったことがあり
> ません。

入門書でなくても、デバッグに関してきちんと書いている本は多くは
ないですよ。ぱっと思いつくのはKernighan大先生の本(プログラミング
作法など)とかですね。

まあデバッガの使いかたの解説してもしょうがないってのはあるかも
しれません。


> 実に不思議です。
> ア○キーとか○評とかの言語入門書出版社の深謀遠慮としか思えません。

単に書き手がいないだけでしょう。
仮にいても売れる本にできるかどうか。
あと、アの方の会社はなくなるみたいですが。

とりあえずこんなところで。

あ、ついでに。

> たとえば、Cのprintf関数なんかは、成功/失敗の結果が返されますが

ちゃいます。

ところで機械さんの手続きと関数の分類の基準は興味深く読ませていただきまし
たが、
Python3000のprint()って何を返すのでしょう?
#って書いている間に調べろ、ってことか

-- 
木村浩一/KIMURA Koichi
 I thought what I'd do was, I'd pretend I was one of those deaf-mutes or
shoud I?
 mail kbk at kt.rim.or.jp
 web  www.kt.rim.or.jp/~kbk/zakkicho/index.html