返回关键字:为什么某些语言有它而有些语言没有?

时间:2014-12-07 17:40:42

标签: language-agnostic

像Racket这样的语言不需要返回语句来给调用者一个值。例如:

(define (myfunc)
    (1))

为什么C#等其他语言有明确的return关键字?这个关键字真的有用吗,还是只是为了更清晰?

2 个答案:

答案 0 :(得分:2)

这是典型的函数式语言,函数返回最后一次计算的表达式。

在命令式上下文中,这是一个不切实际的限制,因为通常会提前返回,例如在查看数组是否包含某个元素时

contains(array, element) {
  for(el in array) {
    if(el == element) return true;
  }
  return false;
}

而在功能上下文中,您可以使用递归来完成此操作

(define (contains array element)
  (cond
    ((empty? array) false)
    ((eq (head array) element) true)
    (else (contains (tail array) element))))

答案 1 :(得分:0)

您的问题与the difference between a function and a procedure有些相关。 功能编程语言仅支持函数,因为它们以“功能方式”促进编写代码的范例,意思是,没有side effects,这意味着你应该总是返回一些东西(结果)

这并不意味着你不能用功能编程语言编写非功能代码,例如,Scheme有!set。也就是说 - 由于它是一种非功能性模式,因此不鼓励使用它。