【问题标题】:Do Procedural languages have functions that return values?过程语言有返回值的函数吗?
【发布时间】:2016-11-30 12:13:35
【问题描述】:

我曾经在大学(英国大学)使用 VB.NET 进行编码,那里有两种封装代码的方法:通过方法和函数。一个方法只会执行一些代码;另一方面,函数也具有返回值的优点。

现在我正在为 Javascript 课程使用程序风格进行编码。

我的问题是,过程语言中的函数是否能够返回值?或者这只是一个面向对象的特性?还是这是所有语言的通用功能?

【问题讨论】:

  • 简短回答:是的。长答案:是但不一定:) 所有具有函数的语言都可以返回值。很抱歉你开始学习 VB,是时候忘掉一切了
  • 团结兄弟。至少我可以跟踪人们的 IP 地址。谢谢。
  • JavaScript 是一种面向对象的语言。
  • @昆汀。不完全是。它是一种动态语言。它不是面向对象或程序的。然而,它对这些问题有自己的解决方案,并且可以模仿 OO 和过程特性。例如。它支持原型继承,但根据一些严格的定义,它不是 OO。尽管有些人对 C++ 也有同样的看法。
  • 是OO。这是程序性的。它是功能性的。它是多范式的。

标签: javascript function return procedural


【解决方案1】:

能够从调用中返回值与程序/功能/OOP/你有什么完全正交。

Javascript 确实支持从调用中返回值,因为它是一种非常实用的语言,而且不返回值的函数会相当尴尬。大多数其他语言允许你做同样的事情。事实上,Javascript 是一种多范式语言 - 您可以看到它被用于许多不同的角色,下至 查询。它允许您很好地混合和匹配样式,或者选择您最喜欢的方法并坚持下去。

没有所谓的“程序风格”。就像没有“功能风格”或“OOP 风格”或“关系风格”一样。这些只是非常宽泛的标签,没有客观背景。想想你需要做什么,然后想办法去做。像这样的标签很重要的唯一情况是当有人想强加给你一种特定的风格时——在这种情况下,问问他们到底是什么意思——我们帮不了你,这在他们的脑海里。

例如,用于表示“无结构化构造”的程序代码。没有函数、过程,甚至没有 if 和循环。今天,大多数人实际上使用术语“过程”来表示过去的“结构编程”——过程和函数,具有“高级”结构,如结构化分支和循环,以及大量的全局变量(尽管希望你不再通过全局变量传递参数和返回值 - YMMV :))。

“面向对象编程”曾经意味着“来回发送消息”——开创性的 OOP 论文甚至没有返回值,如果您需要响应,您应该只听“响应消息”。毕竟,目标对象可能会更晚或根本不会响应(例如,当它获得 I/O 响应时)。它绝对没有任何形式的静态类型(有人可能会说它根本没有类型的概念)——相反,你有监听消息的对象。当消息到来时,对象想出如何处理它——所有对象都是动态的。唯一的公共接口是那些消息——其他一切都只是对象的内部细节。不出所料,分布式系统正在重新点燃此类方法的流行,因为该模型本质上是异步的,而且是松散耦合的。

当然,Javascript 不支持类。但是类与 OOP 完全正交——它们只是在一种语言中实现类型和(更重要的是)子类型的一种方式。原型并不比类好或差;函数并不比类好或差。这三种方法都是 OOP(和一般编程)完全有效的方法,就像完全忽略打字一样,Javascript 大多是这样做的。虽然您确实有办法跟踪对象的类型,但最终只有对象的实际实例才是真正重要的。

这些术语大多是无用的,最常用于嘲笑你不喜欢的风格:) 在最好的情况下,它们代表了过去某个时间对该术语的给定解释在某些圈子中很流行 - 确保传达给定术语的实际含义。 “程序”可能意味着“不要使用对象”、“不要使用函数”、“对所有事物使用全局变量”,以及任何数量的事物。我们无法说出你的主管/老师/老板认为什么是“程序性的”——只有他可以。

【讨论】:

猜你喜欢
  • 2012-02-02
  • 1970-01-01
  • 2011-06-06
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多