はじめに
たいていのIDEが備えているソースコードの整形機能―――コードフォーマットについて解説します。Android Studioができるコードフォーマットは次の3種類です。
- インポートの最適化
- インポート文の最適化を行います。Eclipseの
「ソース → インポートの編成」 に相当します。 - コードフォーマット
- 指定されたルールに基づいてソースコードを整形します。Eclipseの
「ソース → フォーマット / 要素のフォーマット」 に相当します。 - アレンジメント
- 指定されたルールに基づいて,
ソースコード内の要素を並び替えます。Eclipseの 「ソース → メンバーのソート」 に相当します。
できることはEclipseとさほど変わりありません。Eclipseとの機能的な大きな違いは ファイルの保存のタイミングで自動でフォーマットできないこと です。
コードフォーマットの基本
Android Studioのコードフォーマットのルール
インスペクションと同じようにコードスタイルも
もうすこし内情について説明します。コードスタイルの設定はProject Structureに属しているにもかかわらず<AS_
」
そこで登場するのがデフォルトで登録済みの<PROJECT_
」
「Project」
この
「Preferences / Code Style」
インポートの最適化
無駄なインポート文を削除したり,
まずはインポート最適化に関するルール設定について説明します。設定箇所は
設定できる箇所はそれほど多くは無いのですが,
- General
- インポート最適化の全般的な設定です。
-
- Use single class import:ONにするとアスタリスク
( *
)を使わず, クラスひとつずつ インポート文を記述します。 - Use fully qualified class names:ONにするとインポート文を使わず,
常にクラスの完全修飾名を展開します。正直, なんのためにあるオプションなのかわかりません。 - Insert imports for inner classes:ONにすると内部クラスに対してもインポート文を展開します。これをONにすると,
一見してそのクラスが内部クラスなのか通常のクラスなのか見分けが付かなくなるので, 筆者はこれをONにするのは好みません。 - Use fully qualified class names in javadoc:ONにすると,
Javadoc中のクラスを完全修飾名で記述します。Javadoc中でしか参照しないクラスのために インポート文を追加するのが許せない人はONにしましょう。筆者は, そのあたりはおおらかなのでOFFにしています。 - Class count to use import with '*':インポート文でアスタリスクを使うまでの閾値を指定します。最初に紹介した
「Use single class import」 をONにしていても 同じパッケージのクラス を, ここで指定した値以上インポートするとアスタリスクに展開します。 - Names count to use static import with '*':上の項目のスタティックインポート版です。ここで指定した値以上のメンバやメソッドをスタティックインポートするとアスタリスクに展開します。
- Use single class import:ONにするとアスタリスク
- JSP imports layout
- JSP
(JavaServer Pages) でのインポート文の設定です。そもそもAndroid StudioはJSPの編集をサポートしていないので, この項目自体が無意味です。元になったIntelliJ IDEAのUltimate EditionがJSPをサポートしているので, その名残です。 - Package to Use Import with '*'
- 「General」
にある 「Use single class import」 や 「Class/ Names count to use~」 に関わりなく, 常にアスタリスク指定でインポートしたいパッケージを指定します (スタティックインポートも扱えます)。 - Import Layout
- インポート文の並び順を指定します。パッケージ別に指定できたり,
空行の挿入箇所を指示できたりと, 見かけによらず高機能です。もちろんスタティックインポートも対象です。
どのような設定が望ましいかは,
-
インポートにアスタリスクを使うのは好きでは無い
「Use single class import」 をON - 「Class count to use import with '*'」
に 99999 を指定 (いかなる場合もアスタリスク展開させない)
-
反対にスタティックインポートにアスタリスクを使うのを好む
「Names count to use static import with '*'」 に 3 を指定 (3つ以上, 同じクラスのメンバをスタティックインポートしたらアスタリスク展開する)
JUnit4やhamcrestの場合は常にアスタリスク展開したかったので,