Android Studio最速入門~効率的にコーディングするための使い方

第42回 コードスタイルの設定

この記事を読むのに必要な時間:およそ 11 分

Javaのコードスタイル

「Preferences / Code Style / Java」で設定を行います。コードスタイル設定のド本命で設定できる項目も多岐にわたります。いつものように,Eclipseと似ているようで似ていないのですが,一応の目安として類似項目を表1にまとめました。Eclipseの設定項目(タブ名)とは,Eclipseの「設定 → Java → フォーマッター」から「編集...」ボタンを押した「プロファイル」ダイアログのタブを指します。

図2 ⁠Preferences / Code Style / Java」設定画面

図2 「Preferences / Code Style / Java」設定画面

図3 Eclipseのフォーマッターの「プロファイル」ダイアログ

図3 Eclipseのフォーマッターの「プロファイル」ダイアログ

表1 Android StudioとEclipseの設定項目の対応付け

Android Studioの設定項目(タブ名)Eclipseの設定項目(タブ名)
Tabs and Indentsインデント
Spaces空白
Wrapping and Braces中括弧,行折り返し,制御ステートメント
Blank Linesブランク行
JavaDocコメント
Imports※該当なし(⁠⁠設定 → Java → コード・スタイル → インポートの編成」に相当)
Arrangement※該当なし
Code Generation※該当なし(⁠⁠設定 → Java → コード・スタイル」に相当)

以降,Android Studioの設定項目(タブ名)別に説明します。⁠Imports」⁠Arrangment」「Code Generation」前回説明済みなので省略します。

Tabs and Indents

タブとインデントの設定です。ほとんどが「共通のコードスタイル」と同じなので,差分のみ説明します。

