提问人:Andy Lin 提问时间:10/13/2019 最后编辑:Andy Lin 更新时间:10/17/2019 访问量:215
罗伯特·马丁(Robert Martin)所说的“只有功能才能从早期的编程时代生存下来,而不是例行公事”是什么意思[已关闭]
What does Robert Martin mean by “Only function survive from early programming days, not routine” [closed]
问:
摘自 Robert Martin 撰写的《Clean Code》一书:
在编程的早期,我们编写了例程系统 和子例程。然后,在 Fortran 和 PL/1 时代,我们组成了我们的 程序、子程序和函数系统。如今,只有 功能从早期就幸存下来。
在我看来,这段摘录是在告诉人们,例行公事是一件坏事,并且正在走出编程时代。
我做了一些搜索,发现 Fortran 中的子程序和函数之间的区别是:
- 子例程对输入变量执行一些操作,并作为 调用子例程的结果,输入变量被修改。
- 函数将一个或多个参数作为输入,并返回单个 产值。
虽然我没有写 Fortran 而只写了 C,但 C 支持与 和 相同的结构。int foo(int x)
void foo(int* x)
引起我注意的是,我从未听说过 C 语言中的不良约定,所以我想弄清楚 Robert Martin 的这段摘录是什么意思。void foo(int* x)
还有一个问题。从 OOP 的角度来看,如果我想用 C 语言模拟 OOP,例程比函数更好吗?
答:
1赞
Vladimir F Героям слава
10/13/2019
#1
一旦你允许函数不返回任何内容或丢弃函数结果,拥有单独的语言结构基本上是多余的。C 或 C++ 函数实际上就像一个子例程,它看起来就像一个函数并使用相同的关键字。因此,您节省了一个关键字的需要,并且语言更加统一。C是当今实践中使用的大多数语言语法的起源。void
评论
0赞
francescalus
10/13/2019
虽然我同意删除关键字在这里是一种效果,但在某种程度上,在纯函数式语言之外,对“子程序是一个没有结果的函数”的简化导致了其他地方的相应复杂性。例如,在 Fortran 术语中,“函数引用是主要函数”应改为“对返回结果的函数的引用是主要函数”或“不返回结果的函数只能用作独立语句”。call
0赞
Vladimir F Героям слава
10/13/2019
我认为关键字只是 Fortran 源代码形式语法规则为消除歧义而必需的工件。另外,我真的不是在添加 Fortran,而是在添加 C 系列语言。call
评论
check(x)
x
check(x)
void