"if"语句是否被视为一种方法?

Edw*_*ard 49 language-agnostic programming-languages if-statement conditional-statements

我的同行之间讨论了"if"语句是否被视为一种方法的有趣讨论?尽管"if"附加了单词statement,但它仍然表现得类似于简单的非返回值方法.

例如:

if(myValue) //myValue is the parameter passed in
{
    //Execute
}
Run Code Online (Sandbox Code Playgroud)

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

public void MyMethod(myValue)
{
    switch(myValue)
    {
        case true:
            //Logic
            break;
        case false:
            //Logic
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Ósc*_*pez 106

在诸如C,C++,C#,Java等语言中,语句IF是作为保留字实现的,是语言核心的一部分.在LISP系列的编程语言中(Scheme会想到)是一个表达式(意味着它返回一个值),并作为一种特殊形式实现.另一方面,在纯面向对象语言(如Smalltalk)中,实际上一种方法(更确切地说是一种消息),通常在类或其子类之一上实现.IFIFBoolean

底线:条件指令的真实性质IF取决于编程语言,以及该语言的编程范例.

  • @ noah1989:同意.奇怪的是,只有一个答案提到Smalltalk."那些忘记历史的人必然会重复它,"我猜...... (7认同)
  • @Oscar:if-then-else也可以在Actor模型中表示为消息传递(http://en.wikipedia.org/wiki/Actor_model_and_process_calculi_history). (3认同)
  • @Oscar:是的,这是一种特殊形式,对不起.我偶然发现了*表达式*.几乎所有东西都是LISP的表达.但是,这是100%正确的. (2认同)

Eri*_*ert 42

不,"if"语句与C#中的方法完全不同.考虑一下它不像方法的方式:

  • 包含块中的实体位于"if"的主体范围内.但是方法无法访问其调用者的绑定环境.
  • 在许多语言中,方法是某些东西的成员 - 可能是一种类型.声明不是成员.
  • 在具有一流方法的语言中,方法可以作为数据传递.(在C#中,通过将它们转换为委托.)"if"语句不是一流的.
  • 等等.差异是无数的.

现在,将某些事物视为一种方法,而不是"如果"的陈述是有意义的.例如,许多运营商很像方法.概念差异很小:

decimal x = y + z;
Run Code Online (Sandbox Code Playgroud)

decimal x = Add(y, z);
Run Code Online (Sandbox Code Playgroud)

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

一些运营商具有不寻常的特征,这使得很难将它们描述为方法:

bool x = Y() && Z();
Run Code Online (Sandbox Code Playgroud)

不同于

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

用一种急于评估方法论证的语言; 在第一个中,如果Y()为假,则不评估Z().在第二个,两个都被评估.

你创建一个"if"方法而不是问题; 实现比"if"语句更复杂.说你可以用开关模仿"如果",就像说你可以用摩托车模仿自行车; 用更复杂的东西取代简单的东西并不引人注目.更明确地指出一个开关实际上是一个奇特的"如果".


Ada*_*vis 14

您无法创建myIfStatement()方法并期望以下工作:

...
myIfStatement(something == somethingElse)
{
   // execute if equal
}
else
{
   // execute if different
}
Run Code Online (Sandbox Code Playgroud)

if 是一个控制语句,不能通过方法复制,也不能用if替换方法调用:

myVariable = if(something == somethingElse);
Run Code Online (Sandbox Code Playgroud)

if 不能超载.

这些是一些if不是方法的标志,但我怀疑还有其他标志.


stu*_*stu 8

肯定取决于语言,但在C,java,perl,no中,它们是语言命令.保留字.如果它们是函数,你将能够重载它们并获得指向它们的指针并执行所有其他可以用函数执行的操作.

然而,这更像是一个哲学问题,而不是一个编程问题.