Mono Works

チラシのすきま

メモ:コードを記述する上でのお作法

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

メモ:IntentでGoogleマップへ渡すパラメータ(Android) | Mono Works

コメント

コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)
執筆者
"ぽぽろんち" @pporoch
pporoch120
Mono Worksの中の人。好きなことをつらつらと書き留めてます。
ギターを始めてから 練習動画をYouTubeにアップしてます。ご笑納ください。
"DQX@ぬここ(UD487-754)、コツメ(NO078-818)"
採用案内