在我的同行中,有关讨论是否将“if”语句视为一种方法?虽然“if”附加了单词statement,但它的行为仍然类似于简单的非返回值方法。
例如:
if(myValue) //myValue is the parameter passed in
{
//Execute
}
同样,方法可以执行相同的操作:
public void MyMethod(myValue)
{
switch(myValue)
{
case true:
//Logic
break;
case false:
//Logic
break;
}
}
在编程语言中调用(考虑)“if”语句是一种简单的预定义方法是否准确?
答案 0 :(得分:106)
在C,C ++,C#,Java等语言中,IF
是一个语句,作为保留字实现,是语言核心的一部分。在LISP系列的编程语言中(我想到了Scheme)IF
是一个表达式(意味着它返回一个值),并作为一种特殊形式实现。另一方面,在纯粹的面向对象语言(如Smalltalk)中,IF
实际上是一种方法(更准确地说是一种消息),通常在Boolean
类或其子类之一。
底线:条件指令IF
的真实性质取决于编程语言,以及该语言的编程范例。
答案 1 :(得分:42)
不,“if”语句与C#中的方法完全不同。考虑一下它不像方法的方式:
现在,将某些事物视为一种方法确实是有意义的,而不是“if”语句。例如,许多运营商很像方法。以下几点之间的概念差异很小:
decimal x = y + z;
和
decimal x = Add(y, z);
事实上,如果你在C#中反汇编两位小数,你会发现生成的代码 是一个方法调用。
有些运营商具有不同寻常的特征,但很难将它们描述为方法:
bool x = Y() && Z();
与
不同bool x =和(Y(),Z());
用一种急切评估方法参数的语言;在第一个中,如果Y()为假,则不评估Z()。在第二部分,两者都进行了评估。
你创建一个“if”方法而不是问题;实现更复杂而不是“if”语句。说你可以用开关模仿“如果”,就像说你可以用摩托车模仿自行车;用更复杂的东西取代简单的东西并不引人注目。指出一个开关实际上是一个奇特的“如果”是更合理的。
答案 2 :(得分:14)
您无法创建myIfStatement()
方法并希望以下方法有效:
...
myIfStatement(something == somethingElse)
{
// execute if equal
}
else
{
// execute if different
}
if
是一个控制语句,不能通过方法复制,也不能用if替换方法调用:
myVariable = if(something == somethingElse);
if
无法超载。
这些是if
不是一种方法的一些迹象,但我怀疑还有其他方法。
答案 3 :(得分:8)
肯定取决于语言,但在C,java,perl,no中,它们是语言命令。保留字。如果它们是函数,你就可以重载它们并获得它们的指针,并完成你可以用函数做的所有其他事情。
这更像是一个哲学问题,而不是一个编程问题。
答案 4 :(得分:4)
方法有签名,其主要意图是可恢复逻辑,而如果只是控制执行流程的条件。 如果您了解装配,您就会知道即使在非常低的水平上两者也是不同的。
答案 5 :(得分:3)
您当然可以编写If()
和IfElse()
方法,但这并不能使它们相同。
if()
被定义为语言中的语句,与方法调用处于同一级别。但是在a.o.中存在差异。语法和优化的可能性。
所以:不,if()
声明不是方法。例如,您不能将其分配给代理人。
答案 6 :(得分:3)
在我看来,将if
语句视为一种方法只会让人感到困惑。与方法调用的相似之处只是肤浅的。
if
语句是控制执行流的语句之一。当它被编译成本机机器代码时,它将评估表达式并进行条件跳转。
伪代码:
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:
答案 7 :(得分:3)
“if”语句是否被视为方法?
不,它不被认为是您可能已经在其他答案中看到的方法。但是,如果你的问题是 - “它的行为是否像方法一样?”,那么答案可能 是,具体取决于相关语言。任何支持第一类函数的语言都可以不使用像if
这样的内置构造/语句。忽略所有蓬松的东西,如返回值和语法,因为基本上它只是一个评估布尔值的函数, 如果 它是true
,那么它执行一些代码块。同时忽略OO和功能差异,因为以下示例可以作为Boolean
类的方法实现,无论使用何种语言,如Smalltalk都可以。
Ruby支持可执行代码块,可以存储在变量中并传递给方法。所以这是在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!"); });
答案 8 :(得分:2)
如果它被归类为一种方法,那么我们肯定会在OO领域,但我们不是,所以我假设我们正在研究一个函数。当然可以编写一个函数/子例程来复制if行为(我认为它实际上是lisp / scheme中的一个函数)。
我不会将它作为一个函数甚至是一个子程序,只是控制流程。
答案 9 :(得分:2)
如果通过方法我们理解了一个可以调用的代码块,并且当方法结束时控制流自动返回给调用者,那么if
不是方法。在if
执行后,控制流不会返回。
答案 10 :(得分:2)
IF语句是大多数语言中使用的条件构造特性,它从布尔条件评估true或false执行路径流。除了分支预测的情况之外,这总是通过基于某些条件选择性地改变控制流来实现。
IF构造是编程时使用的最基本和最需要的逻辑。它允许引入功能的构建块。
答案 11 :(得分:2)
是,if
是某些语言的功能,即使它很少且用途有限。
通常,构造类似于if(booleanCondition, functionPointerToCallIfConditionTrue, functionPointerToCallIfCondtionFalse)
。如果需要,它本身可以用作其他函数的委托。
System.Linq.Expressions.Expression.IfThenElse
。
答案 12 :(得分:0)
没有。完成if后,您不会返回。它只是一个控制声明。
答案 13 :(得分:0)
请注意,在您的示例中,您将一个“选择语句”(C#4规范,第8.7节), if 语句(第8.7.1节)替换为另一个,switch语句(第8.7节) 0.2)。您还将选择语句重构为单独的方法。但是,您没有将选择语句的使用替换为方法。
你的问题的答案是“不”。