为什么Swift中的函数的第一个参数名称在调用时不需要?

为什么Swift中的函数的第一个参数名称在调用时不需要?,第1张

概述我正在学习 Swift,我发现很奇怪,为什么在调用函数时,第一个参数的名称不是必需的. func say(greeting: String, toName: String) { print("\greeting), \(toName)!")}say("Goodbye", toName: "Hollywood") // <-- why is there no "greeting" re 我正在学习 Swift,我发现很奇怪,为什么在调用函数时,第一个参数的名称不是必需的.
func say(greeting: String,toname: String) {    print("\greeting),\(toname)!")}say("Goodbye",toname: "Hollywood") // <-- why is there no "greeting" required?
正如其他人所说,这是一个源于Objective-C的风格问题.

要理解为什么有人想要这种风格,考虑修改你的例子:

func say(greeting: String) {    print("\(greeting)")}

你会这样称呼:

say("Hello!")

当你看着你使用的名字时,可以说有些信息丢失了.使用一个名为say()的函数,你可以合理地认为这是一个让你说出任何东西的功能.但是,当您看到参数名称时,很明显这是一个用于表达问候语的功能,而不是说任何内容.

所以Objective-C喜欢你这样写:

func sayGreeting(greeting: String) {    print("\(greeting)")}

你会这样称呼:

sayGreeting("Hello!")

现在很清楚,你在说一个问候语.换句话说,功能名称本身更清楚地描述你正在做什么.因为这个原因,sayGreeting(“Hello!”)比较容易说(greeting:“Hello!”),因为函数的关键是用它的名称来描述,而不是被降级到一个参数名,并赋予第二重要性.

但是,这个理由只能在第一个论证中有效.假设你想添加一个名字,就像你所做的一样.在C语言中,根本没有外部参数名称,您可以写:

voID sayGreetingToname(char * greeting,char * person) { ...

并称之为:

sayGreetingToname("Hello","Dave");

这是可以的,但是当你有超载的功能或默认值时,它们很快就会崩溃,这些都不是C中的.如果你想写:

func sayGreetingToname(greeting: String,name: String? = nil) {    if let name = name {        print("\(greeting),\(name)!")    }    else {        print("\(greeting)!")    }}

然后调用它:

sayGreetingToname("Hello","Dave")

看起来基本上可以,但是:

sayGreetingToname("Hello")

看起来很可笑,因为功能名称说你提供了一个名字,但你不是.

所以,如果你写:

func sayGreeting(greeting: String,toname: String? = nil) {    if let name = toname {        print("\(greeting),\(name)!")    }    else {        print("\(greeting)!")    }}

你可以用两种方式来称呼它:

sayGreeting("Hello")sayGreeting("Hello",toname: "Dave")

一切看起来都很清晰.

总而言之,这种写作风格的想法是,函数名称本身应该包含第一个参数的名称包含的任何信息,但是将其扩展到后续的参数是没有意义的.所以默认情况下,第一个没有外部名称,但其余的.这个功能全部是说一个问候语,所以应该是功能的名称固有的(因此不是通过坚持第一个参数的外部名称重复),但它可能是也可能不是说到一个特定的名称,以便信息不应该在函数名称中.

它还使您能够基本上读取函数调用,就像它是英文,因为名称和参数现在大致按照正确的顺序执行:

sayGreeting("Hello",toname: "Dave")

Say (the) greeting,“Hello”,to (the person with) name “Dave”

这是一个很好的风格,一旦你习惯了它.

总结

以上是内存溢出为你收集整理的为什么Swift中的函数的第一个参数名称在调用时不需要?全部内容,希望文章能够帮你解决为什么Swift中的函数的第一个参数名称在调用时不需要?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1045087.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存