函数和方法的本质区别

定义

函数概念视频

函数的技术定义:从一组输入到一组可能的输出,其中每个输入与一个输出完全相关。

数学函数: 函数是将一个对象转化为另一个对象的规则。起始对象称为输入,来自称为定义域的集合,返回的对象称为输出,来自称为值域的集合。

  • y=f(x)=x²,"f(x)是一个函数"是不正确的,应该说“f是一个函数”;
  • f(x)只是一个函数符号,这个符号是大数学家欧拉发明的;

计算机函数: 函数是执行特定任务的代码块。

  • 数学的函数表达 y = f(x);
    C语言中函数表达 clolour= Colour(str);
    都是从一组输入到一组可能的输出,其中每个输入与一个输出完全相关。
  • function有函数和功能的意思,在计算机中更偏向功能的含义,是为了实现一个功能;

方法: 方法是包含一系列语句的代码块。

  • 方法定义类可以执行的操作。
  • 方法可接受提供输入数据的参数,并可通过参数返回输出数据。
  • 方法还可以不使用参数而直接返回值。

构造函数: 构造函数是一种方法,其名称与其类型的名称相同。

  • 构造函数是首次创建对象时调用的方法。 它们通常用于初始化对象的数据。

  • 每当创建类或结构时,将会调用其构造函数。 类或结构可能具有采用不同参数的多个构造函数。 使用构造函数,程序员能够设置默认值、限制实例化,并编写灵活易读的代码。

理解

数学函数

  • 假设写出f(x)=x²,这就定义了一个函数f,它会将任何数变为自己的平方。由于你没有说明其定义域或值域,我们不妨假设他们都属于(+∞,-∞),即所有实数的集合。这样就可以将任何实数平方并得到一个实数。例如,f将2变为4,将-1/2变为1/4,将1变为1。最后一个变换根本没有什么变化,但这没问题,因为转变后的对象不需要有别于原始对象。当你写出f(2)=4的时候,这实际上意味着将2变为4。顺便要说的是,f是一个变换规则,而f(x)是把这个变换规则应用于变量x后得到结果。因此,说"f(x)是一个函数"是不正确的,应该说“f是一个函数”。f(x)只是一个函数符号,这个符号是大数学家欧拉发明的;

  • 现在,令g(x)=x²,其定义域仅包含大于或等于零的数(这样的数称为非负数)。它看上去好像和函数f是一样的,但实际不同,因为定义域不同。例如,f(1/2=1/4),但g(-1/2)却是没有定义的。函数g会拒绝非其定义域中的一切。由于g和f有相同的规则,但g的定义域小于f的定义域,因为我们说g是由限制f的定义域产生的。因定义域不同,所以g和f不是一个函数。

  • 一般来说求y和x的函数f(x)写为y=f(x)=x²,已知集合x(+∞,-∞),我们可以得到集合y为(0,+∞)

  • 当x=2时,y=4,我们称4为2的函数值。

  • 我们可以称y和x存在映射关系,也可以称y和x存在函数关系,即转换的规则就是函数;

  • 深入理解,首先先定一个原函数y=f(x)=x²,当新函数y=f(x-1)=(x-1)²时,此时y和x的函数不是f,换一种写法y=g(x)=f(x-1)=(x-1)²,此时y和x的函数g是g(x)=(x-1)²,而原来y和x的函数f是f(x)=x²。

计算机函数

  • 数学的函数表达式 y = f(x);
    C语言中有类似写法 clolour= Colour(str);
    都是从一组输入到一组可能的输出,其中每个输入与一个输出完全相关。
  • function有函数和功能的意思,在计算机中更偏向功能的含义,是为了实现一个功能;

方法和函数的区别

  • MSDN官方定义,方法是包含一系列语句的代码块,也就是组合在一起的代码。
  • 对计算机而言函数是执行特定任务的代码块,也是组合在一起的代码,外加特定任务。
  • 函数和方法这两者定义有何区别?其实二者没有区别,只是解释说明有一些区别,但二者本质上是相同,都是为了实现某一个功能,没人会不认同吧?
  • 那么我们再分析一下,包含一系列语句的代码块可以处理特定任务吗?我相信你可以用方法实现这样的特定功能。反过来说执行特定任务的代码块是一系列语句吗?同样也是一系列语句,为啥非得有区别,有不同?函数可以当做是方法,方法也可以当做是函数了,这还有啥区别。
  • 非要咬文嚼字的话,特定任务有规定吗?特定任务还不就是人为定义的一些功能,可以用方法实现,可以用函数实现,写法也差不多,为什么方法和函数就有区别?
  • 只是不同的语言规定的名字不同,就好比苹果,中文叫苹果,英文叫apple。
  • 举个例子,倘若我创建一门语言叫CC#语言,定义一个功能,转换是为了实现某一个功能的代码块,是不是又要有人将功能、函数、方法进行区别,要我说区别就是各个语言定义的不同,其实就是一个东西。
  • 再举个例子,我跟你说一件事,乱七八糟说一通,你理解了,你把条理理清了跟我说,问我是不是这样的事,这难道还能是两件事,除非是客观存在的实体,概念上有一些偏差是正常的,看看这个概念的本质才对。
  • 接下来我们再看看构造函数

