[ruby-list:47613] Re: Rubyでも「private」イコール「非公開」?
From:
ytakagi <ytakagi@...5.dion.ne.jp>
Date:
2010-11-06 07:52:07 UTC
List:
ruby-list #47613
誤解されるような書き方をしたようで、申し訳ありません。 それはそうと、私が思いますに、 private とは別に secret とでもいうアクセス制御子でも 新たに設けてそれを java の private と同等の機能とし、 private は非推奨としつつも、機能自体は将来的にも削らない。 けれども、その新たな secret なるアクセス制御子は 実はpython的な名前変更しているだけで、java と同等の機能を 提供しているように見えつつ、実はメタプログラミング好きな方も 困ったりはしない。 そんな感じでどうなのかなぁと。 叩き台になれるような案になってますでしょうか? yt (2010年11月06日 16:16), Makoto Kuwata wrote: > 桑田です。 > > 2010/11/6 ytakagi <ytakagi@m5.dion.ne.jp>: > > >> はじめまして、かな。 >> 興味深い内容なので、思わず出てきました。 >> >> 実質的に private が存在しないということだと、 >> 言語としてカプセル化が保証できない、という事になるかと >> 思うのですが、それは美しくないのではありませんか? >> >> > 「カプセル化が保証できない」という言葉から察するに、 > インスタンス変数をprivateにすることと、メソッドをprivateにすることを > 混同されておられませんか? > Rubyでは、インスタンス変数は勝手にprivateになる (publicにできない) ので、 > どちらかというとカプセル化を保証してくれる言語です。 > > 「privateが存在しない」というのはPythonのほうでしょう。 > > >> pythonを以前いじったことがありますが、 >> なかなかスマートなやり方をしていたと思いました。 >> >> private を指定すると、 >> >> property名の後ろにこっそり アンダースコア2つだかなにかが付け加えられ、 >> 外部からアクセスできなくなるというやり方だったかと思います。 >> > Pythonを知らない人には誤解を招きそうですね。 > 補足すると、Pythonの場合は次のようになっています。 > ・メソッド名やプロパティ名の先頭が「_」だと、非公開であると見なされる。 > これは言語仕様ではなく、単なる紳士協定。 > ・メソッド名やプロパティ名の先頭を「_」2つにすると、クラス名が自動的に > 付加される (これは言語仕様)。 > これによって、名前が意図せず重複するのを避けている(外部からアクセス > できなくするものではない)。 > > >> このやり方だと、いざという時に緊急避難的にアクセスすることも出きるし、 >> > これはその通りですが、 > > >> 普通にはjava のprivate と同じ扱いでもあります。 >> > これはさすがに違います。Pythonのは単に名前がかぶらないようにしている > だけで(*1)、「Javaのprivateと同じ」というのは語弊があるかと思います。 > 例えるなら、「Javaの匿名クラスはクロージャだ」と主張するようなもの。 > > (*1) それが悪いというわけではなく、仕組みが簡単なわりに一定の効果を > あげている、いいアイデアだと思います。 > > > >> そんな感じだと分かりやすいのではないでしょうか? >> > Rubyでも、「非公開なものは先頭に "_" をつける習慣にしましょう」という > 主旨でしたら、賛同します。 > 定数の場合はそうもいかないので、"_" で終わるようにするとか。 > #「_FooBar」でも定数と見なすように言語仕様を変更するとかは難しいかな。 > > Pythonと同じように、名前が「_」2つで始まる場合はクラス名をつけるという > のは、コンテキストが入り乱れるRubyでは難しいかもしれません。 > > -- > regards, > makoto kuwata > > >