- ベストアンサー
クラスのメンバー変数の書き方
- クラスのメンバー変数を書くときのprivateの書き方やnull初期化の書き方、接頭辞の使用についての統一方法について教えてください。
- privateの明示的な書き方やnull初期化の明示的な書き方は、Javaに不慣れな人にもわかりやすくすることができますが、タイプ数が増えてコーディングがやや面倒になります。
- 接頭辞の使用は、thisを書かなくて済むためコーディングが楽になりますが、なんだか気持ち悪く感じる人もいます。デメリットは明確ではありません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
◆private を明示的に書かないと、private になりません ◆null初期化の場合、 null初期化を明示的に書くことで、設計上の特別な意図を他の人に知らせる必要がある場合は書きます 特に設計上の特別な意図が無い場合は、書きません (コードはいつもクリーンな状態を保つ、不要なものは書かない) ◆接頭辞はつけない 接頭辞なんかよりも、変数名は、変数の意味がほぼ完全に把握できるものにします (SunのNaming Conventionに従う) public class CourseSession { private int numberOfStudents; public int getNumberOfStudents(){return numberOfStudents;} } ★インスタンス変数は必ず private にする オブジェクトに対して、メッセージを送信する以外の事を許可してはいけません。 this.doSomeThing(); についても、thisオブジェクト(自分自身)に対して、doSomeThingというメッセージを送信すると捉えます。
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
privateは#1さんの言う通り、書かないこととprivateは同義ではありません。 nullはどちらでもいいけど、個人的には書く方を選ぶ。 接頭辞は、thisを書かなくてよいのは、他の変数に同じ接頭辞を使わない、というルールに従ったときだけです。 逆に、他で使われていなければ、接頭辞を使わなくても、thisを使わずに直接メンバ変数にアクセスできます。 「接頭辞を使えばthisをかかなくてよい」というのは間違いです。 個人的には、接頭辞は基本使わない+thisを必ず指定する。 あるいは、 privateなメンバ変数(接頭辞あり)とアクセサ(接頭辞無し)の組み合わせを使う 例) private int mx ; public int x() { return this.mx ;}
お礼
回答ありがとうございます。 >「接頭辞を使えばthisをかかなくてよい」というのは間違いです。 そうなのですが、メンバー変数の接頭辞は"m"で、 他の変数に同じ接頭辞を使わないというようなルールがある場合の話です。 thisを使わずアクセスできるのも知ってますが、 引数やローカル変数と混同するのが恐くて、接頭辞が無いと全部thisをつけたくなってしまいます。
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 ◆privateの場合、privateを明示的に書く or 書かない 書きます。 理由 何も書かない場合はprivateではありません。 ◆null初期化の場合、= nullを明示的に書く or 書かない 書きます。 理由 なんとなく気持ち悪い・・・。 ◆メンバー変数名に接頭辞(mTextなど)をつける or つけない 付けない。 理由 別にいらんと思う・・・好み。
お礼
>何も書かない場合はprivateではありません。 デフォルトはprotectedですね。privateなのはC#でした。 >なんとなく気持ち悪い・・・。 気持ちは分かるんですが、 書かないとnullって決まってるし、書かなくてもいいかなあとも思います。 >別にいらんと思う・・・好み。 Javaで接頭辞をつけてるのはあんまり見ないですが、慣れると便利ですよ。
お礼
回答ありがとうございます。 >private を明示的に書かないと、private になりません 勘違いしていたようです。ご指摘ありがとうございます。 >特に設計上の特別な意図が無い場合は、書きません >コードはいつもクリーンな状態を保つ、不要なものは書かない 確かに納得いきます。同意です。 >接頭辞なんかよりも、変数名は、変数の意味がほぼ完全に把握できるものにします 意味がほぼ把握できるのがいいというのには同意ですが、 接頭辞をつけない理由はやっぱりいまいち分かりません。 例えば、mNumberOfStudents でも意味は分かるしいいんじゃないかとも思います。 >インスタンス変数は必ず private にする 「必ず」と言うとちょっと言い過ぎかと思いますが、概ね同意です。