巴拉巴

 找回密码
 立即注册

站内搜索

搜索
热搜: 活动 交友 discuz
查看: 96|回复: 0

代码中“函数”和“方法”到底有什么区别?

[复制链接]

3

主题

7

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2023-1-12 06:37:30 | 显示全部楼层 |阅读模式
我发现一个程序员小伙子竟然不知道构造函数是什么!然后我就打开IDE,指着构造函数问他:“你连这个都不知道?”。小伙子恍然大悟:“哦!原来你说的是初始化方法啊!是的,也叫构造方法!”。
至于什么是函数或者说方法,其实简单地说就是在代码结构中单独构造的,可供内部调用或者外部调用的私有或者公开的逻辑代码的封装。而封装后的代码块就叫作函数或方法,可以有返回值也可以没有返回值。
而构造函数则是一个结构实例的初始化函数,为的是在一个结构实例在被创建时能够快速对自身参数进行赋值等其他操作,不提供返回值。为了不出现混乱,我们暂时叫这个东西为“方法”!
短短两个字的区别,小伙子就没转过来弯。但是,其实这也不怪他,因为我们讨论的是C#,而包括C#、Java在内的很多程序员都管方法就叫方法!但是唯独构造方法,我喜欢叫“构造函数”。原因无他,这个习惯是跟随我的老师来的。我的老师在教我们编程的时候,就喜欢把方法叫作方法,而构造方法叫“构造函数”。
以前为了沟通顺畅,我一般跟前端沟通的时候,都会把前端封装的function叫函数,而跟C#和Java沟通的时候则会称之为方法。
但是,这种方式也不一定管用。比如我跟一些C++程序员对接沟通的时候,发现他们有些会随便叫,有的人叫方法,有的人叫函数。
说到这里,可能有些人已经乱了,到底什么是函数?什么是方法?其实它俩本身在代码结构上并无区别,所以很多人愿意叫它函数或者愿意叫它方法,一个老程序员其实都可以理解到别人在说什么。
但是,如果硬要区分的话,按照我的理解,方法是实例内部提供的代码封装,而函数则是通用代码封装。
这里需要注意两个关键词,一个是“实例”,一个是“通用”!
所谓实例,就是需要进行初始化的对象,就像C#和Java中的new,我们经常说的“new一个对象出来”,其实就是初始化一个对象出来,这个对象就叫作实例或者实体。这种实体中往往需要定义构造函数,当然了,也可以不定义构造函数。C#和Java将这种实例对象的代码结构对象叫做“实体类”。
在实例中封装的方法,通常情况下不能直接调用,需要先创建实例,才能调用方法。但是,这种情况并不是绝对的,比如我在一个实例中封装了一个公开访问的静态方法,此时外部调用这个静态方法,就不需要初始化对象!
而通用,我这里指的是一些不需要被初始化的对象,比如我们常说的“单例模式”,通常情况下,单例的结构对象是静态的,不需要初始化的。
在C#和Java当中,通常以“静态类”的形式存在,而在静态类中定义的方法,必须也是静态的。在静态类中定义的方法,是可以直接调用的!
所以,到这里我应该就说明白了方法和函数的区别,方法实例的封装,而函数是通用的封装,也就是静态的,通常指静态方法。
但是实例的初始化函数有点特别,因为它也不需要被初始化,因为它本身就是一个实例的初始化操作的封装。所以,在某种程度上来说,它既不属于内部方法,又不属于静态方法。但介于实例对象中的非静态方法的“封闭性”,我愿意将构造函数归于函数!
在前端语言当中,因为几乎所有function均不需要实例化,因此,我愿意称之为函数!所以,您找找您使用的编程语言的特点,看看在您的编程语言里,方法应该是叫方法还是叫函数!
但也许我的这种说辞并不能说服您,或者您的态度是“我想叫它啥就是啥”,这其实真无所谓!
这就跟网上说的一个段子一样,北方部分地区人管西红柿叫“柿子”,因为他们知道“柿子”是啥。当南北方(不同编程语言)的人在一起的时候,只要能够理解双方说的话,又有什么关系呢?

来源:http://www.yidianzixun.com/article/0lZrTTGy
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 返回顶部