我有以下代码设置了plot.new()
。
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
条件,以便于阅读?还是不值得?
答案 0 :(得分:2)
您可以按照以下方式写点东西:
!(idArmPlana == null || idArmPlana.isEmpty() || idArmPlana.equals("0000"))
逻辑仍然相同,但可读性更高。拥有长的and's or or's链永远都不是 super 可读的,但是在您拥有简单条件或将它们在一起的情况下进行此类操作,然后取反就可以了。
答案 1 :(得分:2)
要使其更易于阅读,只需创建具有逻辑名称的小函数:
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");
}
答案 2 :(得分:1)
不确定Arrays.asList
,但是重复出现的idArmPlana
只能使用一次:
return "Y".equals(kreditJeAktivanKod)
? VrstaProizvoda.STEP.value()
: !Arrays.<String>asList("", "0000", null).contains(idArmPlana)
? VrstaProizvoda.ARM.value()
: null;
答案 3 :(得分:1)
使用Apache commons-lang3库,您可以:
import org.apache.commns.lang3.StringUtils;
if (StringUtils.isNotBlank(StringUtils.stripStart(idArmPlana,"0")))
stripStart
从How to remove leading zeros from alphanumeric text?被盗
答案 4 :(得分:1)
我的偏好是其中之一:
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;
}
重写以删除默认的“ null”值。具有这样的价值是有问题的。考虑一下逻辑是否更为复杂。具有默认值将使编译器没有机会检测未处理的情况。
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;
}
}
Helper方法:
// 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() );
}
答案 5 :(得分:1)
为已经给出的好答案添加另一种替代方法:
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;
}