

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

[code]

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


CC BY-SA 4.0
2020-07-21T07:26:30.467
68784
2020-07-21T07:53:39.303
2020-07-21T07:42:37.887
3060
41188
question
java
javaにおいてif文のネストを減らしたい


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

[code]

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

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

[code]

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


CC BY-SA 4.0
2020-07-21T07:34:00.757
68785
2020-07-21T07:34:00.757
732
68784
answer


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

[code]

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

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


CC BY-SA 4.0
2020-07-21T07:50:38.397
68786
2020-07-21T07:50:38.397
35558
68784
answer


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

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

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

[code]

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

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

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

[code]

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


CC BY-SA 4.0
2020-07-21T07:53:39.303
68787
2020-07-21T07:53:39.303
37777
68784
answer