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:

  • %s menandai tempat untuk string.
  • %d menandai 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, seperti Keiko 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 HP

Yang 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 7

Keduanya 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.