1. 开始之前
在本课程中,您将通过使用 Kotlin 编程语言编写代码来构建应用程序,这是 Google 在创建新的 Android 应用程序时推荐使用的语言。
Kotlin 是一种现代编程语言,可以帮助开发人员提高工作效率。例如,与其他编程语言相比,Kotlin 允许您更简洁地编写代码,并为相同的功能编写更少的代码行。使用 Kotlin 构建的应用程序也更不容易崩溃,从而为用户提供更稳定、更强大的应用程序。从本质上讲,使用 Kotlin,您可以在更短的时间内编写更好的 Android 应用程序。因此,Kotlin 在业界正在获得越来越多的关注,并且是大多数专业 Android 开发人员使用的语言。
要开始使用 Kotlin 构建 Android 应用程序,首先必须建立 Kotlin 编程概念的坚实基础。通过本路径中的代码实验室,您将在深入学习应用程序创建之前学习 Kotlin 编程基础知识。
您将构建什么
- 运行时显示消息的简短 Kotlin 程序。
您将学到什么
- 如何编写和运行简单的 Kotlin 程序。
- 如何修改简单的程序以更改输出。
您需要什么
- 一台连接互联网的电脑和一个网页浏览器。
2. 开始
在本代码实验室中,您将探索和修改 Kotlin 中的简单程序。您可以将程序视为一系列指示计算机或移动设备执行某些操作的指令,例如向用户显示消息或计算购物车中商品的成本。计算机应执行的逐步说明称为代码。当您修改程序中的代码时,输出可能会发生变化。
您使用名为代码编辑器的工具来编写和编辑代码。它类似于文本编辑器,您可以在其中编写和编辑文本,但代码编辑器还提供了一些功能来帮助您更准确地编写代码。例如,代码编辑器在您键入时显示自动完成建议,并在代码不正确时显示错误消息。
为了练习 Kotlin 语言的基础知识,您将使用一个名为 Kotlin Playground 的交互式代码编辑器。您可以从 Web 浏览器访问它,因此您无需在计算机上安装任何软件。您可以在 Kotlin Playground 中直接编辑和运行 Kotlin 代码并查看输出。
请注意,您无法在 Kotlin Playground 中构建 Android 应用程序。在后面的路径中,您将安装和使用名为 Android Studio 的工具来编写和编辑 Android 应用程序代码。
现在您已经了解了一些关于 Kotlin 的背景知识,让我们来看一下您的第一个程序!
3. 打开 Kotlin Playground
在您计算机上的 Web 浏览器中,打开Kotlin Playground。
您应该会看到一个类似于此图像的网页
代码编辑器中已经填充了一些默认代码。这三行代码构成了一个简单的程序
fun main() {
println("Hello, world!")
}
即使您以前从未编程过,您能否猜出该程序的功能?
继续下一部分查看您的猜测是否正确!
4. 运行您的第一个程序
点击以运行您的程序。
当您点击“运行”按钮时,会发生很多事情。Kotlin 编程语言中的代码旨在让人类理解,以便人们可以更轻松地阅读、编写和协作 Kotlin 程序。但是,您的计算机不会立即理解这种语言。
您需要一个名为Kotlin 编译器的东西,它会获取您编写的 Kotlin 代码,逐行查看它,并将其转换为计算机可以理解的内容。此过程称为编译您的代码。
如果您的代码成功编译,您的程序将运行(或执行)。当计算机执行您的程序时,它会执行您的每个指令。如果您曾经按照烹饪食谱操作,那么执行食谱中的每个步骤都被视为执行每个指令。
以下是运行程序时应看到的屏幕截图。
在代码编辑器的底部,您应该会看到一个窗格,其中显示程序的输出或结果
Hello, world!
酷!此程序的目的是打印或显示一条消息,内容为Hello, world!
。
这是如何工作的?Kotlin 程序必须具有主函数,这是程序开始运行的特定位置。主函数是程序的入口点或起点。
现在您可能想知道,什么是函数?
5. 函数的组成部分
函数是执行特定任务的程序段。您的程序可能包含一个或多个函数。
定义与调用函数
在您的代码中,您首先定义一个函数。这意味着您指定执行该任务所需的所有指令。
定义函数后,您可以调用该函数,以便可以执行或执行该函数中的指令。
这是一个类比。您写下有关如何烘焙巧克力蛋糕的分步说明。这套说明可以有一个名称:bakeChocolateCake
。每次您想烘焙蛋糕时,都可以执行bakeChocolateCake
指令。如果要制作 3 个蛋糕,则需要执行bakeChocolateCake
指令 3 次。第一步是定义步骤并为其命名,这被认为是定义函数。然后,您可以随时引用这些步骤以使其执行,这被认为是调用函数。
定义函数
以下是定义函数所需的关键部分
- 函数需要一个名称,以便您以后可以调用它。
- 函数还可以需要一些输入,或者在调用函数时需要提供的信息。函数使用这些输入来完成其目的。需要输入是可选的,有些函数不需要输入。
- 函数还有一个主体,其中包含执行任务的指令。
要将上图转换为 Kotlin 代码,请使用以下语法或格式来定义函数。这些元素的顺序很重要。fun
字必须放在首位,后跟函数名,后跟括号中的输入,后跟花括号括起来的函数体。
请注意您在 Kotlin Playground 中看到的main
函数示例中函数的关键部分
- 函数定义以
fun
字开头。 - 然后是函数的名称
main
。 - 函数没有输入,因此括号为空。
- 函数体中有一行代码
println("Hello, world!")
,它位于函数的开花括号和闭花括号之间。
函数的每个部分将在下面详细解释。
函数关键字
要在 Kotlin 中指示您即将定义一个函数,请在新行上使用特殊词fun
(函数的缩写)。您必须完全按照显示的那样键入fun
,所有字母都小写。您不能使用 func、function 或其他拼写,因为 Kotlin 编译器无法识别您的意思。
这些特殊词在 Kotlin 中称为关键字,并且保留用于特定目的,例如在 Kotlin 中创建新函数。
函数名称
函数有名称,以便可以将它们彼此区分开来,就像人们有名字来识别自己一样。函数的名称位于fun
关键字之后。
根据函数的目的选择合适的函数名称。名称通常是动词或动词短语。建议避免使用Kotlin 关键字作为函数名称。
函数名称应遵循驼峰式命名法,其中函数名称的第一个单词全部小写。如果名称中有多个单词,单词之间没有空格,并且所有其他单词应以大写字母开头。
函数名称示例
calculateTip
displayErrorMessage
takePhoto
函数输入
请注意,函数名称后面始终跟着括号。在这些括号中,您列出函数的输入。
输入是函数执行其目的所需的数据片段。当您定义函数时,您可以要求在调用函数时传入某些输入。如果函数不需要任何输入,则括号为空()
。
以下是一些具有不同输入数量的函数示例
下图展示了一个名为 addOne
的函数。该函数的目的是将给定的数字加 1。它有一个输入,即给定的数字。在函数体内部,包含了将 1 加到传入函数的数字的代码。
在下一个示例中,有一个名为 printFullName
的函数。该函数需要两个输入,一个用于名字,一个用于姓氏。函数体将名字和姓氏打印到输出中,以显示该人的全名。
最后一个示例展示了一个函数,在调用时不需要传递任何输入。当您调用 displayHello()
函数时,一条“Hello”消息将打印到输出中。
函数体
函数体包含实现函数目的所需的指令。您可以通过查找包含在开始和结束花括号之间的代码行来找到函数体。
简单程序说明
回顾一下您之前在代码实验室中看到的简单程序。
该程序包含一个函数:main
函数。main
是 Kotlin 中一个特殊的函数名称。当您在 Kotlin Playground 中编写代码时,您的代码应该写在 main()
函数内部或从 main()
函数中调用。
此 main()
函数体中只有一行代码。
println("Hello, world!")
这行代码是一个语句,因为它执行一个特定的操作,即在输出窗格中打印 Hello, world!
文本。更具体地说,这行代码正在调用 println()
函数。println()
是 Kotlin 语言中已定义的函数。这意味着创建 Kotlin 语言的工程师团队已经为 println()
函数编写了函数声明。该函数需要一个输入,即要打印的消息。
当您调用 println()
函数时,将消息文本放在函数名称后的括号内。请务必使用引号括起要显示的文本,例如 "Hello, world!"
。
程序执行时,传递给 println()
函数的消息将打印到输出中。
Hello, world!
试试看
现在回顾一下程序中的原始代码。您能否修改 Kotlin Playground 中的代码,以便输出显示此消息?
Hello, Android!
6. 修改您的程序
- 为了更改输出中显示的消息,请修改程序第二行上的
println()
函数调用。将println()
函数中的world
替换为Android
。确保"Hello, Android!"
仍然在引号内和括号内。
fun main() {
println("Hello, Android!")
}
- 运行程序。
- 输出应显示此消息。
Hello, Android!
干得好,您修改了您的第一个程序!
现在您能否更改您的代码以使消息打印两次?请查看所需的输出。
Hello, Android! Hello, Android!
打印多条消息
您可以在函数中放入任意数量的指令行来完成一项任务。但是,请注意,在 Kotlin 中每行应只有一个语句。如果您想编写另一个语句,请将其放在函数的新行上。
要更改您的程序以打印多行文本
- 复制初始的
println()
语句,并将第二个语句粘贴到函数体内的下方。两个println()
语句都必须包含在 main 函数的花括号内。现在您在函数体中有了两个语句。
fun main() {
println("Hello, Android!")
println("Hello, Android!")
}
- 运行程序。
- 运行程序时,输出应为
Hello, Android! Hello, Android!
您可以看到代码更改如何影响输出。
- 更改代码,使其显示
Hello,
YOUR_NAME
!
。
7. Kotlin 样式指南
在本课程中,您将学习作为 Android 开发人员应遵循的良好编码实践。其中一项实践是遵循 Google 的 Android 代码标准来编写 Kotlin 代码。完整的指南称为样式指南,它解释了代码在视觉外观方面的格式以及编写代码时应遵循的约定。例如,样式指南包括关于使用空格、缩进、命名等的建议。
遵循样式指南的目的是使您的代码更易于阅读,并与其他 Android 开发人员编写代码的方式保持一致。这种一致性在协作处理大型项目时非常重要,以便整个项目的代码风格保持一致。
以下是您迄今为止在 Kotlin 中学到的内容的一些相关样式指南建议。
- 函数名称应使用驼峰命名法,并且应为动词或动词短语。
- 每个语句应独占一行。
- 开始花括号应出现在函数开始行的末尾。
- 开始花括号前应有一个空格。
- 函数体应缩进 4 个空格。不要使用制表符来缩进代码,请键入 4 个空格。
- 结束花括号位于函数体中最后一行代码之后的独立一行上。结束花括号应与函数开头的
fun
关键字对齐。
随着您在 Kotlin 中知识的积累,您将学习更多 Android 编码约定。完整的样式指南在这里,但不用担心它涵盖了您尚未学习的 Kotlin 中的其他主题。
8. 修正代码中的错误
当您学习人类语言时,有一些语法和语法的规则来规范单词的使用和句子的形成。类似地,对于编程语言,也有特定的规则来规定什么代码才是有效的,这意味着可以成功编译的代码。
编码过程中正常的一部分是犯错误并意外地编写无效代码。作为初学者,遇到这些错误可能会令人困惑或不知所措。但不用担心,这是预料之中的。代码很少在第一次编写时就能完美运行。就像编写文档需要多个草稿一样,编写代码也可能需要多次迭代才能达到预期效果。
如果代码无法成功编译,则会出现错误。例如,如果您有错别字,例如缺少引号或括号,编译器将无法理解您的代码,也无法将其转换为计算机执行的步骤。如果您的代码无法按预期工作,或者您在代码编辑器中看到错误消息,则必须返回代码并修复它。解决这些错误的过程称为故障排除。
- 将以下代码片段复制并粘贴到 Kotlin Playground 中并运行程序。您看到了什么?
fun main() {
println("Today is sunny!)
}
理想情况下,您希望看到消息 Today is sunny!
显示。相反,在输出窗格中,您会看到带有错误消息的感叹号图标。
Kotlin Playground 的错误消息
错误消息以“Expecting”一词开头,因为 Kotlin 编译器“期望”某些东西,但在代码中找不到。在本例中,编译器期望一个结束引号和程序第二行代码的结束括号。
在 println()
语句中,请注意要显示的消息有一个开始引号,但没有结束引号。即使代码中存在结束括号,编译器也会认为括号是打印文本的一部分,因为在结束括号之前没有结束引号。
- 在感叹号后、结束括号之前添加结束引号。
fun main() {
println("Today is sunny!")
}
main 函数包含一行代码,即 println()
语句,其中文本用引号括起并放在括号内:"Today is sunny!"
。
- 再次运行程序。
不应该有任何错误,输出窗格应显示此文本。
Today is sunny!
很好,您修复了错误!一旦您获得更多编写代码和排除故障的经验,您就会意识到在键入代码时注意大小写、拼写、空格、符号和名称的重要性。
在下一部分中,您将完成一系列练习来练习您所学到的知识。代码实验室的末尾提供了解决方案,但请先尽力自己找到答案。
9. 练习
- 您能否阅读此程序中的代码并猜测输出是什么(无需在 Kotlin Playground 中运行它)?
fun main() {
println("1")
println("2")
println("3")
}
在您进行猜测后,将此代码复制并粘贴到 Kotlin Playground 中以检查您的答案。
- 使用 Kotlin Playground 创建一个输出以下消息的程序。
I'm learning Kotlin!
- 将此程序复制并粘贴到 Kotlin Playground 中。
fun main() {
println("Tuesday")
println("Thursday")
println("Wednesday")
println("Friday")
println("Monday")
}
修复程序,使其打印此输出。
Monday Tuesday Wednesday Thursday Friday
对于一些早期的故障排除练习,请修复以下练习中的错误。对于每个练习,请将代码复制到浏览器中的 Kotlin Playground 中。尝试运行程序,您将看到错误消息出现。
- 修复此程序中的错误,使其产生所需的输出。
fun main() {
println("Tomorrow is rainy")
所需输出
Tomorrow is rainy
- 修复此程序中的错误,使其产生所需的输出。
fun main() {
printLine("There is a chance of snow")
}
所需输出
There is a chance of snow
- 修复此程序中的错误,使其产生所需的输出。
fun main() {
println("Cloudy") println("Partly Cloudy") println("Windy")
}
所需输出
Cloudy Partly Cloudy Windy
- 修复此程序中的错误,使其产生所需的输出。
fun main() (
println("How's the weather today?")
)
所需输出
How's the weather today?
完成这些练习后,请根据下一部分中的解决方案检查您的答案。
10. 解决方案
- 程序的输出为
1 2 3
- 程序中的代码应如下所示。
fun main() {
println("I'm")
println("learning")
println("Kotlin!")
}
- 这是程序的正确代码。
fun main() {
println("Monday")
println("Tuesday")
println("Wednesday")
println("Thursday")
println("Friday")
}
- 程序第三行缺少指示
main
函数函数体结束的结束花括号。
正确代码
fun main() {
println("Tomorrow is rainy")
}
输出
Tomorrow is rainy
- 运行程序时,您会看到一个
Unresolved reference: printLine
错误。这是因为printLine()
在 Kotlin 中不是一个已识别的函数。您还可以在 Kotlin Playground 中看到以红色突出显示的导致错误的代码部分。将函数名称更改为println
以将一行文本打印到输出,这将修复错误。
正确代码
fun main() {
println("There is a chance of snow")
}
输出
There is a chance of snow
- 运行程序时,您会看到一个
Unresolved reference: println
错误。此消息没有直接说明如何解决问题。在进行错误排查时,有时可能会发生这种情况,需要您更深入地查看代码以解决意外行为。
仔细观察,代码中的第二个println()
函数调用以红色显示,这表示问题就出在这里。Kotlin 要求每行只有一个语句。在这种情况下,您可以将第二个和第三个println()
函数调用移动到单独的新行以解决此问题。
正确代码
fun main() {
println("Cloudy")
println("Partly Cloudy")
println("Windy")
}
输出
Cloudy Partly Cloudy Windy
- 如果运行程序,您将看到错误:
Function 'main' must have a body
。函数体应包含在一个开花括号和一个闭花括号 { } 之间,而不是开括号和闭括号 ( ) 之间。
正确代码
fun main() {
println("How's the weather today?")
}
输出
How's the weather today?
11. 结论
恭喜您完成 Kotlin 入门教程!
您使用 Kotlin 编写了简单的程序并运行它们,以查看文本打印到输出。您以不同的方式修改了程序,并观察了这些更改如何影响输出。编程时犯错是正常的,因此您也开始学习如何对代码中的错误进行排查和纠正,这是一项重要的技能,将在未来帮助您。
继续下一个代码实验室,学习如何在 Kotlin 中使用变量,以便您可以创建更有趣的程序!
总结
- Kotlin 程序需要一个
main
函数作为程序的入口点。 - 要在 Kotlin 中定义函数,请使用
fun
关键字,后跟函数名称、括号内包含的任何输入,以及花括号内包含的函数体。 - 函数名称应遵循驼峰命名法,并以小写字母开头。
- 使用
println()
函数调用将一些文本打印到输出。 - 请参阅 Kotlin 样式指南,了解在 Kotlin 中编码时应遵循的格式和代码约定。
- 故障排除是解决代码中错误的过程。