免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5178 | 回复: 3
打印 上一主题 下一主题

function, routine, subroutine,method, procedure之间有何异同? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-31 13:08 |只看该作者 |倒序浏览
看书经常看到function, routine, subroutine,method, procedure这些概念,我不太清楚之间的异同.

c++的member function在java叫method,以强调其OO属性.

它们之间还有其他区别吗?我现在基本上都把它们理解成函数.

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2008-12-31 13:22 |只看该作者
原帖由 lipingtababa 于 2008-12-31 13:08 发表
看书经常看到function, routine, subroutine,method, procedure这些概念,我不太清楚之间的异同.

c++的member function在java叫method,以强调其OO属性.

它们之间还有其他区别吗?我现在基本上都把它们理解成 ...


在Pascal里面function是有返回值的,procedure没有返回值
在Fortran里面function是有返回值的,subroutine没有返回值
method一般是指对象的成员函数吧

论坛徽章:
0
3 [报告]
发表于 2008-12-31 14:00 |只看该作者
procedure >= subroutine > function

这个大致的顺序是按照词的适用范围来排的。越靠前,这个词的适用范围就越广。

先说 method,method 主要适用于面向对象的“方法”。

Subroutine 主要在程序设计语言里用。虽然它和 procedure 是同一个意思,但 procedure 这个词的限制更少。
Procedure 的应用范围可广了去了,RPC 就是所谓的“Remote Procedure Call”,远程过程调用。
Function 可以在数学上用,也适用计算机科学。(有人把计算机科学归为应用数学的一个分支,我个人不十分赞同。)

大体上是这样,具体的区别主要取决于适用语言的上下文。

Function 和 subroutine/procedure 的区别在于:前者一般需要指定返回值(如不少 C 语言编译器都会隐含声明 extern 并且返回 int 类型,C 语言子程序即使不返回任何有意义的值也必须声明一个 void 类型,C 语言里的过程都是 functions),而后者可能不具有返回值(例如,BASIC 语言当中可以写 SUB ... END SUB,SUB 正是 SUBroutine 的缩写)。

Routine 常指那些例行程序,比如 BIOS 当中的程序就属于 routine。你一开机,BIOS 就工作了。MS-DOS 正是依赖 BIOS 才得以生存。有些引导程序无法读取序号 1024 以上柱面的数据,但进入保护模式操作系统就可以了。想想这是为什么?因为引导管理器调用的是 BIOS 接口,而进入操作系统之后操作系统直接用驱动程序通过总线与硬件通讯,等于是跳过了 BIOS。BIOS 有这个限制,而总线没有。

不必太在意 subroutine 的前缀“sub”,虽然从构词法上分析 subroutine = sub + routine,但二者的意思上的区别早已不在于前缀 sub。

论坛徽章:
0
4 [报告]
发表于 2008-12-31 14:44 |只看该作者
多谢楼上这么详细的解答!

我有这疑问是看<Design pattern explained>里第七章的一句话,这一章是讲Adapter模式的.
"
You have wanted to use a subroutine or a method that someone else has written because it perform some function that you need
"

这里的function应该不是函数的意思,是功能的意思,但是为什么要并列subroutine和method呢?
是因为subroutine没有返回值而method要有返回值吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP