From: Takaaki Tateishi Date: 2002-06-18T14:16:57+09:00 Subject: [ruby-dev:17509] Re: blocks and local variables 立石です. # このメールでは,局所変数だけに絞って書きます. # インスタンス変数などのことは全く考慮していません. At Tue, 18 Jun 2002 12:51:39 +0900, Yukihiro Matsumoto wrote: > |> * なぜ分かりにくくなっているのか > | > |明示的な宣言がないことではないでしょうか? > |そのため,どこで宣言されるのか分かり難いということだと思います. > > えーと、これは「ネストするブロックローカルな変数に関しては」 > という意味ですよね。変数の明示的な宣言がないこと一般であれば、 > それはRubyの特徴のひとつであるので譲れませんから。 はい,これを否定する考えは全くないです. 宣言がないことをどうカバーするのかという解の一つが,ユーザが変数 の有効範囲を探すのにもっとも楽なものにすれば良いのではないかと思 っていて,楽にするためには探す範囲をより狭めれば良いと… > 「よりスコープの範囲が短い方が見やすい」のあたりからよく分か > らなくなってしまいました。いや、メリットは分からないでもない > んですが、それだけでは過去の互換性を捨てるほどのメリットに思 > えないんですけど。 「スコープの範囲が短い方が見やすい」の後は気にしないで下さい.文章 に入れない方がよかったと後悔しています. 互換性を捨てるほどのメリットはないと思いますが,自然だとも思います. ブロックを作るということは,それで一まとまりの思考の単位だと思います. 変数をブロックローカルに制限することで,ブロックの中だけを考えてプロ グラムすることができます. 見やすく自然な方を採るか,互換性を採るかを考えると,互換性への影響が 微量ならば見やすく自然な方を採るのが良いと考えます. そして,パラメータについては,どの程度のプログラムが影響してくるかを見 積もるということで調査の結果が参考になると思います. ただ,以下にあるように, > ブロックパラメータをブロックにローカルにするだけでは、ブロッ > クローカル変数の問題は解決しないのですが、その辺はどう考えて > いますか? ブロック内変数についてもこの考えを適用してしまうと,互換性がなくなる ものが非常に多いですし,ブロック外への代入を実現する直観的な方法がな いと,プログラムし易いとは言えなくなります.そのため,現状維持が良い のかなとなんとなく思っています. どこかのバージョンで大きく仕様変更して,すべてローカルというのも良い ですが,さすがに1.xではあまりして欲しくないなというのが本音です. 1.xでは上のブロック内変数にアクセスするというみせかけだけの文法を用意 して,現状維持も良いかもしれないと今ちょっとだけ思っています. := のような「常に宣言して代入」という案は,結局宣言を明示していること になりますから先の宣言を明示したくないという思想を考えるとあまり賛成 も反対もできないというくらいです. -- Takaaki Tateishi