TransWikia.com

ネストされたif文を簡略化したいのですが、うまい書き方を教えていただきたいです

スタック・オーバーフロー Asked on November 22, 2021

下記のような実装についてうまい修正方法を教えていただきたいです

private boolean isChange(String oldStr, String newStr){
 if(StringUtils.isEmpty(oldStr)){
  if(StringUtils.isEmpty(newStr)){
    return true;
  }else{
    return false;
  }
 } else if (StringUtils.isEmpty(newStr)){
  return true;
 }
 if(!oldStr.equals(newStr)){
  return true;
 }
 return false;
}

2 Answers

下記のような実装についてうまい修正方法を教えていただきたいです

isChangeのメソッド名から、新旧に変動があった場合はtrue、変動がなかったらfalseを返すメソッドを作りたいのだと勝手に解釈しました。

以下はコードの修正例です。StringUtilsは使っていません。
null""空文字列を同一視しません。nullから""に変化する場合、その逆も変動したと判定します。

private boolean isChange(String oldStr, String newStr) {
    if (oldStr == null && newStr == null) {
        return false;   //変動なし
    }
    else if (oldStr == null || newStr == null) {
        return true;    //変動あり
    }
    else if (newStr.equals(oldStr)) {
        return false;   //変動なし
    } else {
        return true;    //変動あり
    }
}


metropolisさんのコメントを参考にStringUtilsを調べてみました。
次のコードはnull""空文字列を同一視します。nullから""に変化する場合、その逆も変動なしと判定します。

if (StringUtils.isEmpty(oldStr) && StringUtils.isEmpty(newStr)) {
    return false;
}
else if (StringUtils.equals(oldStr, newStr)) {
    return false;
} else {
    return true;
}

次のコードはnull""空文字列を同一視しません。nullから""に変化する場合、その逆も変動ありと判定します。

private  boolean isChange(String oldStr, String newStr) {
    return !StringUtils.equals(oldStr, newStr);
}

Answered by akira ejiri on November 22, 2021

true が返る条件は,newが空であり、old.epual(new)がfalseの場合
つまり

private boolean isChange(old, new){
  if(StringUtils.isEmpty(new)){
    return true;
  }else{
    return !old.equal(new)
  }
}

もっと短くするのであれば下でも行けるかと。
可読性下がるのでおすすめはしませんが。

return StringUtils.isEmpty(new) ? (true) : (!old.equal(new))

あと、"new"は予約語なので適切な変数名にしたほうが良いです。
引数の型宣言もないので適切にする必要があります。

Answered by kareidscope 1123 on November 22, 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