インスタンス変数とプライベートなプロパティの使い分けを教えて頂けないでしょうか? これらの違い自体は理解していますが、どういう時にインスタンス変数にして、どういう時にプライベートなプロパティにするかがイマイチわかりません。
ちなみにパブリックなプロパティとの使い分けは理解しているので大丈夫です。
言語はobjective c になりますが、他言語でも何かに思いあたる使い分けがありましたら、教えて頂けませんでしょうか?
補足です。
アクセサを通してインスタンス変数を参照、設定したい場合にプライベートプロパティを使えば良いというのもわかるのですが、質問としましては、具体的にどういう時にアクセサを通して参照、設定をした方が好ましかったり、都合が良かったりするのでしょうか?
その辺りの利用シーンが具体的にイメージ出来ず、インスタンス変数とプライベートなプロパティの使い分けの理解が進みません。
インスタンス変数→中身どこから何に書き換えられてもいい、誰が見てもいい
プライベートなプロパティ→内部でしか使用しないor誰かに勝手に書き換えられては困る
プライベートプロパティのアクセサ(getter/setter)→値の書き換えを行うときに、値の事前チェックやほかの値と連動させて更新する等のきまりがあるときにつかう。
例えばだけど、Arrayクラスイメージしたときにプライベートな_lengthプロパティとpush(中身)、pop(index)があって、pushしたときに_length++popしたときに_length--という風に、_lengthを手で書き換えないで済むような動きをするのもアクセサといえる。
でもって、配列の中身入ってないのに_length=5って代入されたら困るから、setterはなくて、getterとしてのlength()がある。
あ、すいません。インスタンス変数もプライベートのやつです。
リードオンリーにする必要があるやつはプロパティ候補になりますね!
その二つの違いはちょっとわかってない…。
自分がstaticとprivateで理解している話のような気もする。
ぐぬぬ?
時と場合?
コレ続き//d.hatena.ne.jp/c299792458/20110726/1311704223
トピ主です。リンク先読ませて頂きました!
リンク先はパブリックなプロパティとプライベートなインスタンス変数が例になってましたが、一応、質問はプライベートなプロパティとプライベートなインスタンス変数の使い分けと具体的な利用シーンについてです。
んー、その場、その場で判断して使い分けていくしかないんですかねー。何らかの処理を参照代入前後にかませたい時はプライベートなプロパティを使って、そうじゃない時はプライベートなインスタンス変数って感じで今は適当に対応しちゃってますが、こーゆー時はこー!みたいなパターンがあると自信に繋がるんですが。。。
あー、なるほど。オブジェクティブCに限っての話なのね。ならオブジェクティブCをやったことが無いから、ぶっちゃけ分からんです。申し訳ない。なので、ノウハウ的なところは特に、スマフォアプリ開発とかやってるエンジニアに聞いたほうが良いかと思われます。
プログラミング的な話で言えば、プロパティもインスタンス変数も同じだろって思ってたからごっちゃになってた。ちょっと調べたところによると、セッタゲッタが自動で作られる仕組み?ってことなのね。
つか、これってobj-cだけの話じゃ。。。
//ameblo.jp/creatorintherye/entry-11464068063.html
俺が根本的に勘違いしていたようです。ごめんなさい。
そうそう、同時に作られるやつです。pythonもたぶんrubyも同んなじような仕組みがあると思います。
なるほど、その辺全く触ってないから知らなかった。よく分からないから良く分かっていないまま書いてしまうけど。実際、自動的にセッタゲッタが作られたとして、それって自分で実装するのとどう違うのかな。。
多分、その違いがプライベートプロパティと、プライベートインスタンス変数の使い分けのヒントになるのでは。いや、本当、解ってないまま話してしまって申し訳ないですが。
みんなの回答 3 件
補足です。
アクセサを通してインスタンス変数を参照、設定したい場合にプライベートプロパティを使えば良いというのもわかるのですが、質問としましては、具体的にどういう時にアクセサを通して参照、設定をした方が好ましかったり、都合が良かったりするのでしょうか?
その辺りの利用シーンが具体的にイメージ出来ず、インスタンス変数とプライベートなプロパティの使い分けの理解が進みません。
インスタンス変数→中身どこから何に書き換えられてもいい、誰が見てもいい
プライベートなプロパティ→内部でしか使用しないor誰かに勝手に書き換えられては困る
プライベートプロパティのアクセサ(getter/setter)→値の書き換えを行うときに、値の事前チェックやほかの値と連動させて更新する等のきまりがあるときにつかう。
時と場合?
setter/getter は不要 - とあるソフトの開発記録
http://d.hatena.ne.jp/c299792458/20110226/1298744855関連するトピックス