一、定义
把程序分解成一系列函数,每个函数接收输入参数并返回输出结果,强调函数的纯粹性,即相同的输入必然产生相同的输出,且不产生可观察的副作用(例如不修改全局变量、不进行 I/O 操作等)。
二、优缺点
1.优点:
(1)可维护性高。体现在函数行为的确定性和模块独立性。面向函数编程强调使用纯函数,相同的输入总是产生相同的输出,这使得代码的行为更容易预测;函数是独立的逻辑单元,只依赖于输入参数,不依赖于外部状态。
(2)更易进行并发编程。体现在无共享状态和函数并行执行。面向函数编程中,由于数据不可变且函数没有副作用,不存在多个线程同时访问和修改共享数据的问题,因此在并发环境下不会出现竞态条件和死锁等问题;纯函数可以在不同的线程或进程中并行执行,因为它们之间没有相互依赖和干扰。
(3)代码复用性更好。体现在函数通用性和函数组合性。面向函数编程中的函数通常具有较高的通用性,可以被多个不同的模块或程序使用。只要输入参数的类型和格式符合要求,函数就可以正确地工作;面向函数编程鼓励将简单的函数组合成复杂的函数,这种组合方式可以在不同的场景中重复使用。
2.缺点
(1)表达能力受限。对于一些复杂的现实世界对象,面向函数编程可能难以直接进行建模;面向函数编程中,数据和操作数据的函数是分离的,虽然可以通过模块等方式来实现一定程度的封装,但相比面向对象编程中类的封装性,还是略显不足。
(2)性能开销。面向函数编程中,函数的调用可能会带来一定的性能开销,特别是在频繁调用函数的情况下。使用不可变数据结构时,每次修改数据都需要创建一个新的副本,这可能会占用更多的内存空间,并且在处理大规模数据时,可能会导致性能下降。
三、示例代码
通过代码来进一步了解面向函数编程。
1.基本结构:func 为函数关键字 execFun1为函数名称
2.函数中的参数:命名参数和非命名参数
2.1命名参数和非命名参数的调用:
3.带有返回值
4.参数中既有非命名参数和命名参数时,应该注意的问题:*命名参数的后面不能有非命名参数。
5.递归函数:自己调用自己。分为两个阶段:1.调用阶段;2.返回阶段。
运行结果:
6.同名变量:按照就近原则
运行结果:
7.方法重载:方法名相同,参数列表不同,与返回值类型无关,具体调用哪个参数,由参数列表决定。
运行结果:
8.将函数赋值给一个变量
运行结果:
9.一个函数可以作为另一个函数的参数
运行结果:
10.函数嵌套,函数里面也可以再定义函数
运行结果:
四、全局变量和局部变量
1.全局变量:在函数外部、整个程序的顶层定义的变量称为全局变量。全局变量的作用域是整个程序,也就是说,在程序的任何函数内部都可以访问全局变量。
2.局部变量:在函数内部或代码块中定义的变量称为局部变量。它们的作用域仅限于定义它们的函数或代码块,也就是说,在函数或代码块外部,无法访问这些局部变量。