09. Perintah cetak
Sejak Bab 07, fmt.Println adalah jendela kamu ke dalam
program yang sedang berjalan. fmt.Println bisa melakukan
lebih dari sekadar menampilkan satu string, dan punya dua kerabat,
fmt.Print dan fmt.Printf. Bab ini mengumpulkan
trik-trik yang akan kamu gunakan dari sini: beberapa nilai sekaligus,
mengontrol apa yang ada di antara nilai-nilai tersebut, dan baris
kosong.
Seperti sebelumnya, contoh pendek hanya menampilkan baris yang masuk
ke dalam main.
Beberapa nilai, dipisahkan oleh spasi
Pisahkan nilai dengan koma untuk memberikan fmt.Println
lebih dari satu. fmt.Println akan mencetaknya dalam satu
baris dengan spasi di antara masing-masing:
fmt.Println("Name", "Level", "HP")
fmt.Println("Keiko", 7, 95)Output:
Name Level HP
Keiko 7 95
Dua hal yang perlu diperhatikan. Nilai bisa berbeda tipe — string dan
angka dicampur dengan bebas. Dan angka tidak perlu tanda kutip;
7 adalah angka, "7" adalah string.
Mengontrol pemisah
fmt.Println selalu menggunakan satu spasi di antara
nilai, dan tidak ada pengaturan untuk mengubahnya. Untuk menaruh hal
lain di antaranya, sambung sendiri satu string dengan + dan
masukkan pemisahnya ke dalam string itu:
fmt.Println("Name" + ", " + "Level" + ", " + "HP")
fmt.Println("Keiko" + ", " + "7" + ", " + "95")Output:
Name, Level, HP
Keiko, 7, 95
+ hanya menyambung string dengan string, itulah sebabnya
angkanya ditulis "7" dan "95" di sini, dengan
tanda kutip. Tanpa tanda kutip, seperti pada "Keiko" + 7,
Go berhenti dengan error ini:
invalid operation: "Keiko" + 7 (mismatched types untyped string and untyped int)
Penyambungan tidak menambahkan apa pun dengan sendirinya, jadi setiap spasi atau koma harus ada di salah satu string.
Buka exercises/09/01-comma-vs-glue.go. Program ini
mencetak tiga nilai dua kali: sekali dengan koma, sekali disambung
dengan +. Jalankan dan bandingkan dua outputnya. Keduanya
sama, tapi hanya karena versi sambungan menuliskan setiap
" " secara eksplisit. Hapus salah satunya dan jalankan
lagi.
Mengontrol akhiran
fmt.Println menaruh baris baru di akhir. Kerabatnya,
fmt.Print, tidak. Baris baru hanya muncul kalau kamu
menulisnya sendiri, sebagai \n di dalam string:
fmt.Print("Loading")
fmt.Print("... done\n")Output:
Loading... done
Kedua panggilan berada di baris yang sama karena yang pertama tidak diakhiri dengan baris baru.
fmt.Print juga memperlakukan spasi secara berbeda. Spasi
hanya ditambahkan di antara dua nilai kalau tidak satu
pun dari keduanya adalah string:
fmt.Print("Name", "Level", "HP", "\n")
fmt.Print("Keiko", 7, 95, "\n")Output:
NameLevelHP
Keiko7 95
Ada spasi di antara 7 dan 95 karena
keduanya angka, dan tidak ada spasi di tempat lain.
fmt.Printf:
membangun baris dengan tepat
Untuk kontrol penuh atas spasi dan tata letak, gunakan
fmt.Printf (f berarti
"formatted"). Argument pertama adalah string yang berisi penanda, dan
nilai yang dimasukkan mengikutinya, secara berurutan:
%smenandai tempat untuk string.%dmenandai tempat untuk bilangan bulat.
fmt.Printf("%s has %d HP at level %d\n", "Keiko", 95, 7)Output:
Keiko has 95 HP at level 7
Dengan fmt.Printf tidak ada pemisah otomatis — kamu yang
menentukan apa yang ada di antara bagian-bagian, termasuk spasi.
fmt.Printf juga menerima angka secara langsung, tanpa tanda
kutip. Seperti fmt.Print, fmt.Printf tidak
menambahkan baris baru, jadi akhiri string dengan \n.
Koma, +,
atau fmt.Printf: mana yang digunakan?
Semuanya boleh. Panduan kasar:
- Koma: paling cepat ketika output yang dipisahkan spasi sudah cukup (debugging, pengecekan cepat).
+: untuk menyambung beberapa string kalau kamu tidak ingin spasi, atau ingin pemisah yang berbeda.fmt.Printf: untuk kalimat yang rapi dengan spasi dan tanda baca yang tepat, sepertiKeiko has 95 HP.
fmt.Println("Keiko", "has", 95, "HP") // Keiko has 95 HP
fmt.Printf("%s has %d HP\n", "Keiko", 95) // Keiko has 95 HPYang kedua lebih mudah dibaca ketika output perlu terlihat seperti sebuah kalimat.
Baris kosong
fmt.Println() tanpa apa pun di dalamnya mencetak baris
kosong. Gunakan untuk memberi jarak pada output agar lebih mudah
dibaca:
fmt.Println("Chapter 1")
fmt.Println()
fmt.Println("Chapter 2")Output:
Chapter 1
Chapter 2
Angka bukan teks angkanya
Satu hal terakhir. Keduanya terlihat sama tapi adalah tipe yang berbeda:
fmt.Println(7) // angka tujuh
fmt.Println("7") // string yang berisi karakter 7Keduanya menampilkan 7, tapi yang satu adalah angka dan
yang lain teks — tipe yang berbeda. Go tidak menjembatani
perbedaan ini untukmu: "7" + 7 adalah error
mismatched types yang sama seperti di atas. Kamu akan
mengenal tipe di bagian berikutnya. Untuk sekarang, ketahui saja bahwa
angka dan versi teksnya berbeda meskipun terlihat sama. Ini penting di
bab input, di mana apa yang diketik pengguna tiba sebagai teks.
PR
File PR ada di exercises/09/homework/. Setiap starter
bisa langsung dijalankan dan mencetak baris pengganti. Ganti baris itu
dengan kodemu sendiri.
Soal 1 — Baris stat
Buka exercises/09/homework/01-stat-row.go. Menggunakan
satu fmt.Println dengan koma, cetak ini
dalam satu baris: string Keiko, angka 7, dan
angka 95. Jalankan dan perhatikan spasi di antara
nilai-nilai.
Soal 2 — Baris yang rapi
Buka exercises/09/homework/02-polished-line.go. Cetak
baris ini dengan tepat:
Keiko has 95 HP at level 7
menggunakan fmt.Printf, dengan penanda %s
dan %d untuk "Keiko", 95, dan
7. Spasinya harus cocok persis.
Soal 3 — Berikan jarak
Buka exercises/09/homework/03-spaced-out.go. Cetak tiga
baris teks dengan satu baris kosong di antara masing-masing, menggunakan
fmt.Println() untuk baris kosong. Lima panggilan total.
Tantangan — Kwitansi
Buka exercises/09/homework/04-receipt.go. Tiga item
punya harga: apple berharga 3, bread berharga 2, milk berharga 4. Cetak
kwitansi: setiap item di barisnya sendiri menggunakan
fmt.Printf dengan "%s: %d\n", satu baris
kosong, lalu baris total yang juga dibuat dengan
fmt.Printf. Biarkan Go menghitung totalnya dengan menulis
3+2+4 sebagai argument; jangan ketik jawabannya sebagai
angka.
Stuck atau sudah selesai? Buka halaman solusi PR.