0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

後置インクリメントでJavaのコードをちょっとスッキリさせる

Posted at

はじめに

後置インクリメントの特性を活かして、ちょっとだけコードをスッキリさせる1例を紹介します。
本当にちょっとだけなので既に何となくやってた人は参考にならないかもしれません…

後置・前置

まず、後置・前置についてJavaを学習されてた方なら聞いたことあるかもしれません。
ある変数をインクリメント・デクリメントする際に演算を 前もって行うか 後で行うか の違いになります。

では、次で後置インクリメントの特性を活かしてコードをちょっとスッキリさせる例を紹介します。

Listから要素を取得した後、インデックスをカウントアップしたい

あるリストから要素を一つ取り出す際に、Listクラスのget()メソッドを使用するとします。
引数に取得したいインデックスを別の変数で定義して、
取得する度にインデックスの変数をインクリメントする時、以下の方法で行っている方もいると思います。

private List<Obj> objList = new ArrayList<Obj>();

private nextListIdx = 0;

:

public Obj getListOne() {
    int listIdx = nextListIdx;
    nextListIdx++;
    return objList.get(listIdx);
}

まぁ、別に間違ってはないし動くは動くので上のコードでも全然問題はないと思うのですが、
後置インクリメントを使用すると以下のようになります。

private List<Obj> objList = new ArrayList<Obj>();

private nextListIdx = 0;

:

public Obj getListOne() {
    int listIdx = nextListIdx++; // 次取得する添え字を渡した後、カウントアップしている
    return objList.get(listIdx);
}

本当にちょっとだけスッキリしましたね。

ちなみに、前置インクリメントでは期待する結果が違ってくるので注意が必要です。

private List<Obj> objList = new ArrayList<Obj>();

private nextListIdx = 0;

:

public Obj getListOne() {
    int listIdx = ++nextListIdx; // これだとカウントアップしてから渡してしまっている
    return objList.get(listIdx);
}

おわりに

後置インクリメントでJavaのコードをちょっとだけスッキリさせてみました。
パッと見では自分はどういう処理を書いているか少し分かりにくく
見えてしまうのでそこが懸念点かもしれません。

そうは見えない、それでも構わないという方は使用してみてはいかがでしょうか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?