有人可以将此嵌套的三元拆分成多个三元或其他代码,也可以用英语解释吗?我从来没有遇到过像这样的嵌套三元数,所以我不确定操作顺序:
var EqualizeCheck = (IIO.ReadDigitalInput(IO_GROUP_CHARGERS, subGroupName, IO_ITEM_ENABLEEQUALIZE) == IO_INPUT_ON) ? (EqualizeCompleteTime != "") ? (EqualizeCompleteTime <= CurrentDateTime) ? true : false : false : true;
你去:
let EqualizeCheck;
if (IIO.ReadDigitalInput(IO_GROUP_CHARGERS, subGroupName, IO_ITEM_ENABLEEQUALIZE) == IO_INPUT_ON) {
if (EqualizeCompleteTime != "") {
if (EqualizeCompleteTime <= CurrentDateTime) {
EqualizeCheck = true;
} else {
EqualizeCheck = false;
}
} else {
EqualizeCheck = false;
}
} else {
EqualizeCheck = true;
}
我知道不是你写的,但是我应该指出,嵌套这么多的三元表达式是一种不好的做法,并且会导致代码不可读。
要获得更好的主意,只需将其打破并尝试应用if-else
,您就可以轻松理解。 @Sagi Rika提到的事情也是正确的,许多三元表达式的嵌套会降低代码的可读性,从而导致难以理解。
var EqualizeCheck = (IIO.ReadDigitalInput(IO_GROUP_CHARGERS, subGroupName, IO_ITEM_ENABLEEQUALIZE) == IO_INPUT_ON)
? (EqualizeCompleteTime != "")
? (EqualizeCompleteTime <= CurrentDateTime)
? true
: false
: false
: true;
如果您将其破坏,则将如下所示:
var EqualizeCheck;
if (IIO.ReadDigitalInput(IO_GROUP_CHARGERS, subGroupName, IO_ITEM_ENABLEEQUALIZE) == IO_INPUT_ON) {
if (EqualizeCompleteTime != "") {
if (EqualizeCompleteTime <= CurrentDateTime) {
EqualizeCheck = true;
} else {
EqualizeCheck = false;
}
} else {
EqualizeCheck = false;
}
} else {
EqualizeCheck = true;
}
要逐步进行操作,请首先分离最嵌套的条件(寻找完整的condition ? value : value
语句),在这种情况下,就是这样:
var EqualizeCheck =(IIO.ReadDigitalInput(IO_GROUP_CHARGERS,subGroupName,IO_ITEM_ENABLEEQUALIZE)== IO_INPUT_ON)? (EqualizeCompleteTime!=“”))? ((EqualizeCompleteTime <= CurrentDateTime)? true:false:false:true;
将其分离出来并针对每个三元条件重复,直到您遇到类似这样的事情:
(IIO.ReadDigitalInput(IO_GROUP_CHARGERS, subGroupName, IO_ITEM_ENABLEEQUALIZE) == IO_INPUT_ON) ?
// Condition 1 is true, check the next condition
(EqualizeCompleteTime != "") ?
// Condition 2 is true, check the next condition
(EqualizeCompleteTime <= CurrentDateTime) ?
// Condition 3 is true, return true
true :
// Condition 3 is false, return false
false :
// Condition 2 is false, return false
false :
// Condition 1 is false, return true
true;