“if”陈述是否被认为是一种方法?

我的同行之间就“if”陈述是否被认为是一种方法进行了有趣的讨论? 尽pipe“if”附加了单词声明,但其行为仍类似于简单的非返回值方法。

例如:

if(myValue) //myValue is the parameter passed in { //Execute } 

同样,一个方法可以执行相同的操作:

 public void MyMethod(myValue) { switch(myValue) { case true: //Logic break; case false: //Logic break; } } 

在编程语言中调用(考虑)“if”语句是一个简单的预定义方法是否准确?

在诸如C,C ++,C#,Java之类的语言中, IF是作为保留字实现的语句 ,是语言核心的一部分。 在LISP家族的编程语言中(Scheme想到的) IF是一个expression式 (意味着它返回一个值),并且被实现为一个特殊的forms。 另一方面,在像Smalltalk这样的纯面向对象的语言中, IF实际上一个方法(更准确地说: 消息 ),通常在Boolean类或它的一个子类上实现。

底线:条件指令IF的真正本质取决于编程语言以及该语言的编程范例。

不,“if”语句不像C#中的方法。 考虑它不像一种方法的方式:

  • 包含块中的实体在“if”的范围内。 但是一个方法不能访问调用者的绑定环境。
  • 在许多语言中,方法可能是某种东西的成员 – 一种types。 声明不是成员。
  • 在具有一stream方法的语言中,方法可以作为数据传递。 (在C#中,通过将它们转换为委托。)“if”语句不是一stream的。
  • 等等。 差异是无数的。

现在,将某些事情看作是一种方法,而不是“如果”陈述是有道理的。 许多运营商,例如,很像方法。 这两者之间的概念差异很小:

 decimal x = y + z; 

 decimal x = Add(y, z); 

事实上,如果你在C#中反汇编两位小数,你会发现生成的代码实际上一个方法调用。

一些操作员具有不寻常的特征,使得难以将其描述为方法:

 bool x = Y() && Z(); 

不同于

bool x = And(Y(),Z());

用一种对方法论点进行热切评估的语言; 在第一个中,如果Y()是假的,则Z()不被评估。 在第二个,都评估。

你创造一个“如果”的方法,而不是回避这个问题; 这个实现比“if”声明更复杂 。 说你可以用开关来模仿“如果”,就像说你可以用摩托车来模仿自行车; 用一些更复杂的东西代替简单的事情并不令人信服。 指出转换实际上是一个幻想“如果”是更合理的。

您不能创build一个myIfStatement()方法,并期望以下工作:

 ... myIfStatement(something == somethingElse) { // execute if equal } else { // execute if different } 

if是控制语句,并且不能被方法复制,也不能用ifreplace方法调用:

 myVariable = if(something == somethingElse); 

if不能重载。

这些是一些迹象, if不是一种方法,但也有其他的我怀疑。

取决于语言,但在C,Java,Perl,不,它们是语言命令。 保留字。 如果他们是function,你可以重载他们,并指向他们,做所有其他的事情,你可以做的function。

尽pipe如此,这更像是一个哲学问题而不是一个编程问题。

一个方法有一个签名,其主要意图是可重用的逻辑,而如果只是一个条件,控制执行的stream程。 如果你了解assembly,你就会知道,即使是在很低的水平上,两者都是不同的。

你当然可以写If()IfElse()方法,但不会使它们相同。

if()被定义为语言中的语句,与方法调用的级别相同。 但是在语法和优化可能性方面存在差异。

所以:不, if()语句不是一个方法 。 你不能把它分配给委托。

考虑到if语句是一种方法,在我看来,这只会令人困惑。 与方法调用的相似之处仅仅是肤浅的。

if语句是控制执行stream程的语句之一。 当它被编译成本地机器码时,它将评估expression式并进行条件跳转。

伪代码:

 load myValue, reg0 test reg0 jumpeq .skip ; code inside the if .skip: 

如果你使用else ,你会得到两个跳转:

 load myValue, reg0 test reg0 jumpeq .else ; code inside the if jmp .done .else: ; code inside the else .done: 

“if”陈述是否被认为是一种方法?

不,它不被认为是你可能已经在其他答案中看到的方法。 但是,如果你的问题是“它的行为像一个方法吗?”,那么根据所讨论的语言,答案可能是 肯定的 。 任何支持一streamfunction的语言都可以在没有像if这样的构build/语句的if 。 忽略所有蓬松的东西,如返回值和语法,基本上它只是一个函数,评估一个布尔值, 如果它是true ,那么它执行一些代码块。 还要忽略OO和function上的差异,因为下面的例子可以作为Boolean类的一个方法实现,不pipe使用哪种语言,就像Smalltalk一样。

Ruby支持可执行代码块,可以存储在一个variables中,并传递给方法。 所以这是一个在Ruby中实现的自定义_if_函数。 { .. }是传递给函数的一段可执行代码。 它也被称为Ruby中的块。

 def _if_ (condition) condition && yield end # simple statement _if_ (42 > 0) { print "42 is indeed greater than 0" } # complicated statement _if_ (2 + 3 == 5) { _if_ (3 + 5 == 8) { puts "3 + 5 is 8" } _if_ (5 + 8 == 13) { puts "5 + 8 is 13" } } 

我们可以在C,C ++,Objective-C,JavaScript,Python,LISP和许多其他语言中做同样的事情。 这是一个JavaScript示例。

 function _if_(condition, code) { condition && code(); } _if_(42 > 0, function() { console.log("Yes!"); }); 

如果将它归类为一种方法,那么当然我们会在面向对象的领域,但是我们不是,所以我认为我们正在讨论一个函数。 当然可以写一个函数/子程序来复制if行为(我认为它实际上是lisp / scheme中的一个函数)。

我不会把它作为一个函数,甚至是一个子程序,只是控制stream量。

如果通过方法,我们理解了一个可以被调用的代码块,当方法结束时,控制stream自动返回给调用者,那么if s不是方法。 在执行if后控制stream程不会返回任何地方。

IF语句是在大多数语言中使用的条件构造特征,它从布尔条件评估的true或false执行pathstream。 除了分支预测的情况之外,这总是通过根据某些条件select性地改变控制stream来实现的。

IF构造是编程时使用的最基本和最需要的逻辑。 它允许构build模块来引入function。

是的if是某种语言的function,即使这种function很less,而且用途有限。

通常情况下,这个结构就像if(booleanCondition, functionPointerToCallIfConditionTrue, functionPointerToCallIfCondtionFalse) 。如果需要的话,它本身可以用作其他函数的if(booleanCondition, functionPointerToCallIfConditionTrue, functionPointerToCallIfCondtionFalse)

举例来说,Mathematica的行为就是这样,如果你使用Linqexpression式的话, 即使C#也可以做一些工作。 看看System.Linq.Expressions.Expression.IfThenElse

不,如果你完成了,你不会回来。 这只是一个控制语句。

请注意,在你的例子中,你用另一个switch语句(8.7.2节)replace了一个“select语句”(C#4规范,第8.7节), if语句(第8.7.1节)。 您还将select语句重构为单独的方法。 但是,您还没有用方法replaceselect语句。

你的问题的答案是“不”。