1. 开始之前
在本课程中,您将通过使用 Kotlin 编程语言编写代码来构建应用,Kotlin 是 Google 在创建新的 Android 应用时推荐的语言。
Kotlin 是一种现代编程语言,可帮助开发者提高工作效率。例如,与其他的编程语言相比,Kotlin 可以让您以更简洁的方式编写更少的代码来实现相同的功能。使用 Kotlin 构建的应用也不太容易崩溃,这为用户带来了更稳定、更强大的应用。本质上,使用 Kotlin,您可以在更短的时间内编写出更好的 Android 应用。因此,Kotlin 在行业中越来越受欢迎,并且是大多数专业 Android 开发者使用的语言。
要开始使用 Kotlin 构建 Android 应用,首先打下坚实的 Kotlin 编程概念基础至关重要。通过本路径中的 Codelab,您将在深入进行应用创建之前学习 Kotlin 编程基础知识。
您将构建的内容
- 在 Kotlin 中构建运行时会显示消息的简短程序。
您将学习的内容
- 如何编写和运行简单的 Kotlin 程序。
- 如何修改简单的程序以改变输出。
您需要准备的内容
- 一台有互联网连接和网络浏览器的计算机。
2. 入门
在本 Codelab 中,您将探索和修改简单的 Kotlin 程序。您可以将程序视为一系列指令,供计算机或移动设备执行某些操作,例如向用户显示消息或计算购物车中商品的价格。计算机应执行的分步指令称为代码。修改程序中的代码时,输出可能会更改。
您可以使用名为代码编辑器的工具来编写和修改代码。它类似于文本编辑器,您可以在其中编写和编辑文本,但代码编辑器还提供了功能,可帮助您更准确地编写代码。例如,代码编辑器会在您输入时显示自动填充建议,并在代码不正确时显示错误消息。
为了练习 Kotlin 语言的基础知识,您将使用一个名为 Kotlin Playground 的交互式代码编辑器。您可以通过网络浏览器访问它,因此无需在计算机上安装任何软件。您可以在 Kotlin Playground 中直接编辑和运行 Kotlin 代码并查看输出。
请注意,您无法在 Kotlin Playground 中构建 Android 应用。在后面的路径中,您将安装并使用名为 Android Studio 的工具来编写和修改您的 Android 应用代码。
既然您已经对 Kotlin 有了一些了解,那就来看看您的第一个程序吧!
3. 打开 Kotlin Playground
在计算机的网络浏览器中,打开 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
(function 的缩写)。您必须完全按照所示的方式以小写字母输入 fun
。您不能使用 func、function 或其他备用拼写,因为 Kotlin 编译器无法识别您的意思。
这些特殊词在 Kotlin 中称为关键字,保留用于特定目的,例如在 Kotlin 中创建新函数。
函数名称
函数有名称以便彼此区分,就像人们有姓名来识别自己一样。函数名称位于 fun
关键字之后。
根据函数的目的选择一个合适的函数名称。名称通常是动词或动词短语。建议避免使用 Kotlin 关键字作为函数名称。
函数名称应遵循驼峰命名法约定,即函数名称的第一个单词全部小写。如果名称中有多个单词,单词之间没有空格,并且所有其他单词都应以大写字母开头。
函数名称示例
calculateTip
displayErrorMessage
takePhoto
函数输入
请注意,函数名称后面总是跟着圆括号。这些圆括号是您列出函数输入的地方。
输入是函数执行其目的所需的数据。定义函数时,可以要求在调用函数时传入某些输入。如果函数不需要任何输入,则圆括号为空 ()
。
以下是一些具有不同输入数量的函数示例
下图显示了一个名为 addOne
的函数。该函数的目的是将给定数字加 1。有一个输入,即给定数字。在函数主体内部,有一段代码会将传递到函数中的数字加 1。
在下一个示例中,有一个名为 printFullName
的函数。该函数需要两个输入,一个用于名字,一个用于姓氏。函数主体会在输出中打印名字和姓氏,以显示该人员的全名。
最后一个示例显示了一个在调用时不需要传入任何输入的函数。当您调用 displayHello()
函数时,输出会打印一条 Hello 消息。
函数主体
函数主体包含实现函数目的所需的指令。您可以通过查找包含在开花括号和闭花括号之间的代码行来找到函数主体。
简单程序讲解
回顾一下您在本 Codelab 中前面看到的简单程序。
该程序包含一个函数: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()
语句都必须包含在主函数的花括号内。现在函数主体中有两个语句。
fun main() {
println("Hello, Android!")
println("Hello, Android!")
}
- 运行程序。
- 当您运行程序时,输出应为
Hello, Android! Hello, Android!
您可以看到代码的更改如何影响输出。
- 更改代码,使其显示
Hello,
YOUR_NAME
!
。
7. Kotlin 风格指南
在本课程中,您将学习作为 Android 开发者应遵循的良好编码实践。其中一项实践是遵循 Google 针对 Kotlin 编写的代码的 Android 编码标准。完整的指南称为风格指南,解释了代码在视觉外观方面的格式以及编写代码时应遵循的约定。例如,风格指南包括关于空格、缩进、命名等的建议。
遵循风格指南的目的是让您的代码更易于阅读,并与其他 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!")
}
主函数包含一行代码,这是一个 println()
语句,其中文本用引号括起来并放在圆括号内:"Today is sunny!"
。
- 再次运行程序。
应该没有任何错误,输出窗格应显示此文本
Today is sunny!
很棒,您修复了错误!一旦您在编写代码和排查错误方面积累更多经验,您就会意识到在键入代码时注意大小写、拼写、空格、符号和名称的重要性。
在下一节中,您将完成一系列练习,以练习所学内容。Codelab 的末尾提供了解决方案,但请先尽最大努力自己找到答案。
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
(函数“main”必须有主体)。函数主体应该用开花括号和闭花括号 { } 括起来,而不是开圆括号和闭圆括号 ( )。
正确代码
fun main() {
println("How's the weather today?")
}
输出
How's the weather today?
11. 总结
非常棒,您完成了 Kotlin 的入门学习!
您学习了 Kotlin 中的简单程序,并运行它们来查看打印到输出的文本。您以不同的方式修改了程序,并观察了这些更改如何影响输出。编程时犯错误是正常的,因此您也开始学习如何排查和纠正代码中的错误,这是一项重要的技能,将对您未来的学习有所帮助。
继续学习下一个 Codelab,了解如何在 Kotlin 中使用变量,以便您可以创建更有趣的程序!
总结
- Kotlin 程序需要一个
main
函数作为程序的入口点。 - 在 Kotlin 中定义函数,请使用
fun
关键字,后跟函数名称、圆括号中的任何输入,然后是花括号中的函数主体。 - 函数名称应遵循驼峰命名法约定,并以小写字母开头。
- 使用
println()
函数调用将文本打印到输出中。 - 请参阅 Kotlin 风格指南,了解在 Kotlin 中编码时应遵循的格式和代码约定。
- 排查问题是解决代码中错误的过程。