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
(函数的缩写)。您必须按照显示的那样,完全用小写字母键入 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()
函数调用。将world
替换为Android
在println()
函数中。确保"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 中编码时要遵循的格式和代码约定。
- 故障排除是解决代码中错误的过程。