当前位置:  开发笔记 > 编程语言 > 正文

"功能"和"程序"有什么区别?

如何解决《"功能"和"程序"有什么区别?》经验,为你挑选了7个好方法。

一般来说,我们都听说过编程语言中的函数过程.但是,我发现我几乎可以互换地使用这些术语(这可能是非常错误的).

所以,我的问题是:

它们的功能,用途和用途有何不同?

一个例子将不胜感激.



1> Toon Krijthe..:

函数返回一个值,一个过程只执行命令.

名称功能来自数学.它用于根据输入计算值.

过程是一组可以按顺序执行的命令.

在大多数编程语言中,甚至函数都可以有一组命令.因此,差异仅在于返回值部分.

但是如果你想保持一个功能干净,(只看功能语言),你需要确保一个功能没有副作用.


在pascal中,过程没有return语句,只有函数有.必须是文本中的错误.但是,一个过程可以有一个"exit"语句,它可以作为没有参数的"return"语句,这意味着没有返回值.

2> jpalecek..:

这取决于具体情况.

在类似Pascal的语言中,函数和过程是不同的实体,不同的是它们是否返回值.他们表现得与众不同.语言语法(例如,过程调用表单语句;您不能在表达式中使用过程调用,而函数调用不会形成语句,您必须在其他语句中使用它们).因此,Pascal-bred程序员区分它们.

在类C语言和许多其他当代语言中,这种区别已经消失; 在静态类型语言中,过程只是具有有趣返回类型的函数.这可能是他们互换使用的原因.

在函数式语言中,通常没有程序这样的东西 - 一切都是函数.



3> 小智..:

C中的示例:

// function
int square( int n ) {
   return n * n;
}

// procedure
void display( int n ) {
   printf( "The value is %d", n );
}

虽然你应该注意C标准不讨论程序,只讨论函数.


答案没有错,它是纯函数和过程之间差异的一个很好的例子.K&R将每个子程序称为"函数"以保持简单,但是具有副作用的子程序实际上是一个"程序",而不是数学规范意义上的"函数".如果将实际函数与过程区分开来,C可能是更好的语言,这有助于静态分析,性能优化和并行化.
_... C标准不讨论程序,只讨论函数.这是因为它只有函数.一个什么都不返回的函数是一个`void function`.Kernighan&Ritchie Ch 1.7:"在C中,函数等同于Fortran中的子程序或函数,或Pascal中的过程或函数." 换句话说......这个答案是错误的.

4> HS...:

通常,过程是一系列指令.
函数可以相同,但通常返回结果.



5> sharptooth..:

有一个术语子程序子程序,它代表可以从不同位置调用的参数化代码段.

功能和程序是这些的实现.通常函数返回值和过程不返回任何内容.



6> 小智..:

基本差异

Function必须返回一个值,但在Stored Procedures中它是可选的:一个过程可以返回0或n值.

函数只能有输入参数,而过程可以有输入/输出参数.

对于函数,必须采用一个输入参数,但存储过程可能需要0到n个输入参数.

可以从过程调用函数,而无法从函数调用过程.

高级差异

异常可以通过过程中的try-catch块来处理,而try-catch块不能在Function中使用.

我们可以在一个过程中进行事务管理,而在一个函数中我们不能.

在SQL中:

程序允许SELECT以及DML( ,INSERT,UPDATE)DELETE在其声明,而功能只允许SELECT声明它.

程序不能在SELECT语句中使用,而函数可以嵌入SELECT语句中.

存储过程不能在WHERE(或一个HAVING或多个SELECT)块中的任何位置的SQL语句中使用,而函数可以.

返回表的函数可以视为另一个Rowset.这可以在JOIN与其他表的块中使用.

内联函数可以被视为带参数的视图,可以在JOIN块和其他Rowset操作中使用.


这个问题是针对特定语言的,而问题与语言无关。此处的陈述在一般情况下并不都是正确的,但是如果您弄清楚要为其声明的语言或环境,将很有帮助。

7> Ingo..:

更严格的是,如果x = y,函数f服从f(x)= f(y)的属性,即每次用相同的参数调用它时计算相同的结果(因此它不会改变状态系统.)

因此,rand()或print("Hello")等不是函数而是程序.虽然sqrt(2.0)应该是一个函数:没有可观察到的效果或状态改变,无论多少次调用它,它总是返回1.41和一些.


这种用法在"功能"编程的上下文中是相关的.请注意,调用其子程序"函数"的许多(通常是命令性的)语言不需要此属性.
推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有