构造函数

  • MSDN官方定义,构造函数是一种方法,其名称与其类型的名称相同。
  • MSDN都说构造函数是一种方法了,只是一种特殊的方法,名称和类名相同,这是不是为了实现某一特定功能?或者说执行特定任务?
  • 构造函数可以参考属性进行理解(属性是类中可以像类中的字段一样访问的方法),C#将构造函数和属性进行独立定义,是为了更好的规范语言进行的优化,可以看作为C#内置的方法,使用起来更为方便。
  • 从这边来看,官方都承认函数可以是方法了。

释疑

来自stackoverflow网站:方法和函数有什么区别?

函数是按名称调用的代码。它可以传递数据以操作(即参数),并可选择返回数据(返回值),传递到函数的所有数据均明确传递。
    
方法是一个代码,由与对象关联的名称调用。在大多数方面,它与函数相同,但两个关键差异除外:
    
1. 方法是含蓄地传递它所称的对象。
2. 方法能够对类中包含的数据操作(记住对象是类的实例 - 类是定义,对象是该数据的实例)。

看到这边函数和方法的定义和我这边说的是不一样的,如果按这边的定义,那么他这个说法完全是没有问题的,我是赞成的,一开始看到这个的时候我也是这么认为的:方法和对象绑定,函数独立于对象。

基于这个观点,我想从C#中找出函数,遗憾的是我找不出来,哪里出了问题?C#是面向对象编程的语言,方法都是写在对象中的,和对象相关联,但是MSDN官方既然有构造函数一说,但我没有从这个观点中看出构造函数是函数,反而还是觉得是一种方法,而MSDN官方更是肯定了构造函数是一种方法,就把我绕迷糊了,我又重新去查阅资料,寻找函数最初的定义。

最初的函数是来自数学函数y=f(x),进而衍伸出计算机函数num= Number(number);一个是数学为了求值,一个是计算机为了实现功能;而function既有函数又有功能一说,我是这么想的因函数是最初的翻译,后来估计顺口了估计就懒得改了。也就是说数学函数和计算机函数相似,但并不相同,数学函数是函数,计算机函数是功能。

既然说计算机函数是功能,那么我们就可以重新看一下此处的函数和方法的定义了,倘若我将此处函数换成功能再来看看。

功能:是按名称调用的代码。它可以传递数据以操作(即参数),并可选择返回数据(返回值),传递到函数的所有数据均明确传递。

这样看是不是比函数更好理解,我们再查查日常生活中功能和方法是什么意思。

方法:一般是指为获得某种东西或达到某种目的而采取的手段与行为方式。
功能:是指事物或方法所发挥的有利作用。

上面这是百度的百科的解释,我相信很多人都知道日常生活中功能和方法是什么,但不知道怎么形容,这其实就跟计算机中计算机函数和方法的定义一样,不同语言定义不同,不同人定义不同,不同地方定义不同,但实际上都说的是同一个概念,这是抽象的,可能这就是只可意会不可言传,你知道这是什么,但说不出来这是什么。

再返回我们计算机中的函数和方法,要进行区别对比肯定需要知道他们的定义,这个定义是从哪来的,谁定义的,是不是正确的,这些都要进行判断,方法既然是C#中的,那么我们就看C#官方定义,这没疑义吧,那么我们再回头看看官方给的定义,方法是包含一系列语句的代码块。既然官方没有将方法定义为需要和对象关联,这边给的定义就是错误的。既然定义就错了,那么这个观点本就错了。

我再说说我自己的观点,计算机中的函数是由数学函数衍伸过来的,并不是数学函数,英文Fuction因函数翻译在前被广泛使用,后续难以纠正为功能的意思,所以现在对计算机而言说的函数实际是功能的意思,而在计算机中方法和功能的定义本质上是一样的,都是为了实现某个目的,实现这个目的都需要通过组合代码。

根据我的理解,对这种代码块,换一种说法进行概念的定义。

中文定义:通过组合代码实现功能的方法。
英文翻译:The method of implementing a function by combining code.

我可以取Function命名,也可以取方法Method命名进行定义。

其实我更偏向取Function命名,官方取了Method定义,官方这么命名也是有一些道理的,可能是为了区分语言不同,也可能是为了区分函数和功能的翻译,并不是为了区别函数和方法。

这里若是取Function命名估计还是会被翻译成函数,不会翻译成功能,不管它怎么翻译,它还是它,不会因为命名的原因就不同了。

所以函数也好,方法也好,其实它就是它,就可以理解为就是一样的,倘若你对函数和方法的定义是stackoverflow网站上那种,那就是不一样的,但实际这是错误的,倘若你有另外的理解,你需要让你的定义站住脚,再去对比区别。

总结

  • 函数就是方法;
  • 此函数(计算机函数)非彼函数(数学函数);
  • Function对计算机而言应翻译为功能;
  • 程序员相互间的交流而言所说的函数就是功能;
  • 对C#而言只说方法不说函数;

关于笔者

我是旋转De陀螺,笔者将持续分享Revit二次开发思路及入门经验,感谢点赞、关注、留言、一键三连,获取更多分享。

  • 微信公众号: BIM开发
  • QQ群: 1009105743
  • CSDN: 旋转De陀螺
  • 知乎: 旋转De陀螺
    在这里插入图片描述
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值