开始Swift编程第5部分-函数,枚举和作用域

在上一篇文章中,我们介绍了if语句,while循环和for-in循环(通常仅称为for循环)。

开始进行Swift编程第4部分-决策和循环
在上一篇文章中,我们介绍了运算符,可选值和nil值。 medium.com

其中一些if语句非常大,如果我们想在该if语句中做多个事情怎么办? 它们将变得庞大且难以阅读。 这就是今天的全部。 让我们潜入。

功能

实际上,您可以在Swift中编写任何功能的程序。 我敢肯定,来自其他语言的人们正在思考,哦,是的! 事实是您真的不知道。 我们将在作用域部分中对此进行更多讨论,但是在全局范围内编写的代码将用作程序的入口点 。 入口点只是一种说法,这是程序启动时首先运行的代码。 很容易,对吧?

我们编写函数是因为它破坏了我们的代码,使其更易于阅读。 我们可以遵循一些编程原则,这些原则实际上只是为了使您的工作更轻松的准则,虽然列表并不详尽,但是足以让您思考如何使代码变得更好:

  • 关注点分离 —如果您对字符串中的字母进行计数然后将两个数字相加,则可以采用这两个单独的函数,一个函数对字符串中的字母进行计数,另一个函数对数字进行累加。
  • 单一责任原则 -概括为以下短语:每件事都有一份工作,每件事都做得很好。
  • 不要重复自己(DRY) -这很明显,为什么要多次输入相同的文本? 为什么要多次输入相同的文本? 这让您发疯,知道我曾经做过,如果您是A型性格,但是当A型开发人员看到一遍又一遍写相同的东西时,他们就会发疯,这是个坏消息,几乎每个阅读您的代码的开发人员都在使用当他们这样做时,请输入心态。

你明白了吗? 好! 我们将在以后再讲更多,但是现在,这是一个很好的基础。

让我们开始向您展示一个用Swift编写的函数的示例。 语法可能看起来很奇怪,但我们将介绍所有内容。

我知道这乍看起来可能会令人困惑,但让我们来看一下。

首先,我们使用func关键字定义一个函数。 这让编译器知道,嘿,我希望下一个代码可重复使用。

接下来,我们给函数命名为addTwoNumbers

函数名称后带有括号,如果没有参数,则将其保留为空:
func doStuff() { /* doing stuff */ }
如果有参数(可以传递给函数的东西),则将它们包括在声明中。 在上面的示例中,我们确实有参数,确切地说是两个,我们有numberotherNumber 。 这些在示例中不是很具描述性,但应该是

您可能会注意到,我使用了number firstNumberotherNumber secondNumbernumberotherNumber是我们在以后的调用中将引用这些参数的内容,因此我们知道我们要为哪个参数设置值。 firstNumbersecondNumber是将在函数主体中使用的内容 。 函数的主体是在花括号{ /* this is the body */ }之间的所有代码。

接下来,我们有零件number firstNumber: Int Int是我们在调用此函数时期望使用的类型。 通过使用number firstNumber: Int我们是说第一个参数的名称是number ,我们将创建用于该函数的变量名为firstNumber并且其类型为IntotherNumber secondNumber: Int同样适用。

最后,在括号之外,最后还有这种奇怪的语法。
-> Int

这只是在函数结束时,我们应该返回一个整数值。 Return只是说退出此函数并返回return右边的任何值的一种方式。 在上面的示例中,我们创建了一个名为functionResult的常量,该常量是firstNumbersecondNumber和,然后return functionResult

当我们调用函数时,实际上使用的是var result = ...因为我们需要记住从函数返回的常量或变量中的值。 如果我们的函数不应该返回任何东西,那么我们会得到一个错误;如果我们的函数应该返回一个东西,而我们没有捕获到该值,那么我们会得到一个奇怪的警告result of is unused, consider using _ =

_ =这是什么? 当您根本不在乎时,会使用下划线。 您要么不在乎返回的值是什么,要么不在乎函数中的第一个变量使用参数名称。

没错,您可以省略第一个变量的参数名称。 让我们看看它的外观:

看看效果如何? 由于我们只是返回总和而不执行任何其他逻辑,因此我们可以使用
return firstNumber + secondNumber
既然我们谈论了描述性名称,那么就可以对其进行一些修复:

你看到那里发生了什么吗? firstNumber使用下划线,因此我们只有一个空白的占位符,可以在其中将第一个数字插入参数中。 secondNumber没有参数名称,因此默认为变量名称。 最重要的是,这对我们仍然有意义。 只是为了涵盖所有基础,这是一个测验。 如果我这样做了:

  func add(firstNumber firstNumber:Int,to secondNumber:Int)-> Int {...} 

我将如何调用该函数? 读起来会像英语吗? 还是法语? 还是您决定以其他任何编程语言编写代码(只要在语法上仍然正确)?

如果我授予您对程序中一个文件的读/写访问权限,而您尝试调用此函数,您是否需要猜测它的作用?

我不会说这是一个完美的示例,但是您应该努力做到代码清晰(尤其是在函数中),因此要不断思考。

因此我们用几种不同的方式编写了函数,每种方式都是正确的。 您可以完全控制它的读取方式以及将使用哪些参数名称和变量。