您的第一個 Kotlin 程式

1. 事前準備

Android 與 Kotlin 標誌

在本課程中,您將使用 Kotlin 程式設計語言編寫程式碼以建構應用程式;此為 Google 在建立新的 Android 應用程式時建議使用的程式設計語言。

Kotlin 是一種現代程式設計語言,有助開發人員提升效率。舉例來說,與其他程式設計語言相比,Kotlin 可透過更簡潔的語法提供相同功能,以減少程式碼的行數。此外,使用 Kotlin 建構的應用程式較不容易當機,對使用者而言更為穩定可靠。基本上,有了 Kotlin,您可以在更短的時間內編寫出更出色的 Android 應用程式。因此,Kotlin 不僅在業界中創下佳績,也是大部分 Android 專業開發人員的慣用語言。

如要開始在 Kotlin 中建構 Android 應用程式,首先要在 Kotlin 程式設計概念打下穩固基礎。透過本課程的程式碼研究室,您會先瞭解 Kotlin 程式設計的基本知識,然後再深入學習如何建立應用程式。

建構項目

  • 使用 Kotlin 編寫簡短程式,在執行時顯示訊息。

課程內容

  • 如何編寫並執行簡單的 Kotlin 程式。
  • 如何修改簡單的程式來變更輸出結果。

軟硬體需求

  • 一台可連上網際網路並具備網路瀏覽器的電腦。

2. 立即開始

在本程式碼研究室中,您會探索並修改簡單的 Kotlin 程式。您可以將程式想成一系列指示電腦或行動裝置執行某些動作的操作說明,例如向使用者顯示訊息,或是計算購物車中商品的費用。指示電腦應執行的操作的逐步說明稱為程式碼。修改程式中的程式碼時,輸出結果可能有變。

您會使用名為程式碼編輯器的工具來編寫和編輯程式碼。程式碼編輯器與文字編輯器類似,可讓您編寫和編輯文字。不過,程式碼編輯器還提供功能,助您更準確地編寫程式碼。舉例來說,程式碼編輯器會在您輸入內容時顯示自動完成建議,並在程式碼不正確時顯示錯誤訊息。

如要練習 Kotlin 語言的基本知識,請使用名為 Kotlin Playground 的互動式程式碼編輯器。您可以透過網路瀏覽器存取這個工具,因此無須在電腦上安裝任何軟體。您可以直接在 Kotlin Playground 中編輯及執行 Kotlin 程式碼,並查看輸出內容。

請注意,您無法在 Kotlin Playground 中建構 Android 應用程式。在後續課程中,您要安裝並使用名為 Android Studio 的工具來編寫及編輯 Android 應用程式的程式碼。

現在,您已掌握了一些 Kotlin 的背景脈絡,接下來讓我們看看第一個程式!

3. 開啟 Kotlin Playground

使用電腦上的網路瀏覽器開啟 Kotlin Playground

顯示的網頁應如下圖:

這顯示 Kotlin Playground 的螢幕截圖。程式碼編輯器會顯示簡單的程式,供您列印

程式碼編輯器中已填入部分預設程式碼,這三行程式碼組成一個簡單的程式:

fun main() {
    println("Hello, world!")
}

即使您從來沒試過程式設計,您能猜出這個程式的用途嗎?

繼續閱讀下一節,看看您的猜測是否正確!

4. 執行您的第一個程式

按一下 「Run」按鈕 即可執行程式。

按一下「Run」按鈕,系統會進行許多操作。Kotlin 程式設計語言的程式碼易於人類理解,因此使用者可以更輕鬆地閱讀和編寫 Kotlin 程式,並與他人協同合作。不過,您的電腦不會立即瞭解這個語言。

您需要名為 Kotlin 編譯器的工具,它會擷取您編寫的 Kotlin 程式碼、逐行查看程式碼,以及將其轉譯成電腦能夠理解的內容。這個過程稱為編譯程式碼。

如果程式碼編譯成功,程式就會執行。電腦執行程式時,它會執行每個指令。這就好比您照著食譜烹調,那麼按照食譜完成每個步驟就視為執行每一個指令。

以下螢幕截圖顯示您在執行程式時應會看到的內容。

此螢幕截圖顯示 Kotlin Playground 的一部分網頁。程式碼編輯器會顯示 Hello World 程式的程式碼。程式碼編輯器下方是顯示詞組的輸出窗格。

在程式碼編輯器的底部,您應該會看到一個顯示程式輸出內容或結果的窗格:

Hello, world!

太棒了!本程式的目的是輸出或顯示內容為「Hello, world!」的訊息。

它是怎樣運作的?Kotlin 程式必須具備 main 函式,這是程式在程式碼中開始執行的指定位置。主函式是程式的進入點,也可以說是起點。

有一個箭頭指向簡易程式 main 函式的第一行,程式上寫有

