我多次想知道自己是否,如果不是,为什么不,以下伪代码有一个成语/快捷方式:
if object.value == some_value then object.value = some_other_value
例如,在JavaScript中我有时会写:
if (document.getElementById("toggledDiv").style.display == "block") {
document.getElementById("toggledDiv").style.display = "none";
}
这似乎相当乏味。这个成语是否有名称,在常见的编程语言中是否有更简洁的语法?
谢谢!
编辑:更确切地说,我不关心大括号,但是你必须至少有时间引用该属性。我想有类似的东西(伪代码):
test ( object.value ):
if (it > 0) it = 0;
else it -= 1;
即G:
test (document.getElementById("toggledDiv").style.display):
if (it == "block") it = "none";
其中it
是引用测试属性的关键字。我只是想知道没有任何编程语言可以实现它。
Upate :
好的,与此同时,我发现了一些有点短的东西,但只适用于JavaScript:
(function(s){
if(s.display=='block')
s.display="none";
else
s.display='block';
})(document.getElementById("toggledDiv").style)
答案 0 :(得分:1)
我不知道任何支持开箱即用的语言,但有一些支持定义新运营商的语言。理论上,您可以编写类似以下内容(在伪代码中)
operator <T> T toggle(T value, T[] values) {
for(int i=0; i<values.size(); i++) {
if(value == values[i]) {
if(values.size() > (i+1)) {
return values[i+1]
} else {
return values[0]
}
}
}
error "value $value not found in value list $values"
}
假设我的伪代码是正确的,这将允许您执行以下操作:
v = true;
v = v toggle [true, false] ; // v == false
v = v toggle [true, false] ; // v == true (loops to beginning of list
v = v toggle [false, true, true] ; // v == true, since true is both the 2nd and 3rd elements of the list
您还可以使用两个版本:
前者不是一个切换,而是更多......你想要的,我想。我的代码基于前面关于css / block / none的注释中的toggle用例,其中toggle是更常见的行为。
假设语言支持它,您也可以编写toggle=
运算符:
v toggle= ['none', 'block']
答案 1 :(得分:1)
好吧,在Haskell和其他FP语言中,条件(如三元运算符)是第一类表达式,因此可以将赋值浮出,
a = if x == y then x else z
使代码更清晰。
答案 2 :(得分:0)
在JavaScript中,你可以这样做:
var d = document.getElementById("toggledDiv");
if (d.style.display == "block") d.style.display = "none";