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.Printlnyang 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 membacaHellodantheresebagai 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:
- Bungkus string luar dengan backtick:
`"kutipan di sini"`. - 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 kataThedan berhenti dengansyntax 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 sebagaiinvalid 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:
- String pertama kehilangan penutup
". Go berkatanewline in stringdi baris 15. - Panggilan kedua kehilangan penutup
). Setelah perbaikan pertama, Go berkatasyntax error: unexpected newline in argument list; possibly missing comma or )di baris 16. fmt.printlnseharusnyafmt.Println(Go sensitif huruf besar-kecil). Go berkataundefined: fmt.println.fmt.Prinlnbukan fungsi yang nyata. Go berkataundefined: fmt.Prinlndalam 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
Prinlndengan menciptakan fungsi lain.fmthanya 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 ataspackage main, hasilnya error sepertiexpected '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.