您現在可能會好奇,函式是什麼?

5. 函式的組成部分

函式是程式中執行特定工作的部分。您的程式可能具有一或多個函式。

定義與呼叫函式

您必須在程式碼中定義函式,也就是說,您要指定執行該工作所需的各項指示。

定義函式後,您就可以呼叫函式,以便執行該函式中的指示。

比方說,您編寫下巧克力蛋糕烘焙方法的逐步指令,您可以將這組指令命名為:bakeChocolateCake。每次需要烤蛋糕時,都可以執行 bakeChocolateCake 指令。如要您想要 3 個蛋糕,就必須執行 bakeChocolateCake 指令 3 次。第一步是定義步驟並指定名稱,這相當於定義函式。接下來,您可以隨時參考執行步驟,這相當於呼叫函式。

定義函式

以下是定義函式所需的關鍵部分:

  • 函式需要名稱,方便日後呼叫它。
  • 函式還可能需要一些輸入內容,或是呼叫函式時需要提供的資訊。函式會使用這些輸入內容來達到目的。輸入內容並非必需,有些函式並不需要輸入內容。
  • 函式還有主體,其中包含執行工作的指令。

此圖表代表一個函式,以帶有標籤的黑色方塊呈現

如要將上圖轉譯為 Kotlin 程式碼,請使用以下語法或格式來定義函式。這些元素的順序十分重要。「fun」字必須排在函式名稱後面,接著是加上括號的輸入內容,最後是加上大括號的函式主體。

此圖表顯示在 Kotlin 程式碼中宣告函式的語法 (或格式)。函式的開頭字詞為

請注意,您在 Kotlin Playground 中看到的 main 函式例子中,函式的主要部分為:

  • 函式定義以字詞 fun 開頭。
  • 然後,函式名稱是 main
  • 函式沒有輸入內容,因此括號內是空白。
  • 函式主體 println("Hello, world!") 中有一行程式碼,位於函式左右大括號之間。

