“if object.value == some_value then object.value = some_other_value”的编程语言习语

时间:2011-06-10 16:45:20

标签: programming-languages idioms

我多次想知道自己是否,如果不是,为什么不,以下伪代码有一个成语/快捷方式:

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)

3 个答案:

答案 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";