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

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

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

Wrapping and Braces

折り返しや中括弧{の位置に関する設定です。なぜこの2つを同じタブにまとめたのか良くわかりませんが気にせずいきましょう。

Keep when reformatting
リフォーマットの対象外にする要素を指定します。ポリシーというか好みの分かれる部分なので,それぞれプレビューを見ながらON/OFFを検討してください。
  • Line breaks : 途中の改行位置。意図的なものであれば残すことに意味はあるのですが,テキトウにやったのと見分けるのが難しいところです。
  • Comment at first column : 行の先頭に記述したコメント。TODOコメントなど目立たせるために意図的に行頭にコメントを記述する場合もあるので,これも悩みどころです。
  • Control statement in one line : 1行で記述した制御文。個人的好みとしてはリフォーマットの対象外にしたい要素です。
  • Multiple expressions in one line : 1行で記述した複雑な式。
  • Simple blocks in one line : 中身の無いブロックを1行で記述します。筆者は以下の2つも含めて,ONにするのが好みです。
  • Simple method in one line : 中身の無いメソッドを1行で記述します。
  • Simple classes in one line : 中身の無いクラスを1行で記述します。
Ensure right margin is not exceeded
右マージンを超過しないようにします。
Braces placement
中括弧{の位置を指定します。それぞれの設定項目の選択肢の意味は表2の通りです。
  • In class declartion : クラス定義の中括弧の位置
  • In method declartion : メソッド定義の中括弧の位置
  • Other : それ以外の中括弧の位置

表2 ⁠Braces placement』の選択肢

選択肢意味
End of line常にその行の終端
Next line if wrapped行の終端だが,折り返す場合は次の行へ
Next line常に次の行
Next line shifted常に次の行で,ついでに1段インデントを下げる。インデントと同じ位置に中括弧が配置されるので,すごくヘンです(これが好きな人,ごめんなさい)
Next line, each shifted常に次の行で,ついでにインデントを下げて中括弧を配置し,さらにインデントを下げてブロックボディを記述します(GNUスタイル⁠⁠。
Extends/implements list
extendsimplements の対象(親クラスやインターフェイスのリスト)の折り返しを指定します。指定できる選択肢は表3の通りです。この表3の選択肢は他の項目でも多く登場するので,大ざっぱで良いので覚えておいてください。
"Wrap if long"と"Chop down if long"は違いがわかりづらいのですが,後者はインターフェイスのリスト部分――長い名前のインターフェイスを複数実装している場合に効果が出ます。
  • Align when multiline : 複数のインターフェイスを実装しているときのインデント位置の指定をします。ONでインデントを最初のインターフェイスの桁に揃えます。OFFの場合,単純に継続行としてインデントを下げます。

表3 ⁠Extends/implements list』の選択肢

選択肢意味
Do not wrap折り返ししない
Wrap if long右マージン以上だったら折り返す
Chop down if long右マージン以上だったら,さらにインデントを下げて折り返す
Wrap always常に折り返しする
Extends/implements keyword
extendsimplementsキーワードの折り返しを指定します。選択肢は表3と同じです(ただし "Chop down if long" はありません⁠⁠。
Throws list | Do not wrap / Wrap if long / Chop down if long / Wrap always
throws に宣言した例外リストの折り返しを指定します。選択肢は表3と同じです。
  • Align when multiline : 複数の例外の送出を宣言しているときのインデント位置を指定します。ON/OFFの意味は『Extends/implements list』と同じです。
  • Align 'throws' to method startthrows キーワードまたは送出する例外を折り返したときにインデントせず,メソッドの開始行と同じ位置に配置します。
Throws keyword
throws キーワード の折り返しを指定します。選択肢は表3と同じです(ただし選択肢に『Chop down if long⁠⁠ はありません⁠⁠。
Method declartion parentheses
メソッド定義のパラメタ(引数)部分の折り返しを指定します。選択肢は表3と同じです。
  • Align when multiline : 折り返ししたときのインデント位置を最初のパラメタ位置に合わせるか,単純に継続行としてインデントするかを指定します。
  • New line after '(' : メソッド定義の ( の後に改行するかを指定します。
  • Place ')' on new lin : メソッド定義の ) の前で改行するかを指定します。
Method call arguments
メソッドを呼び出すときのパラメタ(引数)部分の折り返しを指定します。選択肢は表3と同じです。
  • Align when multiline : 引数リストが複数あるときのインデント揃えを指定します。
  • Take priority over call chain wrapping : 後述する『Chained method calls』より優先するかを指定します。これ単独では意味が無く『Align when multiline』と組み合わせて初めて効果がでるようです。
  • New line after '('(の後に改行します。
  • Place ')' on new line) の前に改行します。
Method parentheses
メソッドの括弧位置(主に閉じ小括弧)のインデント位置を指定します。
  • Align when multiline : 閉じ小括弧のインデント位置を指定します。これ単独では意味は無く「Method declaration parentheses」「Method call arguments」「Place ')' on new line」がONのときに効果があります。
Chained method calls
複数のメソッドを連鎖的に呼び出すメソッドチェインのときの折り返しを指定します。選択肢は表3と同じです。
  • Align when multiline : メソッドチェインが複数行あるときのインデント位置を最初のメソッドチェインにあわせるか,単純に継続行としてインデントするかを指定します。
Field groups
フィールドに関する設定ですが,インスタンス変数だけではなく,クラス変数(定数)にも効果があります。
  • Align in columns : 可視性public, protected, privateなど)や型や変数名,代入演算子や初期値など,要素ごとに桁揃えをするかを指定します。

リスト3 "Align in columns"がOFFの場合

public static long ZERO = 0;
private int f1 = 1;
protected String field2 = "";

リスト4 "Align in columns"がONの場合

public static int    ZERO   = 0;
private       int    f1     = 1;
private       String field2 = "";
'if()' statement
if文に関する折り返しを指定します。
  • Force braces : 中括弧 {} を強制的に付けるかどうかを指定します。選択肢は のとおりえす。これ以降でも何度か「Force braces」という設定項目が登場しますが,意味はすべて同じです。
  • 'else' on new lineelse キーワードを常に次の行から開始するかを指定します。
  • Special 'else if' treatmentelse if を特別扱いするかを指定します。ONにした場合,リスト5のように整形されます。

リスト5 "else if" を特別扱いした例

if (2 < 3) return;
else                   // ← "else if" ではなく else / if として扱う
  if (2 > 3) return;
  else return;

表4 ⁠'if()' statement / Force braces』の選択肢

選択肢意味
Do no force中括弧を強制しない
When multiline複数行の場合,中括弧を付ける
Always常に中括弧を付ける
'for()' statement
for文に関する折り返しを指定します。for() statement』自体の選択肢は表3と同じで,for文の小括弧内の式に適用されます。
  • Align when multiline : 繰り返し条件式が複数あるときのインデント揃えを指定します。
  • New line after '('(の後に改行します。
  • Place ')' on new line) の前に改行します。
  • Force braces : 中括弧の指定です。選択肢は 表4 と同じです。
'while()' statement
while文に関する整形を指定します。
  • Force braces : 中括弧の指定です。選択肢は 表4 と同じです。
'do ... while()' statement
do ~ while文に関する折り返しを指定します。
  • Force braces : 中括弧の指定です。選択肢は 表4 と同じです。
  • 'while' on new linewhile キーワードを常に次の行から開始するかを指定します。
'switch()' statement
switch文に関する整形を指定します。
  • Indent 'case' branchescase 文をさらにインデントするかを指定します。
'try-with-resources'
Java7から追加されたtry-with-resources文に関する折り返しを指定します。この項目自体の選択肢は表3と同じで,try文の小括弧内の式(リソース宣言)に適用されます。
  • Align when multiline : リソース宣言が複数あるときのインデント揃えを指定します。
  • New line after '('(の後に改行します。
  • Place ')' on new line) の前に改行します。
'try' statement
try ~ catch文に関する折り返しを指定します。
  • 'catch' on new linecatch キーワードを常に次の行から開始するかを指定します。
  • 'finally' on new line : finally キーワードを常に次の行から開始するかを指定します。
Binary expressions
二項演算式――というより条件式と呼んだほうがわかりやすいでしょう。if文やwhile文,三項演算子などtrue/falseを返すすべての式が対象になります。ただ,試した限りでは条件式に留まらずすべての演算式が対象になっていました(バグでしょうか……⁠⁠。なお選択肢は表3と同じです。
  • Align when multiline : 式が複数行に渡るときのインデント揃えを指定します。
  • Operation sign on next line : 継続行を常に演算子から開始するかを指定します。
  • Align parenthesised when multiline : 式が複数行に渡るときのカッコ位置の揃えを指定します。……が,イマイチ効き目がわかりませんでした。
  • New line after '('(の後に改行します。
  • Place ')' on new line) の前に改行します。
Assignment statement
代入命令の折り返しを指定します。先ほどの『Binary expressions』と意味が被りそうですが,こちらは代入演算子=だけを対象としています。選択肢は表3と同じです。
  • Align when multiline : 複数行の代入文a = b = c = 10; のようなケース)のインデント揃えを指定します。
  • Assignment sign on next line : 継続行を常に代入演算子から開始するかを指定します。
Ternary operator
三項演算子の折り返しを指定します。先ほどの『Assignment statement』と同じように三項演算子?:だけ を対象としています。選択肢は表3と同じです。
  • Align when multiline : 複数行の式のインデント揃えを指定します。
  • '?' and ':' signs on next line : 継続行を常に三項演算子から開始するかを指定します。
Array initializer
配列の初期化に関する折り返しを指定します。選択肢は表3と同じです。
  • Align when multiline : 配列の初期化が複数行に渡るときのインデント揃えを指定します。
  • New line after '{'{の後に改行します。
  • Place '}' on new line} の前に改行します。
Modifier list
装飾子に関する折り返しを指定します。
  • Wrap after modifier list : 装飾子のあとで改行するかを指定します。
Assert statement
assert文に関する折り返しを指定します。選択肢は表3と同じです。
  • ':' signs on next line : 継続行を常に : から開始するかを指定します。
Class annotations
クラスに対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
Method annotations
メソッドに対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
Field annotations
フィールドに対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
Parameter annotations
メソッドのパラメタ(引数)に対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
Local variable annotations
ローカル変数に対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
Enum annotations
列挙型の宣言に関する折り返しを指定します。選択肢はgihyo.jp/dev/serial/01/android_studio/0042?page=3#donotwrap"">表3と同じです。

著者プロフィール

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

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

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

Twitter: @masanobuimai