var(Java) 単語

ジャバノカタスイロンサレルヘンスウセンゲン

1.5千文字の記事
これはリビジョン 2579802 の記事です。
内容が古い・もしくは誤っている可能性があります。
最新版をみる

var(Java)とは、Java 10で導入された、型推論を伴った変数宣言を示す予約語である。

概要

2018年3月にJava 10がリリースされた。文法上の最大の変更点は、これまで変数宣言には型の記載が必須であったところを、ローカル変数についてはvarを用いることにより型の記載を省略できるようになったことである。

varはvariable(変数) の略である。

class内でフィールドの型を指定するときには用いることは出来ない。

型推論

上述のように、これまでJavaの変数宣言には型の記載が必須であった。

ArrayList<String> strings = new ArrayList<String>();

ArrayList<String>が2回出てきて冗長であるという批判があった。Java 7からジェネリクスの型推論が導入されて、以下のように書けるようになった。

ArrayList<String> strings = new ArrayList<>();

Stringの重複はなくなったが、ArrayListの重複はなくなっていない。今回のvarの導入により、以下のように書くことができる。

var strings = new ArrayList<String>();

賛否とガイドライン

今回の変更については、コードを短くできる(今更この程度短くしても焼け石に水)という肯定的な意見と、変数名にvarを使った古いコードがたくさんあるオワタ右辺の型が自明でない時にコードを理解しづらくなるという否定的な意見がある。

この点について公式サイト内で以下のようなガイドラインが出されている。

以下で上記ガイドライン中の見出しを元に解説する。

原則

  1. コードは書くことよりも読むことの方が大事だ。
  2. コードの意味はその周囲を見るだけで明らかであるべきだ。
  3. コードの可読性はIDEに依存すべきではない。
  4. 型の明示とvarの使用は一長一短。

ガイドライン

G1. 変数名に有用な情報を含める

G2. ローカル変数のスコープを最小限にする

G3. 初期化子が読者に十分な情報を提供する時にvarの使用を考慮する

G4. メソッドチェーンで長くなった式や、入れ子の式を分解するときにvarを使用する

G5. 「宣言型は具象クラスでなくインターフェースで」の原則にはこだわり過ぎない

Javaでは宣言の型はインターフェースで行うことが推奨されている。

宣言の右辺がArrayListでも、Listとしてしか使用しない場合はListで宣言することが推奨される。(たとえば、なんらかの事情で右辺がLinkedListに変わってしまった場合でも他のコードを書き直す必要がないからとされている。)

G2に従っているなら、varで宣言された変数はそこから数行以内で使用されるはずであり、変更の影響が外に及ぶことはないから変更の影響は少ないはずである。。

G6. ダイヤモンド演算子やジェネリクスとvarを組み合わせるときは注意

たとえば、概要で述べた例を型引数まで省略してしまうと、以下のようになる。

var strings = new ArrayList<>();

右辺はStringのArrayListであるとわからなくなってしまうので、ArrayList<Object>と型推論される。

G7. リテラルとvarの組み合わせにも注意

short shortNumber = 0;
var shortNumber = 0;

上の行ではshortNumberの型はshortだが、下の行ではshortNumberの型はintになる。

関連項目

  • Java
  • 変数
  • var
  • val
  • 型推論
  • 可読性
  • プログラミング関連用語の一覧

おすすめトレンド

ニコニ広告で宣伝された記事

記事と一緒に動画もおすすめ!
もっと見る

急上昇ワード改

最終更新:2025/12/12(金) 16:00

ほめられた記事

最終更新:2025/12/12(金) 15:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP