ListViewについて調べているうちに、findViewByIdについて調べ始めたり、どんどん分からないことが出てきて、いろんな脇道に逸れてしまってます。今回は、そんな脇道のひとつ「コードを記述する上でのお作法」について書いていこうと思います。
「コードを記述する上でのお作法」とは、主に可読性を良くするために確立されたスタイルで、「ルール」ではありません。お作法は、守らなくてもビルドは通りますが、見る人が見れば「読みにくい」でしょうから、できるだけ遵守することにします。
以前、xmlで定義したButtonビューをjavaの中で紐付ける部分の記述していたのですが、その時の記述(一部抜粋)は、以下のとおりでした。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);</br> Button btnGoogleMaps = (Button) this.findViewById(R.id.button1);
btnGoogleMaps.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
同じように、xmlのButtonビューの定義をおこなう記述で、Buttonの頭に「m」が付いた記法を見つけたので、どういった理由によるもので、どういった使い分けをしているのか調べてみました。
public class MainActivity extends AppCompatActivity {
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);</br> mButton = (Button) this.findViewById(R.id.button1);
mButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
結論から書くと、どういう使い分けなのかは分からずじまいでしたが、内容的には上記2つの記法は、どちらも同じことを表していて、「mButton」は「コードを記述する上でのお作法」に則って記述されているというものでした。
お作法にしたがって付けられた「m」
Buttonの頭に付いた「m」は、下記サイトの「コードスタイルのガイドライン」に書かれている「フィールド名の命名規則」に則って付与されています。
AOSP Java Code Style for Contributors | Android Open Source Project
フィールド名の命名規則には4つあって
Follow Field Naming Conventions
・publicでない、かつ、staticでないフィールド名は「m」で始めること
・staticなフィールド名は「s」で始めること
・その他のフィールド名は、小文字で始めること
・publicかつ staticかつ finalな フィールド(定数)はすべて大文字で構成すること
具体例として、下記コードが掲載されてます。
public class MyClass {
public static final int SOME_CONSTANT = 42; /* 4番目の例 */
public int publicField; /* 3番目の例 */
private static MyClass sSingleton; /* 2番目の例 */
int mPackagePrivate; /* 1番目の例 */
private int mPrivate; /* 1番目の例 */
protected int mProtected; /* 1番目の例 */
}
将来的にAndroid Studioの設定を変更
個人的には、まだ実感したことがないのですが、Android Studioでコードを記述していると、命名規則にしたがって自動的に「m」や「s」を付けてくれるそうですが、getterやsetterを自動生成する際にもgetm~、setm~となってしまうのが困るそうで、その場合には下記の設定で、この自動生成を無視すると良いんだとか。
File > Settings > Editor > Code Style > Java > Code Generationタブ
Name prefix:の Field:に「m」
Name prefix:の Static field:に「s」を設定
※全体設定は、File > Other Settings > Default Settingsらしいのですが、上記箇所に設定してみたら、こちらにも反映されてました。
当面は、上記設定せずに使ってみて、困ったちゃんを実感してから、あらためて設定してみようと思います。
おひれ
ちなみに、同じく「コードスタイルのガイドライン」に書かれていたことで、こんな記述がありました。
Use Spaces for Indentation
インデントにはタブを使わず、スペース4つとすること。
関数の呼び出しと割り当てを含む行の折り返しの場合、スペース8つのインデントとすること。
これまでは、インデントをタブで記述していたのですが、Androidのコードスタイルでは、タブは非推奨だそうです。理由を調べてみると、タブ対スペースのインデント問題と書くと大袈裟ですが、いろいろな意見や主張があり、ここはあえてスルーしていきたいと思います。
テキストエディタで書いたコードをAndroid Studioに貼り付けると、自動でスペースに変換されていたのは、この作法に則ったものだったんですね。Android Studioで直接書いている分には、自動でインデント調整してくれますし、あまり気にする必要はなさそうです。
【参考サイト】
・Code Style Guidelines for Contributors | Android Open Source Project
コメント
コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)