亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

簡化條件邏輯以提高可讀性

簡化條件邏輯以提高可讀性

慕雪6442864 2022-10-20 14:55:39
我有以下設置的代碼vrstaProizvoda。private String napraviVrstuProizvoda(String kreditJeAktivanKod, String idArmPlana) {    String vrstaProizvoda = null;    if (kreditJeAktivanKod != null && kreditJeAktivanKod.equals("Y")) {        vrstaProizvoda = VrstaProizvoda.STEP.value();    } else if (idArmPlana != null && !idArmPlana.isEmpty() && !idArmPlana.equals("0000")){        vrstaProizvoda = VrstaProizvoda.ARM.value();    }    return vrstaProizvoda;}看else if聲明,一切都是否定價值觀。有沒有更好的方法來編寫idArmPlana條件以便更容易閱讀?還是不值得?
查看完整描述

5 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

你可以寫一些類似的東西:

!(idArmPlana == null || idArmPlana.isEmpty() || idArmPlana.equals("0000"))

邏輯仍然相同,但可讀性更高。擁有長鏈的and's or or's永遠不會超級可讀,但是在你有簡單條件的地方做這樣的事情,或者它們在一起,然后否定結果可以工作。


查看完整回答
反對 回復 2022-10-20
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

為了更容易閱讀,只需創建具有邏輯名稱的小函數:


private String napraviVrstuProizvoda(String kreditJeAktivanKod, String idArmPlana) {

    String vrstaProizvoda = null;

    if (isYes(kreditJeAktivanKod)) {

        vrstaProizvoda = VrstaProizvoda.STEP.value();

    } else if (!isZero(idArmPlana)){

        vrstaProizvoda = VrstaProizvoda.ARM.value();

    }

    return vrstaProizvoda;


}


function boolean isYes(String string){

  return (null != string && string.equals("Y");

}


function boolean isZero(String string){

 return (null != string && !string.isEmpty() && string.equals("0000");

}


查看完整回答
反對 回復 2022-10-20
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

我的偏好是其中之一:


private String napraviVrstuProizvoda(String kreditJeAktivanKod, String idArmPlana) {

    if ( (kreditJeAktivanKod != null) && kreditJeAktivanKod.equals("Y") ) {

        return VrstaProizvoda.STEP.value();

    } else if ( (idArmPlana != null) && !idArmPlana.isEmpty() && !idArmPlana.equals("0000") ) {

        return VrstaProizvoda.ARM.value();

    } else {

        return null;

    }

}


private String napraviVrstuProizvoda(String kreditJeAktivanKod, String idArmPlana) {

    if ( strEquals(kreditJeAktivanKod, "Y") ) {

        return VrstaProizvoda.STEP.value();

    } else if ( !strIsEmpty(idArmPlana) && !strEquals(idArmPlana, "0000") ) {

        return VrstaProizvoda.ARM.value();

    } else {

        return null;

    }

}

以下是一些重寫,以展示一系列替代方案,并展示如何通過增量調整達到上述目標:


用更多的空格和括號重寫。這使得挑選長變量名變得更容易,并且免除了讀者組織表達式邏輯的所有需要:


private String napraviVrstuProizvoda(String kreditJeAktivanKod, String idArmPlana) {

    String vrstaProizvoda = null;

    if ( (kreditJeAktivanKod != null) && kreditJeAktivanKod.equals("Y") ) {

        vrstaProizvoda = VrstaProizvoda.STEP.value();

    } else if ( (idArmPlana != null) && !idArmPlana.isEmpty() && !idArmPlana.equals("0000") ) {

        vrstaProizvoda = VrstaProizvoda.ARM.value();

    }

    return vrstaProizvoda;

}

重寫以刪除默認的“空”值。擁有這樣的價值是有問題的??紤]一下邏輯是否要復雜得多。擁有默認值會剝奪編譯器檢測未處理案例的機會。


private String napraviVrstuProizvoda(String kreditJeAktivanKod, String idArmPlana) {

    String vrstaProizvoda;

    if ( (kreditJeAktivanKod != null) && kreditJeAktivanKod.equals("Y") ) {

        vrstaProizvoda = VrstaProizvoda.STEP.value();

    } else if ( (idArmPlana != null) && !idArmPlana.isEmpty() && !idArmPlana.equals("0000") ) {

        vrstaProizvoda = VrstaProizvoda.ARM.value();

    } else {

        vrstaProizvoda = null;

    }

    return vrstaProizvoda;

}

用多個返回值重寫。這是我的偏好,但有些人更喜歡單個 return 語句,就像原始方法中存在的那樣。


private String napraviVrstuProizvoda(String kreditJeAktivanKod, String idArmPlana) {

    if ( (kreditJeAktivanKod != null) && kreditJeAktivanKod.equals("Y") ) {

        return VrstaProizvoda.STEP.value();

    } else if ( (idArmPlana != null) && !idArmPlana.isEmpty() && !idArmPlana.equals("0000") ) {

        return VrstaProizvoda.ARM.value();

    } else {

        return null;

    }

}

用輔助方法重寫(見下文)。這更清楚一些,但是以模糊測試邏輯為代價。將代碼拆分為許多小方法雖然經常受到鼓勵,但在實踐中并不總是首選。


private String napraviVrstuProizvoda(String kreditJeAktivanKod, String idArmPlana) {

    if ( strEquals(kreditJeAktivanKod, "Y") ) {

        return VrstaProizvoda.STEP.value();

    } else if ( !strIsEmpty(idArmPlana) && !strEquals(idArmPlana, "0000") ) {

        return VrstaProizvoda.STEP.value();

    } else {

        return null;

    }

}

輔助方法:


// Test that two strings are equal.  Handle null values.

private boolean strEquals(String value1, String value2) {

    if ( value1 == null ) {

        return ( value2 == null );

    } else if ( value2 == null ) {

        return false;

    } else {

        return value1.equals(value2);

    }

}


// Test that two strings are equal.  Handle null values.

private boolean strEquals(String value1, String value2) {

    boolean result;

    if ( value1 == null ) {

        result = ( value2 == null );

    } else if ( value2 == null ) {

        result = false;

    } else {

        result = value1.equals(value2);

    }

    return result;

}


// Test if a string is neither null nor empty.

private boolean strIsNotEmpty(String value) {

    return ( (value != null) && !value.isEmpty() );

}


查看完整回答
反對 回復 2022-10-20
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

要為已經給出的好答案添加另一種選擇:


private String napraviVrstuProizvoda(String kreditJeAktivanKod, String idArmPlana) {

    return Optional.ofNullable(kreditJeAktivanKod).filter(e->e.equals("Y"))

           .isPresent()? VrstaProizvoda.STEP.value() :

           Optional.ofNullable(idArmPlana).filter(e->!e.equals("0000")).filter(e->!e.isEmpty())

           .isPresent()? VrstaProizvoda.ARM.value(): 

            null;

}


查看完整回答
反對 回復 2022-10-20
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

使用 Apache commons-lang3 庫,您可以:


import org.apache.commns.lang3.StringUtils;


if (StringUtils.isNotBlank(StringUtils.stripStart(idArmPlana,"0")))

stripStart如何從字母數字文本中刪除前導零?


查看完整回答
反對 回復 2022-10-20
  • 5 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號