Label indent
「ラベル」のインデント文字数を指定します。⁠Absolute label indent」をチェックすると,先頭行にラベルを記述します。
Do not indent top level class members
ここをONにすると,トップレベルのクラスのメンバ(フィールドやメソッドなど)はインデントを行いません。この不思議な設定項目は何のためにあるのか長年の疑問です(こうゆう特殊なスタイルが実在するってことなんでしょうか?⁠⁠。
Use indents relative to expression start
「継続行のインデント(Continuation indent⁠⁠」をどこから開始するかを指定します。OFFの場合,直前のコードブロックのインデント位置を基準にしますが,ONにすると直前の式の開始位置を基準にします。⁠Indent:2, Continuation indent:4」で具体例をリスト1リスト2 に示します。

リスト1 ⁠Use indents relative to expression start」がOFFの場合

|<- ここが基準
 System.out.println("%s%s%s\n",
     foo, bar, boo);

リスト2 ⁠Use indents relative to expression start」がONの場合

                   |<- ここが基準
 System.out.println("%s%s%s\n",
                       foo, bar, boo);

Eclipseではインデントの設定項目の中に「列内のフィールドの位置合わせ」という項目がありますが,Android Studioで相当する項目はここではなく「Wrapping and Braces」にあります(項目名は『Field groups / Align in columns⁠⁠。

プレビューエリアのコードについて

「Preferences / Code Style」の設定画面のところどころに出てくるプレビューエリアは,設定値を変更する都度リアルタイムに更新され,どこが対象になったかハイライト表示されます。ただ,設定項目の多さにくらべるとプレビューエリアのコード例は設定のすべてを網羅しきれておらず,設定を変えてもどこに反映されるのかわからずイライラすることも多いです。

図4 設定を変更するとプレビューエリアに反映される

図4 設定を変更するとプレビューエリアに反映される

筆者は長年,このプレビューエリアのコードは固定値だと思い込んでいたのですが,本稿を執筆する際に偶然,このエリアが編集可能だと気付きました。書き換えたコード例は「Preferences」設定画面を閉じると元に戻ってしまいますが,より具体的に自身が望んでいるコードを元にスタイルの効果を把握できるので,便利なことこの上無しです。

筆者のようにヘンな思い込みで長年損をしないよう,コラムとしてこの機能を強調しておきます。

Spaces

空白(スペース)に関する設定を行います。Eclipseの設定項目とは見せ方がだいぶ異なります。項目の並び順は「Java要素ごとにオプションをソート」より「構文要素ごとにオプションをソート」にしたほうがAndroid Studioと比較しやすいです。

図5 Eclipseの「空白」設定画面

図5 Eclipseの「空白」設定画面

Before Parentheses
小括弧(の前に空白をつけるかどうかを指定します。Eclipseと異なり,閉じ小括弧)への指定はありません。
  • Method declartion parentheses : メソッド宣言の小括弧の前
  • Method call parentheses : メソッド呼び出しの小括弧の前
  • 'if' parenthesesif文の小括弧の前
  • 'for' parenthesesfor文の小括弧の前
  • 'while' parentheseswhile文の小括弧の前
  • 'switch' parenthesesswitch文の小括弧の前
  • 'try' parenthesestry文の小括弧の前
  • 'catch' parenthesescatch文の小括弧の前
  • 'synchronized' parenthesessynchronized文の小括弧の前
  • Annotation parentheses : アノテーションの小括弧の前
Around Operators
演算子のまわり(前後)に空白をつけるかどうかを指定します。Eclipseと異なり,演算子の前・後ろといった細かい指定はできません。
  • Assignment operators (=, +=, ...) : 代入演算子の前後
  • Logical operators (&&, ||) : 論理演算子の前後
  • Equality operators (==, !=) : 比較演算子の前後
  • Relational operators (<, >, <=, >=) : 比較演算子の前後
  • Bitwise operators (&, |, ^) : ビット演算子の前後
  • Additive operators (+, -) : 加減算演算子の前後
  • Multiplicative operators (*, /, %) : 乗除算演算子の前後
  • Shift operators (<<, >>, >>>) : シフト演算子の前後
  • Unary operators (!, -, +, ++, --) :単項演算子の前後
  • Lambda arrow : ラムダ記号->の前後(Java8用です⁠⁠。
  • Method reference double colon : メソッドリファレンス::の前後(これもJava8ですね……⁠⁠。
Before Left Brace
中括弧{の前に空白をつけるかどうかを指定します。小括弧(と同じく,閉じ中括弧}への指定はありません。
  • Class left brace : クラス宣言の中括弧の前
  • Method left brace : メソッド宣言の中括弧の前
  • 'if' left braceif-else文のifの中括弧の前
  • 'else' left braceif-else文のelseの中括弧の前
  • 'for' left bracefor文の中括弧の前
  • 'while' left bracewhile文の中括弧の前
  • 'do' left bracedo-while文のdoの中括弧の前
  • 'switch' left braceswitch文の中括弧の前
  • 'try' left bracetry-catch-finally文のtryの中括弧の前
  • 'catch' left bracetry-catch-finally文のcatchの中括弧の前
  • 'finally' left bracetry-catch-finally文のfinallyの中括弧の前
  • 'synchronized' left brace : synchronizedブロックの中括弧の前
  • Array initializer left brace : 配列の初期化の中括弧の前
  • Annotation array initializer left brace : アノテーションの配列初期化の中括弧の前
Before Keywords
特定のキーワードの前に空白をつけるかどうかを指定します。設定項目を見ると,これをわざわざOFFにする理由がわからないものばかりです(Eclipseに,これに相当する設定項目が無いのも頷けるかと⁠⁠。
  • 'else' keywordif-else文のelseの直前
  • 'while' keyworddo-while文のwhileの直前
  • 'catch' keywordtry-catch-finally文のcatchの直前
  • 'finally' keywordtry-catch-finally文のfinallyの直前
Within
指定した対象の内側を空白で囲みます。たとえば,メソッド引数の括弧の間などです。

図6 ⁠Within / Method call parentheses』の例

図6 『Within / Method call parentheses』の例

Eclipseには,これにピッタリ当てはまる設定項目はありません(⁠⁠左小括弧の後」「右小括弧の前」などの組み合わせで再現できます⁠⁠。
  • Code braces : コードブロックの内側
  • Brackets : 大括弧の内側
  • Array initializer braces : 配列初期化の中括弧の内側
  • Grouping parentheses : 式で用いる括弧の内側
  • Method call parentheses : メソッド呼び出しの小括弧の内側
  • Empty method call parentheses : 引数なしのメソッド呼び出しの小括弧の内側
  • Method declartion parentheses : メソッド宣言の小括弧の内側
  • Empty method declartion parentheses : 引数なしのメソッド宣言の小括弧の内側
  • 'if' parenthesesif文の小括弧の内側
  • 'for' parenthesesfor文の小括弧の内側
  • 'while' parentheseswhile文の小括弧の内側
  • 'switch' parenthesesswitch文の小括弧の内側
  • 'try' parenthesestry-with-resource文のtryの小括弧の内側
  • 'catch' parenthesestry-catch文のcatchの小括弧の内側
  • 'synchronized' parenthesessynchronizedブロックの小括弧の内側
  • Type cast parentheses : キャストの小括弧の内側
  • Annotation parentheses : アノテーションの小括弧の内側
In Ternary Operator(?:)
三項演算子?:に関する空白の指定です。珍しく「演算子の後」という指定があります。そういえば,Eclipseのフォーマッタには三項演算子に関する項目が無かったような気がします……。
  • Before '?' : 三項演算子の ? の前
  • After '?' : 三項演算子の ? の後
  • Before ':' : 三項演算子の : の前
  • After ':' : 三項演算子の : の後
Within Type Arguments
型パラメータに関する空白の指定です。設定項目は1つしかなく,Eclipseのようなきめの細かい設定はできません。
  • After comma : 型パラメータ指定のカンマの後
Other
その他の空白指定です。変わったものばかりで,デフォルト以外に設定する事は無いと思います。
  • Before comma : カンマの前(すべてのカンマが対象ではなく,主に配列宣言のカンマが対象になります)
  • After comma : カンマの後(対象は上記と同じです)
  • Before semicolon : セミコロンの前(これも,for文やtry-with-resource文のセミコロンが対象のようです)
  • After semicolon : セミコロンの後(対象は上記と同じです)
  • After type cast : キャストの後(具体的には図7の通りです)

図7 ⁠Other / After type cast』の例

図7 『Other / After type cast』の例

著者プロフィール

今井勝信(いまいまさのぶ)

システムエンジニア。日本ユニシス株式会社所属。仙台在住。

Android開発はまったくやったことがないけれどIntelliJ IDEAが大好き。

Twitter: @masanobuimai