圖片中顯示的 main 函式程式碼如下:fun main() {     println(

下文會更詳細說明函式的各個部分。

函式關鍵字

為了表示您即將在 Kotlin 中定義函式,請在新行中使用 fun 這個特殊字詞。您輸入的 fun 必須與顯示的單字完全相同,而且全部用小寫。您不能「func」、「function」或其他拼寫方式,因為 Kotlin 編譯器無法識別您的意思。

這類特殊字詞在 Kotlin 中稱為關鍵字,只能用於特定用途,例如在 Kotlin 中建立新函式。

函式名稱

函式需要用名稱來區分,好比人要用名字來識別身分。函式的名稱會顯示在 fun 關鍵字之後。

此圖表顯示在 Kotlin 程式碼中宣告函式的語法 (或格式)。函式的開頭字詞為

請根據函式用途,為函式選擇恰當的名稱。名稱通常是動詞或動詞片語。建議您避免使用 Kotlin 關鍵字做為函式名稱。

函式名稱應遵循駝峰式大小寫規範,其中函式名稱的第一個字詞全為小寫。如果名稱中包含多個字詞,則字詞之間不應有空格,且所有其他字詞的首字母都應用大寫。

函式名稱範例:

  • calculateTip
  • displayErrorMessage
  • takePhoto

函式輸入內容

請注意,函式名稱後面一律加上括號。函式的輸入內容應列在這些括號內。

此圖表顯示在 Kotlin 程式碼中宣告函式的語法 (或格式)。函式的開頭字詞為

輸入內容是函式執行其目的所需的資料。定義函式時,您可以要求系統在呼叫函式時傳遞特定輸入內容。如果函式無需輸入內容,則括號會顯示空白的 ()

以下列舉幾種含有不同輸入內容的函式:

下圖顯示名為 addOne 的函式。函式的作用是為指定數字加上 1。該函式有一個輸入內容,也就是指定數字。在函式主體內,有程式碼將 1 加到傳遞至函式的數字上。

此圖表代表一個函式,以帶有標籤的黑色方塊呈現

在下一個例子中,有一個名為 printFullName 的函式。該函式需要兩個輸入內容,一個是名字,另一個是姓氏。該函式主體會輸出輸出內容中的名字和姓氏,以顯示對方的全名。

此圖表代表一個函式,以帶有標籤的黑色方塊呈現

這最後一個例子中,顯示在呼叫函式時,函式不需要任何輸入內容就能傳遞。當您呼叫 displayHello() 函式時,系統會輸出 Hello 訊息到輸出內容。

此圖表代表一個函式,以帶有標籤的黑色方塊呈現

函式主體

函式主體包含達成函式目的所需的指令。您可尋找以左右大括號包起來的函式。

此圖表顯示在 Kotlin 程式碼中宣告函式的語法 (或格式)。函式的開頭字詞為

簡單程式說明

請回顧先前在程式碼實驗室中看到的簡易程式。

圖片中顯示的 main 函式程式碼如下:fun main() {     println(

程式含有一個函式: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. 修改程式

  1. 如要變更輸出結果中顯示的訊息,請修改程式第二行的 println() 函式呼叫。以 Android 取代 println() 函式中的 world。確認 "Hello, Android!" 仍位於引號和括號內。
fun main() {
    println("Hello, Android!")
}
  1. 執行程式。
  2. 輸出結果應顯示下列訊息:
Hello, Android!

做得好,您已修改了第一個程式!

現在,您可以變更程式碼,讓訊息顯示兩次嗎?查看偏好的顯示:

Hello, Android!
Hello, Android!

您可以根據工作需求,在函式中新不限行數的指令。不過請注意,在 Kotlin 中,每行只能有一個陳述式。如要編寫其他陳述式,則應在函式中另起新一行。

如要變更程式以輸出多行文字,請按照以下步驟操作:

  1. 複製初始 println() 陳述式,並將第二個陳述式貼到函式主體中。兩個 println() 陳述式都必須包含在主函式的大括號內。現在,函式主體內有兩個陳述式。
fun main() {
    println("Hello, Android!")
    println("Hello, Android!")
}
  1. 執行程式。
  2. 執行程式時,輸出內容應如下所示:
Hello, Android!
Hello, Android!

您可以看到程式碼對輸出內容的影響。

  1. 變更代碼,使其顯示 Hello, YOUR_NAME!

7. Kotlin 樣式指南

在本課程中,我們會說明 Android 開發人員在寫程式時應遵循的幾個良好做法。其中一種做法是遵循 Google 對使用 Kotlin 編寫程式碼制定的 Android 程式碼設計標準。這份完整指南稱為樣式指南,從程式碼的視覺外觀和寫程式規範方面應採用的格式。例如,樣式指南包括使用空白字元、縮排和命名等方面的建議。

遵循樣式指南的目的是讓程式碼更易讀,並且與其他 Android 開發人員編寫程式碼的方式更加一致。在協作完成大型專案時,專案中所有檔案的程式碼都應採用相同樣式,因此這種一致性非常重要。

對於您目前為止學到的 Kotlin 知識,我們有下列的相關樣式指南建議:

  • 函式名稱應採用駝峰式大小寫形式,且應為動詞或動詞片語。
  • 每個陳述式應單獨一行。
  • 左大括號應顯示在函式開始行的末尾。
  • 左大括號前應有一個空格。

圖片中顯示的 main 函式程式碼如下:fun main() {     println(

  • 函式主體應縮排 4 個空格。請勿使用定位字元縮排程式碼,而是輸入 4 個空格。

圖片中顯示的 main 函式程式碼如下:fun main() {     println(

  • 右大括號位於函式主體的最後一行程式碼,並單獨一行。右括號應與函式開頭的 fun 關鍵字對齊。

圖片中顯示的 main 函式程式碼如下:fun main() {     println(

在進一步瞭解 Kotlin 知識的過程中,您會學到更多 Android 程式設計的慣例。請參閱這裡的完整樣式指南。不過,如果其中有您未學過的 Kotlin 主題,也無需擔心。

8. 修正程式碼中的錯誤

學習人類語言時,單字的正確使用方式和句子的正確結構都有一定的語法和文法規則。同樣地,對於程式設計語言來說,有特定的規則決定甚麼是有效的程式碼,亦即成功編譯的程式碼。

在程式設計過程中,出錯和不慎編寫住效的程式碼很正常。新手在遇到這些錯誤時可能會感到困惑或沮喪,不過您不必擔心,這是正常現象。程式碼很少編寫一次時就能完美運作。就像撰寫文件需要擬定多份草稿一樣,編寫程式碼也可能需要多次疊代,直到程式碼達到預期效果。

如果程式碼無法順利編譯,就會發生錯誤。舉例來說,如果有輸入錯誤 (例如缺少引號或括號),編譯器會無法理解程式碼,也無法將其轉換成電腦執行的步驟。如果程式碼無法如預期般運作,或是程式碼編輯器顯示錯誤訊息,就必須檢查程式碼並加以修正。解決這些錯誤的程序稱為疑難排解

  1. 複製以下程式碼片段並貼到 Kotlin Playground,然後執行程式。你看到什麼?
fun main() {
    println("Today is sunny!)
}

在理想情況下,系統會顯示 Today is sunny! 訊息。然而,您在輸出窗格中看到的卻是有錯誤訊息的驚嘆號圖示。

執行程式時出現 2 則錯誤訊息:Expecting

Kotlin Playground 的錯誤訊息

錯誤訊息以「Expecting」開頭,因為 Kotlin 編譯器「預期」識別到某個項目,但在程式碼中卻找不到。在這個範例中,編譯器預期在程式的第二行程式碼中,識別到右引號和右括號。

請注意,在 println() 陳述式中,要顯示的訊息有左引號,但沒有右引號。即使程式碼有右括號,編譯器也會認為要輸出的文字包括括號,因為括號前面並沒有右引號。

  1. 在驚嘆號之後、右括號之前加上右引號。
fun main() {
    println("Today is sunny!")
}

主函式包含一行程式碼,也就是 println() 陳述式,其中的文字以引號括住,再用括號括起:"Today is sunny!"

  1. 再次執行程式。

現在應該不會再出現錯了,輸出窗格應會顯示下列文字:

Today is sunny!

錯誤已修正,做得好!只要您在編寫程式碼及錯誤疑難排解上累積更多經驗,就會瞭解輸入程式碼時務必注意大小寫、拼字、空格、符號和名稱。

在下一節,我們會透過一系列練習來驗收您的學習成果。本程式碼實驗室的結尾會提供解決方法,但請先盡量自行找出答案。

9. 練習

  1. 您能讀懂這個程式中的程式碼,並猜出輸出結果嗎 (不要在 Kotlin Playground 中執行)?
fun main() {
    println("1")
    println("2")
    println("3")
}

做出猜測後,請複製這段程式碼並貼到 Kotlin Playground 中,看看您是否猜對。

  1. 使用 Kotlin Playground 建立一個輸出下列訊息的程式:
I'm
learning
Kotlin!
  1. 請複製這個程式並貼到 Kotlin Playground。
fun main() {
    println("Tuesday")
    println("Thursday")
    println("Wednesday")
    println("Friday")
    println("Monday")
}

請修正程式,使其輸出下列內容:

Monday
Tuesday
Wednesday
Thursday
Friday

請修正下列練習中的錯誤,以做為疑難排解的初級練習。在每個練習中,請將程式碼複製到瀏覽器中的 Kotlin Playground。嘗試執行程式,您就會看到錯誤訊息。

  1. 請修正這個程式中的錯誤,使其產生所需的輸出內容。
fun main() {
    println("Tomorrow is rainy")

所需的輸出內容:

Tomorrow is rainy
  1. 請修正這個程式中的錯誤,使其產生所需的輸出內容。
fun main() {
    printLine("There is a chance of snow")
}

所需的輸出內容:

There is a chance of snow
  1. 請修正這個程式中的錯誤,使其產生所需的輸出內容。
fun main() {
    println("Cloudy") println("Partly Cloudy") println("Windy")
}

所需的輸出內容:

Cloudy
Partly Cloudy
Windy
  1. 請修正這個程式中的錯誤,使其產生所需的輸出內容。
fun main() (
    println("How's the weather today?")
)

所需的輸出內容:

How's the weather today?

完成這些練習後,請對照下一節提供的解決方案來檢查答案。

10. 解決方法

  1. 程式的輸出結果如下:
1
2
3
  1. 該程式的程式碼應如下所示:
fun main() {
    println("I'm")
    println("learning")
    println("Kotlin!")
}
  1. 該程式的正確程式碼如下:
fun main() {
    println("Monday")
    println("Tuesday")
    println("Wednesday")
    println("Thursday")
    println("Friday")
}
  1. 程式的第三行缺少右大括號,用於表示 main 函式的函式主體結束。

正確程式碼:

fun main() {
    println("Tomorrow is rainy")
}

輸出內容:

Tomorrow is rainy
  1. 執行該程式時,系統顯示 Unresolved reference: printLine 錯誤。這是因為 printLine() 不是 Kotlin 能識別的函式。您還可以在 Kotlin Playground 中查看程式碼中導致錯誤的部分,這部分會以紅色醒目顯示。請將函式名稱變更為 println,程式便會在輸出內容中顯示一行文字,即可修正錯誤。

正確程式碼:

fun main() {
    println("There is a chance of snow")
}

輸出內容:

There is a chance of snow
  1. 執行該程式時,系統顯示 Unresolved reference: println 錯誤。這則訊息並未直接說明問題的修正方式。在疑難排解錯誤時,有時會出現這種情況,您需要深入瞭解程式碼來解決非預期的行為。

仔細看看,程式碼的第二個 println() 函式呼叫以紅色顯示,指出發生問題的位置。在 Kotlin 中,每行只能有一個陳述式。在這種情況下,您可以將第二和第三個 println() 函式呼叫分別移到新行,即可解決問題。

正確程式碼:

fun main() {
    println("Cloudy")
    println("Partly Cloudy")
    println("Windy")
}

輸出內容:

Cloudy
Partly Cloudy
Windy
  1. 如果您執行該程式,系統會顯示以下錯誤訊息: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 編寫程式碼時應遵循的格式設定和程式碼慣例。
  • 疑難排解是解決程式碼錯誤的過程。

瞭解詳情