函数式编程 - 函数概览
在编程术语中,函数是执行特定任务的语句块。 函数接受数据、处理数据并返回结果。 编写函数主要是为了支持可重用性的概念。 函数一旦编写完毕,就可以轻松调用,而不必一次又一次地编写相同的代码。
不同的函数式语言使用不同的语法来编写函数。
编写函数的先决条件
在编写函数之前,程序员必须了解以下几点 −
程序员应该知道函数的用途。
程序员应该了解函数的算法。
程序员应该知道函数数据变量及其目标。
用户调用的程序员应该知道函数的数据。
函数的流程控制
当一个函数被"调用"时,程序"转移"控制权来执行该函数,其"控制流程"如下 −
程序到达包含"函数调用"的语句。
执行函数内的第一行。
函数内的所有语句都是从上到下执行的。
当函数执行成功时,控制返回到它开始的语句。
函数计算和返回的任何数据都将用来代替原始代码行中的函数。
函数的语法
函数的一般语法如下所示 −
returnType functionName(type1 argument1, type2 argument2, . . . ) { // function body }
在 C++ 中定义函数
让我们通过一个例子来了解如何在面向对象的编程语言 C++ 中定义函数。 以下代码具有一个将两个数字相加并提供其结果作为输出的函数。
#include <stdio.h> int addNum(int a, int b); // function prototype int main() { int sum; sum = addNum(5,6); // function call printf("sum = %d",sum); return 0; } int addNum (int a,int b) { // function definition int result; result = a + b; return result; // return statement }
它将产生以下输出 −
Sum = 11
在 Erlang 中定义函数
让我们看看如何在函数式编程语言 Erlang 中定义相同的函数。
-module(helloworld). -export([add/2,start/0]). add(A,B) -> C = A + B, io:fwrite("~w~n",[C]). start() -> add(5,6).
它将产生以下输出 −
11
函数原型
函数原型是函数的声明,包括返回类型、函数名称和参数列表。 它类似于没有函数体的函数定义。
例如 − 有些编程语言支持函数原型,有些则不支持。
在C++中,我们可以像这样制作函数"sum"的函数原型 −
int sum(int a, int b)
注意 − Python、Erlang等编程语言不支持函数原型,我们需要声明完整的函数。
函数原型有什么用?
函数原型是编译器在调用函数时使用的。 编译器使用它来确保正确的返回类型、传入正确的参数列表以及它们的返回类型是正确的。
函数签名
函数签名与函数原型类似,其中参数的数量、参数的数据类型和出现的顺序应该相似。 例如 −
void Sum(int a, int b, int c); // function 1 void Sum(float a, float b, float c); // function 2 void Sum(float a, float b, float c); // function 3
Function1 和 Function2 具有不同的签名。 Function2 和 Function3 具有相同的签名。
注意 − 我们将在后续章节中讨论的函数重载和函数重写都是基于函数签名的概念。
当一个类具有多个具有相同名称但不同签名的函数时,函数重载是可能的。
当派生类函数与其基类具有相同的名称和签名时,可以进行函数重写。