TransWikia.com

javaにおいてif文のネストを減らしたい

スタック・オーバーフロー Asked by amiu on September 1, 2021

下記のようなネストされたif文がある場合、深さ1にするうまいやりかたはありますでしょうか?

if(a == null){
    if(b == "あああ"){
        実行文
    }
    if(c == "いいい"){
        実行文
    }
}

3 Answers

こんにちは、はじめまして。

ご提示していただいた例はわかりやすいコードだと思います。
私見ですが可読性のためには直さないほうがいいです。

ただ、Javaでの文字列の比較は、例外なくequalsを使ってください。

if(a != null){
  if(b.equals("あああ")){
     実行文
   }
 if(c.equals("いいい")){
     実行文
  }
}

&& でつなげて (a!=null && b.equals("あああ")) のようにすれば一文になりますがあとで読みたくなくなりますのでお勧めはしません。

また、ヌルチェックはどうしても避けたい、変数 a が関数の引数などである場合は @NotNull アノテーションを用いることでコンパイルチェックで確認できるようになります。確かに最近はこの方向性ですね。

public void yourCoolFunction(@NotNull final String a ) {
 if(b.equals("あああ")){
   //Implemetation
 }
 if(c.equals("いいい")){
   //Implemetation
 }
}

Answered by Kouki.W on September 1, 2021

ネストを減らすコード例です。

if(a == null && b == "あああ"){
    実行文
}
if(a == null && c == "いいい"){
    実行文
}

質問の趣旨から外れますが、文字列の内容が同じであるかを比較するならequalsメソッドを使った方がよいと思います。
b.equals("あああ")

Answered by akira ejiri on September 1, 2021

後続の処理がなければ、単純に以下のようにreturnしてしまいます

if (a != null) {
  return;
}
if (b == "あああ") {
  実行文
}
if (c == "いいい") {
  実行文
}

後続の処理がある場合は、do-while文のbreakを使うことでif文のネストを減らせることがあります。

do {
  if (a != null) {
    break;
  }
  if (b == "あああ") {
    実行文
  }
  if (c == "いいい") {
    実行文
  }
} while (false);

Answered by ANNotunzdY on September 1, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP