-
ID:JeVf6c さんの質問

インスタンス変数とプライベートなプロパティの使い分けを教えて頂けないでしょうか? これらの違い自体は理解していますが、どういう時にインスタンス変数にして、どういう時にプライベートなプロパティにするかがイマイチわかりません。

ちなみにパブリックなプロパティとの使い分けは理解しているので大丈夫です。

言語はobjective c になりますが、他言語でも何かに思いあたる使い分けがありましたら、教えて頂けませんでしょうか?

みんなの回答 3 件

ID:JeVf6c さんの回答

補足です。

アクセサを通してインスタンス変数を参照、設定したい場合にプライベートプロパティを使えば良いというのもわかるのですが、質問としましては、具体的にどういう時にアクセサを通して参照、設定をした方が好ましかったり、都合が良かったりするのでしょうか?

その辺りの利用シーンが具体的にイメージ出来ず、インスタンス変数とプライベートなプロパティの使い分けの理解が進みません。

ID:1h22Go さんの回答

インスタンス変数→中身どこから何に書き換えられてもいい、誰が見てもいい

プライベートなプロパティ→内部でしか使用しないor誰かに勝手に書き換えられては困る

プライベートプロパティのアクセサ(getter/setter)→値の書き換えを行うときに、値の事前チェックやほかの値と連動させて更新する等のきまりがあるときにつかう。

ID:1h22Go

例えばだけど、Arrayクラスイメージしたときに
プライベートな_lengthプロパティと
push(中身)、pop(index)があって、
pushしたときに_length++
popしたときに_length--
という風に、_lengthを手で書き換えないで済むような動きをするのもアクセサといえる。

でもって、配列の中身入ってないのに_length=5って代入されたら困るから、setterはなくて、getterとしてのlength()がある。

ID:JeVf6c

あ、すいません。インスタンス変数もプライベートのやつです。

ID:JeVf6c

リードオンリーにする必要があるやつはプロパティ候補になりますね!

ID:1h22Go

その二つの違いはちょっとわかってない…。

自分がstaticとprivateで理解している話のような気もする。

ID:JeVf6c

ぐぬぬ?

ID:8bkI8. さんの回答

時と場合?

setter/getter は不要 - とあるソフトの開発記録

http://d.hatena.ne.jp/c299792458/20110226/1298744855
ID:8bkI8.

コレ続き
//d.hatena.ne.jp/c299792458/20110726/1311704223

ID:z79SM.

トピ主です。リンク先読ませて頂きました!

リンク先はパブリックなプロパティとプライベートなインスタンス変数が例になってましたが、一応、質問はプライベートなプロパティとプライベートなインスタンス変数の使い分けと具体的な利用シーンについてです。

んー、その場、その場で判断して使い分けていくしかないんですかねー。何らかの処理を参照代入前後にかませたい時はプライベートなプロパティを使って、そうじゃない時はプライベートなインスタンス変数って感じで今は適当に対応しちゃってますが、こーゆー時はこー!みたいなパターンがあると自信に繋がるんですが。。。

ID:8bkI8.

あー、なるほど。オブジェクティブCに限っての話なのね。
ならオブジェクティブCをやったことが無いから、ぶっちゃけ分からんです。
申し訳ない。
なので、ノウハウ的なところは特に、スマフォアプリ開発とかやってるエンジニアに聞いたほうが良いかと思われます。

プログラミング的な話で言えば、プロパティもインスタンス変数も同じだろって思ってたからごっちゃになってた。
ちょっと調べたところによると、セッタゲッタが自動で作られる仕組み?ってことなのね。

つか、これってobj-cだけの話じゃ。。。

//ameblo.jp/creatorintherye/entry-11464068063.html

ID:8bkI8.

俺が根本的に勘違いしていたようです。ごめんなさい。

ID:z79SM.

そうそう、同時に作られるやつです。pythonもたぶんrubyも同んなじような仕組みがあると思います。

ID:8bkI8.

なるほど、その辺全く触ってないから知らなかった。
よく分からないから良く分かっていないまま書いてしまうけど。
実際、自動的にセッタゲッタが作られたとして、それって自分で実装するのとどう違うのかな。。

多分、その違いがプライベートプロパティと、プライベートインスタンス変数の使い分けのヒントになるのでは。
いや、本当、解ってないまま話してしまって申し訳ないですが。

最終更新日:2014-03-21 (4,601 views)

関連するトピックス

ページ上部に戻る