From: "竹花 文士" Date: 2004-03-22T01:06:30+09:00 Subject: [ruby-list:39411] Re: rubyの関数定義について  竹花 文士です。  はじめまして。  まさか、松本さんを引っ張り出すような事になるとは・・・。  ちょっと、どきどきしてます。   >が、「見通しの良い書き方をサポートする言語仕様」というのはど >のようなものを考えていらっしゃるかについては、大変興味があり >ます。今後の参考のためにも是非聞かせていただきたいものです。  今回の文章では、関数の先行宣言構文を思い描いて、発言をしています。(ちなみに、 今のところ、rubyで不便に思うのは、この件と、C++でいうデストラクターの構文が見 あたらないことくらいですけど。後者に関しては、メソッドのブロック付き呼び出しで 対応するのが流儀なのかなと思っています。)    たとえにあがっている、Cの関数の先行宣言構文でも、使う「義務」は有りませんか ら、詳細(サブルーチン・関数)を全部書いてから、メイン部分を書くこともできるわ けですが、プログラミングスタイル上の問題として、多数の人は、先行宣言をして、 main関数を書いた後にサブルーチンとなる関数定義を記述しますよね。プログラムの大 枠となるmain関数は、できるだけ、最初の方に有った方がプログラムの流れがつかみや すいというのは、私だけの思いでもないということでしょう。(詳細が先に読みたいと いうスタイルが好きなら、Cでも禁止されているわけではありません。)  そんな意味合いでの言語のサポートと書いたつもりでした。  いかに、言語できれいなソースが書けるように部品が用意されていても、それをどう 使って読みやすいソースを書くかは、書く人の感性ですから、それを強制する必要は無 いでしょうし、そもそも不可能でしょう。その点は、松本さんの発言に同感です。  部品としては、クラス構文・関数、rubyでおもしろいなぁと思ったのは、ブロック付 きメソッド呼び出し、attr_accessor構文、今回の事例の先行宣言構文 等、そんなイ メージです。これをどう使うかは、それこそ、個人個人の感性でしょう。    その点から、rubyの構文を見ると、関数の定義をまず最初に書くことが強制されてい るようにみえます。(勉強不足かもしれませんが)Cで言えば、先行宣言をせず、関数 定義を全部書いてから最後にmain関数を書くスタイルでしか書けないということです。  別に、先行宣言でなくても、関数・クラスの定義よりも前に、その関数・クラスを使 用する方法が構文上に有れば、それで良いわけですが、話の流れから、頭の中には、先 行宣言が浮かんでいます。(まぁ、先行宣言無しで、言語を実装するとなると、今度は、 コンピュータが全部のファイルをいったん総なめしてすべての関数・クラスリストを生 成してから、処理を開始することになり、ちょっと非現実的かもしれませんけど。)  今回の事例では、requirで逃げるというのは、これを回避するために私は多用してい る、ひとつの手段ですが、一つ二つのルーチンのために、わざわざファイルを分割する となると、それはそれで、管理するファイルが増えるだけ面倒なことがあります。  メイン処理の為のクラスを定義するのも気がついてはいましたが、どうも、メイン処 理関数(または、「ルーチン」)をオブジェクトとして定義するというのに、ちょっと 違和感を感じ、まだこの構成はしたことがありません。  そんなイメージで、先の文章を書かせて頂きました。ひとつの雑感として解釈しても らえば結構です。  これを実装するために、全体的に、宣言を強制せず、型に関して非常に緩やかな(こ れに関しては、とっても便利に感じます。)構文の基本が壊れるとかえって残念ですか ら。    長文な上、どうも、文章がだらだらしてしまいましたが、ご容赦ください。  それでは、失礼します。 --------------------------------------------- 竹花 文士(ruby.mito@laki.jp)