[#47605] Rubyでも「private」イコール「非公開」? — Makoto Kuwata <kwa@...>

桑田といいます。

12 messages 2010/11/04
[#47606] Re: Rubyでも「private」イコール「非公開」? — Yusuke ENDOH <mame@...> 2010/11/04

private constant 提案者の遠藤です。

[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
>
>
>   



In This Thread