Logic 简化if语句?
可以简化这个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 (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
}