在许多语言中的任务是在条件的法律。 我永远无法理解这背后的原因。 为什么你这样写:
if (var1 = var2) {
...
}
代替:
var1 = var2;
if (var1) {
...
}
在许多语言中的任务是在条件的法律。 我永远无法理解这背后的原因。 为什么你这样写:
if (var1 = var2) {
...
}
代替:
var1 = var2;
if (var1) {
...
}
它是循环比if语句更加有用。
while( var = GetNext() )
{
...do something with var
}
否则将被写入
var = GetNext();
while( var )
{
...do something
var = GetNext();
}
更为有用,如果你调用一个函数:
if (n = foo())
{
/* foo returned a non-zero value, do something with the return value */
} else {
/* foo returned zero, do something else */
}
当然,你可以把N = FOO(); 在另一份声明中,然后如果(N),但我认为上面是一个相当可读的成语。
我觉得最有用的在其中往往涉及错误检测等行为链
if ((rc = first_check(arg1, arg2)) != 0)
{
report error based on rc
}
else if ((rc = second_check(arg2, arg3)) != 0)
{
report error based on new rc
}
else if ((rc = third_check(arg3, arg4)) != 0)
{
report error based on new rc
}
else
{
do what you really wanted to do
}
替代(未使用中的条件分配)为:
rc = first_check(arg1, arg2);
if (rc != 0)
{
report error based on rc
}
else
{
rc = second_check(arg2, arg3);
if (rc != 0)
{
report error based on new rc
}
else
{
rc = third_check(arg3, arg4);
if (rc != 0)
{
report error based on new rc
}
else
{
do what you really wanted to do
}
}
}
随着旷日持久的错误检查,而分配功能于有条件的版本不这样做,替代可以运行页面的关闭RHS。
如果你调用返回或者数据上工作或标志指示错误(或者说你做)的功能,可以是有用的。
就像是:
while ((c = getchar()) != EOF) {
// process the character
}
// end of file reached...
就个人而言这是一个成语,我不喜欢巨大的,但有时选择是丑陋。
GCC可以帮助您检测(用-Wall),如果你无意中尝试使用赋值为真值,如果它建议你写
if ((n = foo())) {
...
}
即使用额外的括号来表示,这是你要真的是。
当你写一个成语是比较有用的while
循环,而不是一个if
语句。 对于if
语句,你可以象你所说的打破它。 但是,如果没有这个结构,你要么不得不重复自己:
c = getchar();
while (c != EOF) {
// ...
c = getchar();
}
或使用循环和半结构:
while (true) {
c = getchar();
if (c == EOF) break;
// ...
}
我通常宁愿环和半形式。
简短的回答是面向表达式的编程语言支持更简洁的代码。 他们不强迫你从查询分隔命令 。
在PHP中,例如,它是有用的,通过SQL数据库结果循环:
while ($row = mysql_fetch_assoc($result)) {
// Display row
}
这看起来不过如此:
$row = mysql_fetch_assoc($result);
while ($row) {
// Display row
$row = mysql_fetch_assoc($result);
}
另一个优势是GDB的使用过程中。 在下面的代码,如果我们单步错误代码是不知道。
while (checkstatus() != -1) {
// process
}
宁
while (true) {
int error = checkstatus();
if (error != -1)
// process
else
//fail
}
现在,在单一的步骤,我们可以知道什么是从的checkStatus返回错误代码()。
原因是 :
性能改进(有时候)
小码(常亮)
举一个例子:有一个方法someMethod()
并在if
你想检查方法的返回值是否为状态null
。 如果你不打算再次使用的返回值。
If(null != someMethod()){
String s = someMethod();
......
//Use s
}
因为你所呼叫的同样的方法两次它会阻碍性能。 而是使用:
String s;
If(null != (s = someMethod())) {
......
//Use s
}