Logic 简化if语句?

Logic 简化if语句?,logic,Logic,可以简化这个if语句吗 如果是,答案是什么 if (type) { if(NdotL >= 0.0) { color += Idiff + Ispec; } } else { color += Idiff + Ispec; } 试试看: color+=(type && NdotL >= 0.0)? Idiff + Ispec

可以简化这个if语句吗

如果是,答案是什么

    if (type)
    {
        if(NdotL >= 0.0)
        {
            color   += Idiff + Ispec;
        }
    }
    else
    {
        color   += Idiff + Ispec;
    }
试试看:

color+=(type && NdotL >= 0.0)? Idiff + Ispec:Idiff + Ispec;
使用

只是为了把这两个条件结合起来


真的很抱歉出现缩进之类的情况,但是这个网站的移动版不允许你输入代码,我只是想帮你这么多XD

从布尔代数的角度考虑这个问题。你有两个条件

A = (type)
B = (NdotL >= 0.0 )
当您

A * B
/A
(我用
/A
表示“非A”,用
*
表示“和”)

所以你唯一不执行的时候就是

A * /B
这意味着你的陈述应该是

if (!((type) && NdotL < 0.0 )) {
  // do your thing
}
您可以将您的条件重写为

( /A + B )

if ( !(type) || ( NdotL >= 0 ) ) {
   // do your thing
}

有四种可能的状态,其中只有一种会导致语句不被执行……这里的关键是简化。此外,这是完全无效的。你的两个返回值都是一样的。不引入bug也很好。哈哈,我想这可能会吸引一些人,这是一个漫长的夜晚,我的大脑无法解决我们都遇到过的这个简单问题。I4r3nZu编写的代码行数可能要简单得多。这种方式应该更容易阅读,但如果你想要优雅,他说的是好的!修正了你的缩进。实际上,你可以在移动站点上键入一个新行,后跟四个空格来输入每行代码——我经常这样做。我想你的意思是
=
而不是
。我会把责任推到手机网站上。。。
if (!((type) && NdotL < 0.0 )) {
  // do your thing
}
(A * B) = /(/A + /B)
( /A + B )

if ( !(type) || ( NdotL >= 0 ) ) {
   // do your thing
}