不管是面向过程还是面向对象。软件开发中,我们都不能脱离“函数”。
什么是函数?不同的人有不同的理解。下面我就谈谈我的理解:
y=f(x)这就是函数。x是参数,y是函数的返回结果,f是函数名。软件开发中,我们也是这样用的。如果没有x,那就是无参函数;没有f,那就是匿名函数;没有y,那就是带副作用的函数(函数式编程中,认为返回void的函数是带副作用的函数)。如果,x,f,y都没有,那就是个空函数。
面向对象中,站在对象自身的角度,一个对象拥有了函数才拥有了行为。站在总体系统的角度,一个对象的函数就是他能够提供的服务。一个没有函数的对象,往往代表某一种值,所以称为值对象,这种对象只拥有getter/setter方法。之所以没有公开属性,而是提供getter/setter方法,一个比较重要的原因是可以将对于对象属性的查询和修改权限分离。不可小看getter/setter方法,因为它代表了函数的两种基本类型:一类函数是用于改变状态的setter型函数,另一类是用于查询状态的getter型函数。一个没有属性,只有函数的对象,往往是对外提供的一些工具对象,无状态的对象只提供服务,而且不会有多线程并发问题。真是广大人民群众喜闻乐见的一种方式,可是又被面向对象的大师批判为打着面向对象的旗号干着面向过程的勾当。由此,面向对象的函数式编程,成了现在比较热的话题。很多新兴的语言也都基于此发展起来。
函数式编程将函数视为第一类对象。他们是一等公民,拥有千变万化的身份。它可以是服务,可以是参数,甚至可以是返回值。这种编程方式以去掉所有变量,去掉函数副作用为目标。为未来的多核计算,云计算做准备。
其实这些概念早在很久以前就已经存在了。但是历史就是这样螺旋上升式的发展,我们总能在最新的技术中看到历史的影子。
关于函数的话题,先胡说到这吧。回家了!!~~~~~
什么是函数?不同的人有不同的理解。下面我就谈谈我的理解:
y=f(x)这就是函数。x是参数,y是函数的返回结果,f是函数名。软件开发中,我们也是这样用的。如果没有x,那就是无参函数;没有f,那就是匿名函数;没有y,那就是带副作用的函数(函数式编程中,认为返回void的函数是带副作用的函数)。如果,x,f,y都没有,那就是个空函数。
面向对象中,站在对象自身的角度,一个对象拥有了函数才拥有了行为。站在总体系统的角度,一个对象的函数就是他能够提供的服务。一个没有函数的对象,往往代表某一种值,所以称为值对象,这种对象只拥有getter/setter方法。之所以没有公开属性,而是提供getter/setter方法,一个比较重要的原因是可以将对于对象属性的查询和修改权限分离。不可小看getter/setter方法,因为它代表了函数的两种基本类型:一类函数是用于改变状态的setter型函数,另一类是用于查询状态的getter型函数。一个没有属性,只有函数的对象,往往是对外提供的一些工具对象,无状态的对象只提供服务,而且不会有多线程并发问题。真是广大人民群众喜闻乐见的一种方式,可是又被面向对象的大师批判为打着面向对象的旗号干着面向过程的勾当。由此,面向对象的函数式编程,成了现在比较热的话题。很多新兴的语言也都基于此发展起来。
函数式编程将函数视为第一类对象。他们是一等公民,拥有千变万化的身份。它可以是服务,可以是参数,甚至可以是返回值。这种编程方式以去掉所有变量,去掉函数副作用为目标。为未来的多核计算,云计算做准备。
其实这些概念早在很久以前就已经存在了。但是历史就是这样螺旋上升式的发展,我们总能在最新的技术中看到历史的影子。
关于函数的话题,先胡说到这吧。回家了!!~~~~~