作为一个自学成才的程序,我从来没有真的没有任何人解释为什么某些事情应该或不应该使用。一个实例(其中我拿起多年前采用通常的)替代控制结构的语法:

x = (y == true) ? "foo" : "bar";

我个人认为这种语法容易执行,尤其是对短、简明的代码,但是我没有看到它得到了很多利用"野生"所以我想知道如果这是不好的做法来使用这个过更传统的 如果...别 结构?

在此先感谢。

有帮助吗?

解决方案

作为老乡大多自学成才的程序员,我只能给你我的意见,没有它后面的任何特殊权限。

我发现,三元条件算子(?:)是完全可以接受的,当你使用它的无副作用的表达式。一旦你开始使用它来表示一个决定做一些事情与做其他的事情,你(在我看来)滥用它。

总之,控制构建体是用于构造代码的流程和操作员是表达式。只要一使事情以此方式,代码保持可读。

其他提示

有条件的操作者(有时称为三元操作,但这并不是技术上是正确的,见Marc的意见)不是一个真正的"替代控制结构",有一些重要的差异:

  • 有条件的操作者是一个 操作员 并提供了一个价值,它使用一种表达。
  • 如果他是一个控制结构,(的过程),返回没有任何价值对其自身。
  • 替代品在一个有条件的操作者必须也能表达方式。
  • 替代品在一个如果其他结构可以是一个任意数量的报表。

当然有相似之处:

  • 每个评估的一个条件式。
  • 只有适当的替代(表达或方框)进行评估的基础上布尔的价值的条件。
  • 两者可以链接在一起,与人类的形式更长的"交换"的发言。

在一般情况下,如果你正在评估可替代的表达形式的副作用(也就是要做的工作,而不是返回的一个值),那么使用一个有条件的操作者可以更加令人困惑,维护人员比使用,如果其他结构。

如果以下所有的都是真实的,使用一个有条件的:

  • 你的条件和替换的发言是很容易理解。
  • 没有任何表达形式具有任何副作用。
  • 你不会需要额外的行为(即副作用或其他的发言)在替代的未来。

您例如给出的是一个很好的使用一个三条件。

有疑问时,采用如果他人。当心思维的条件作为另一种如果其他和试图强加的东西不属于它。这是什么样的事情,(尤其是当中找到的遗产代)变成人关于有条件的操作员。

此被称为三元表达。如果意图可以用三元操作简明扼要expressened然后我这样做。我通常画线以及具有复合表达式(超过1结合&&或||)

好:

var x = (someVar > 42 ) ? ThisFunction() : ThisOtherFunction();

为:

var x = (someVar > 42 && anotherVariable.IsSafeForConsumption() && IsNotProcessing ) ? ThisFunction() : ThisOTherFunction();

你指的是语法通常被称为三元条件运算符和它的语义等于一个if / else子句和它执行一样。

朝向过度使用theese构建体的主要理由是,它可以创建有点杂乱的源代码可能不如使用的if / else方式可读的。这是人们不知道该特定语法谁也更是如此。它的<击>更有可能 100%安全的假设,人们了解的if / else。

条件运算符应该是相当熟悉的最开发者。事实上,我会简单地使用:

x = y ? "foo" : "bar";

我觉得这很容易理解。该==true / ==false似乎(IMO)矫枉过正的bool。更常见的“旧式的”的用法是:

if(12345 == someVar) {...} // etc

此“常量==变量”是为了避免的问题“=”与“==”,但由于C#不把数字作为布尔值,它是非常罕见的,这是一个问题,它是更常见(C#)看到更清楚:

if(someVar == 12345) {...} // etc

由于如果你错过了额外=通常不会编译。

对我来说这个问题的一个可读性和可维修性在多程序员的环境。

如果其他人已经阅读了代码,或者如果你要回到这之后,你需要使其可读性。

除非你让的情况下简单的、很容易用于代码使用的三元经营者成为混乱和无法读取。

  • 保持简单
  • 如果它变得甚至稍微难阅读,重构成如{}else{}

除了当它在大部分基本方案被使用时,我会说避免。如果2层结构被编译到完全相同的MSIL,为什么要用一个很难理解?

在此外,由于操作者叔胺基本上是一个语句伪装成一个表达式可以采取这样的:

x = (y == true) ? "foo" : "bar";
string instructions = "Please can somebody go and get me a " + x;

和它转换成这样:

string instructions = "Please can somebody go and get me a " + 
                      ((y == true) ? "foo" : "bar");

请注意,需要额外的括号。尝试编译它,如果你不能明白为什么!

这是一个非常有用的特征是具有,我使用它所有的时间。只是要谨慎如其他人提及的不写有副作用,或过于复杂的表达式减少可读性表达式。

在一个稍微不相关的注意事项请在上帝的份上难道没有写这样的代码(我见过很多次了):

if (y == true) {
   weWantAFoo = true;
}
else {
   weWantAFoo = false;
}

相反,你应该这样做:

bool weWantAFoo = (y==true);

这是使用条件语句某处比在if声明其他的只是另一个例子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top