if语句可以实现为函数调用吗?

时间:2010-01-15 05:23:52

标签: function if-statement

我发现代码中发现的一种风格“惯例”是使用:

if(condition) {

而不是(我的偏好):

if (condition) {

略有不同,可能是一个不重要的区别,但我发现如果'if'语句被实现为一种函数调用,第一种样式可能是合理的。然后我可以停止反对它。

有没有人知道一种编程语言,其中if语句是作为函数调用实现的,其中参数是一个布尔表达式?

编辑:我意识到if()之后的块是有问题的,我表达问题的方式可能太天真了,但到目前为止,我对这些答案感到鼓舞。

6 个答案:

答案 0 :(得分:1)

它不可能有一个单个参数,因为它必须决定要遵循哪个代码路径,这必须在所述函数之外完成。它至少需要两个参数,但是三个允许“其他”条件。

答案 1 :(得分:1)

Lisp的if语法与语言中的任何其他宏完全相同(它不完全是一个函数,但差别很小):(if cond then else)

除非条件选择它们,否则'then'和'else'子句都将被取消评估。

答案 2 :(得分:1)

在Smalltalk中,if语句是一种函数调用 - 当然是一种完全面向对象的方式,所以它实际上是一种方法而不是自由函数。我不确定它会如何影响你对语法的思考,因为语法完全不同,看起来像:

someBoolean
    ifTrue:  [ do_something ]
    ifFalse: [ do_something_else ]

鉴于这根本不包含任何括号,您可以将其解释为证明您想要相信的任何内容。 : - )

答案 3 :(得分:1)

如果if函数是常规函数,那么它不能只取条件,它需要作为参数运行代码块,具体取决于条件是否计算为真。

像C ++中的函数原型可能是

的原因
void custom_if(bool cond, void (*block)());

此函数可以调用块函数,也可以不调用,具体取决于cond。

在某些功能语言中,事情要容易得多。在Haskell中,一个简单的函数,如:

if' True a _ = a
if' _ _ b = b

允许您编写如下代码:

if' (1 == 1)
  (putStrLn "Here")
  (putStrLn "There")

总会在这里打印。

答案 4 :(得分:1)

tcl是一种语言,它将if作为常规函数/命令实现,它带有两个参数;条件和要执行的代码块

if {$vbl == 1} { puts "vbl is one" }

http://tmml.sourceforge.net/doc/tcl/if.html

实际上,tcl中的所有语言结构(for循环,while循环等)都是作为命令/函数实现的。

答案 5 :(得分:0)

我不知道if(condition)作为常规函数调用实现的任何语言,但Perl实现了try {} catch {}等.. {}作为函数调用。