[#47605] Rubyでも「private」イコール「非公開」? — Makoto Kuwata <kwa@...>
桑田といいます。
12 messages
2010/11/04
[#47606] Re: Rubyでも「private」イコール「非公開」?
— Yusuke ENDOH <mame@...>
2010/11/04
private constant 提案者の遠藤です。
[#47629] [ANN]第3回ぐんまRubyの勉強会(guRuby)のご案内 — Yuichi NANSAI <nansai@...>
南齋と申します。
2 messages
2010/11/14
[#47633] Mac OS X Snow Leopardのirbで日本語が入力できない — Tomohiko Hayashi <hayashi-t@...>
みなさま
7 messages
2010/11/17
[ruby-list:47611] Re: Rubyでも「private」イコール「非公開」?
From:
Makoto Kuwata <kwa@...>
Date:
2010-11-06 07:16:47 UTC
List:
ruby-list #47611
桑田です。 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