07. Halo, Dunia — Solusi PR

Coba setiap soal sendiri dulu. PR ini tentang proses belajarnya, bukan sekadar jawabannya. Kalau sebuah soal tidak kunjung berhasil, baca bagian Cara berpikir dan coba lagi sebelum melihat solusi yang sudah dikerjakan.

File solusi .go ada di exercises/07/homework/solutions/. Penjelasan di bawah menjelaskan mengapa setiap solusi terlihat seperti itu.

Soal 1 — Sapa dirimu sendiri

Soal. Cetak sebuah sapaan, nama depanmu, dan game favoritmu dalam tiga baris terpisah.

Cara berpikir. fmt.Println menulis satu baris per panggilan. Tiga baris berarti tiga panggilan fmt.Println; urutan panggilan adalah urutan baris di layar.

Solusi yang dikerjakan.

package main

import "fmt"

func main() {
    fmt.Println("Hello there!")
    fmt.Println("Keiko")
    fmt.Println("Roblox")
}

Saat dijalankan, terminal mencetak:

Hello there!
Keiko
Roblox

Kesalahan umum.

  • Menaruh ketiga hal dalam satu panggilan fmt.Println yang dipisahkan dengan koma. Itu berhasil, tapi semuanya masuk ke satu baris dengan spasi di antaranya, bukan tiga baris.
  • Lupa tanda kutip. fmt.Println(Hello there!) adalah error: tanpa tanda kutip, Go membaca Hello dan there sebagai nama, bukan teks.

Soal 2 — Cetak sebuah kutipan

Soal. Cetak kutipan di baris pertama dan pengarang di baris kedua.

Cara berpikir. Dua panggilan fmt.Println. Yang pertama mencetak kutipan (dengan tanda kutip gandanya sebagai bagian dari teks); yang kedua mencetak pengarang dengan tanda strip di depan.

Satu hal yang perlu diperhatikan: kutipannya sendiri mengandung tanda kutip ganda ("). Kalau kamu juga membungkus seluruh string dengan tanda kutip ganda, Go akan kehilangan jejak di mana string berakhir. Dua cara keluarnya:

  1. Bungkus string luar dengan backtick: `"kutipan di sini"`.
  2. Tetap gunakan tanda kutip ganda di luar dan gunakan \" (backslash sebelum tanda kutip dalam) agar Go tahu tanda kutip itu adalah bagian dari teks.

Pilihan pertama lebih sederhana. Gunakan itu.

Solusi yang dikerjakan.

package main

import "fmt"

func main() {
    fmt.Println(`"The best way to predict the future is to invent it."`)
    fmt.Println("                                            - Alan Kay")
}

Spasi di depan pada panggilan kedua mendorong pengarang ke dekat sisi kanan kutipan.

Kesalahan umum.

  • Menulis fmt.Println(""The best way...""). "" pertama adalah string kosong, lalu Go menemukan kata The dan berhenti dengan syntax error: unexpected The in argument list; possibly missing comma or ).
  • Membungkus string dengan tanda kutip tunggal. Itu berhasil di beberapa bahasa, tapi tidak di Go.
  • Menggunakan smart quotes (“ ”) bukan tanda kutip lurus ("). Program pengolah kata memasukkan ini; editor kode tidak. VS Code aman, tapi periksa ulang teks yang disalin dari website. Go melaporkannya sebagai invalid character U+201C '“' in identifier.

Soal 3 — Perbaiki error-nya

Soal. File starter punya lebih dari satu kesalahan. Buat bisa dijalankan dan mencetak All good now.

Cara berpikir. Jalankan file. Baca error pertama. Perbaiki tepat apa yang disebutkan. Jalankan lagi, baca error berikutnya, dan ulangi sampai file berjalan.

Jangan coba menemukan semua kesalahan dengan mata dulu. Error adalah petunjuk gratis.

Solusi yang dikerjakan. File starter terlihat seperti ini:

package main

import "fmt"

func main() {
    fmt.println("Halfway there)
    fmt.Prinln("All good now."
}

Ada empat masalah. Go melaporkannya dalam urutan ini, karena Go tidak bisa memeriksa nama sebelum tanda baca di seluruh file benar:

  1. String pertama kehilangan penutup ". Go berkata newline in string di baris 15.
  2. Panggilan kedua kehilangan penutup ). Setelah perbaikan pertama, Go berkata syntax error: unexpected newline in argument list; possibly missing comma or ) di baris 16.
  3. fmt.println seharusnya fmt.Println (Go sensitif huruf besar-kecil). Go berkata undefined: fmt.println.
  4. fmt.Prinln bukan fungsi yang nyata. Go berkata undefined: fmt.Prinln dalam proses yang sama dengan masalah 3.

Versi yang berfungsi:

package main

import "fmt"

func main() {
    fmt.Println("Halfway there")
    fmt.Println("All good now.")
}

(Pertahankan kedua baris fmt.Println atau hapus yang pertama. Selama file berjalan dan baris output terakhir adalah All good now., itu sudah benar.)

Kesalahan umum.

  • Memperbaiki baris pertama tapi tidak menjalankan lagi sebelum memeriksa yang kedua. Setiap kali dijalankan, kamu melihat apa yang bisa dilihat Go sekarang, jadi menjalankan setiap kali membuat umpan balik tetap ketat.
  • Memperbaiki Prinln dengan menciptakan fungsi lain. fmt hanya punya nama-nama yang dimilikinya. Kalau ragu, ketik nama pelan-pelan dan periksa terhadap buku.

Tantangan — Cerita tiga baris

Soal. Tulis cerita mikro tiga baris (pembuka, masalah, penyelesaian) dengan blok baris komentar // di bagian atas yang menjelaskan ceritanya.

Cara berpikir. Dua bahan yang sudah kamu tahu: baris // untuk komentar dan fmt.Println untuk output. Sketsa ceritanya dulu dalam bahasa biasa, lalu ubah setiap baris menjadi panggilan fmt.Println.

Solusi yang dikerjakan.

// Cerita kecil tentang pemain yang masuk ke gua, menemukan peti terkunci,
// dan mengingat teka-teki yang membuatnya bisa membuka peti itu.

package main

import "fmt"

func main() {
    fmt.Println("A lone player walked into the cave and saw a chest.")
    fmt.Println("The chest was locked, and the key was nowhere in sight.")
    fmt.Println("She remembered the riddle on the wall and spoke the password.")
}

Kesalahan umum.

  • Lupa // pada baris komentar. Maka Go mencoba membacanya sebagai kode. Kalau letaknya di atas package main, hasilnya error seperti expected 'package', found A.
  • Menaruh komentar di tengah baris kode tanpa //. Semua yang ada setelah // pada sebuah baris adalah komentar; tanpa //, itu adalah kode.

Selesai?

Kalau setiap soal berjalan dengan bersih, kamu sudah menyelesaikan bab pertamamu. Tiga bab berikutnya melengkapi dasar-dasar terminal: komentar untuk meninggalkan catatan, perintah cetak untuk menampilkan hal-hal persis seperti yang kamu inginkan, dan membaca pesan error untuk saat ada yang salah.