07. Hello, World

Program pertama yang jadi tradisi di setiap bahasa pemrograman adalah mencetak Hello, world! lalu selesai. Ukurannya kecil, tapi menulisnya membuktikan bahwa bahasa sudah terpasang, editor sudah dikonfigurasi, dan terminal bisa menjalankan file. Bab ini menulisnya, sengaja merusaknya untuk melihat error, lalu memperbaikinya.

Program lengkapnya

Buka exercises/07/01-hello.lua di VS Code. File ini berisi satu baris:

print("Hello, world!")

Di terminal VS Code, jalankan:

lua exercises/07/01-hello.lua

Terminal mencetak:

Hello, world!

Itulah keseluruhan programnya. Sisa bab ini menjelaskan setiap bagian dari baris tersebut.

Apa yang dilakukan print

print adalah sebuah fungsi — sekumpulan kode yang punya nama dan mengerjakan sesuatu ketika kamu memintanya. Tugas print adalah menuliskan apa pun yang kamu berikan ke terminal, diikuti dengan baris baru.

Tanda kurung ( dan ) setelah nama fungsi adalah cara kamu meminta fungsi itu berjalan. Apa pun yang ada di antara keduanya adalah yang kamu berikan.

print("Hello, world!")
--    ^^^^^^^^^^^^^^^
--    this is what we are giving to print

Dalam Lua, hal-hal yang kamu berikan ke sebuah fungsi disebut argumen. Program di atas memberikan satu argumen ke print: string "Hello, world!".

Ganti teks di dalam tanda kutip dengan namamu sendiri. Simpan dan jalankan lagi. Terminal sekarang seharusnya mencetak namamu.

String

Teks "Hello, world!" adalah sebuah string — urutan karakter. Dalam Lua, string ditulis di antara tanda kutip ganda " atau tanda kutip tunggal '. Keduanya bisa dipakai:

print("Hello, world!")
print('Hello, world!')

Tanda kutip bukan bagian dari string. Tanda itu menandai di mana string dimulai dan di mana string berakhir. Saat string dicetak, hanya yang ada di antara tanda kutip yang muncul.

Mencetak lebih dari satu hal

print bisa menerima lebih dari satu argumen. Pisahkan dengan koma:

print("Hello,", "world!")

Terminal mencetak Hello,, sebuah tab, lalu world!, semuanya dalam satu baris. print meletakkan tab di antara setiap argumen dan baris baru di akhir.

Untuk pemisah yang berbeda, buat satu string sendiri dengan .. (dua titik), yang menyambungkan string:

print("Hello, " .. "world!")

Sekarang outputnya adalah Hello, world! dengan satu spasi di antara kedua kata, karena spasi itu ada di dalam string pertama.

Buat print menampilkan tiga hal dalam satu baris: kata lua, angka 5, dan kata is_fast. Jalankan. Perhatikan bahwa angka itu muncul meskipun tidak ada tanda kutip di sekelilingnya.

Komentar

Komentar adalah teks yang diabaikan Lua ketika menjalankan program. Komentar ditujukan untuk manusia yang membaca kode. Komentar satu baris dimulai dengan --:

-- This line is a comment. Lua does not run it.
print("Hello, world!")  -- A comment can also sit at the end of a line.

Komentar yang mencakup banyak baris dimulai dengan --[[ dan diakhiri dengan ]]:

--[[
  Anything in here is ignored.
  Useful for long explanations
  or for temporarily turning off
  a block of code.
]]
print("Still runs.")

Gunakan komentar untuk menjelaskan mengapa kode melakukan sesuatu, bukan apa yang dilakukan setiap baris. Kode yang baik sudah menjelaskan apa yang dilakukannya.

Membuat dan membaca error

Sekarang sengaja rusak programnya. Di 01-hello.lua, hapus tanda kutip terakhir sehingga barisnya menjadi:

print("Hello, world!)

Simpan dan jalankan. Lua menolak menjalankan file dan mencetak error seperti ini:

lua: exercises/07/01-hello.lua:1: unfinished string near
'"Hello, world!)'
stack traceback:
        [C]: in ?

Baca error dalam urutan ini:

  1. Nama file dan nomor baris (01-hello.lua:1). Ini adalah di mana masalahnya berada. Lihat sini dulu.
  2. Pesan singkat (unfinished string near ...). Ini adalah apa yang salah. "Unfinished string" berarti Lua melihat tanda kutip pembuka dan mulai membuat string, tapi tidak pernah menemukan tanda kutip penutup.
  3. Potongan kode setelah near menunjukkan kode yang membingungkan Lua.

Error bukan hukuman. Error memberi tahu kamu dengan tepat baris mana yang perlu dilihat dan memberi petunjuk tentang apa yang salah.

Perbaiki tanda kutip yang hilang agar program bisa berjalan lagi. Lalu coba kesalahan lain: ganti print menjadi prnt dan jalankan. Baca error baru yang muncul. Apa yang disarankan oleh pesannya? (Tidak perlu menulis jawaban. Perhatikan saja.)

Catatan tentang spasi dan huruf besar-kecil

Lua tidak peduli berapa banyak spasi atau baris kosong yang ada di file kamu. Ketiga contoh ini berjalan dengan cara yang sama:

print("Hello, world!")
    print(   "Hello, world!"   )


print("Hello, world!")

Lua memang memperhatikan huruf besar-kecil. print adalah kata yang berbeda dari Print dan PRINT. Nama bawaan yang benar adalah huruf kecil semua.

PR (Pekerjaan Rumah)

File PR ada di exercises/07/homework/. Buka setiap starter di VS Code, baca komentar di bagian atas, dan selesaikan file tersebut agar bisa berjalan dan menghasilkan keluaran yang diharapkan.

Soal 1 — Sapa dirimu sendiri

Buka exercises/07/homework/01-greet-yourself.lua. File ini kosong kecuali ada sebuah komentar. Tulis tiga pemanggilan print sehingga menjalankan file tersebut menampilkan, pada tiga baris terpisah:

  • sebuah sapaan (pilihan katamu sendiri),
  • nama depanmu,
  • nama game favoritmu.

Soal 2 — Cetak sebuah kutipan

Buka exercises/07/homework/02-print-quote.lua. Cetak sebuah kutipan terkenal di baris pertama dan nama pengarangnya di baris kedua dalam format ini:

"The best way to predict the future is to invent it."
                                            — Alan Kay

(Tanda hubung sebelum nama pengarang bisa berupa tanda hubung biasa -. Spasi yang tepat tidak masalah, asalkan kutipannya ada di satu baris dan nama pengarangnya ada di baris berikutnya.)

Soal 3 — Perbaiki error-nya

Buka exercises/07/homework/03-fix-the-error.lua. File ini tidak bisa dijalankan. Baca error yang dicetak Lua, perbaiki file tersebut, dan jalankan sampai kamu melihat:

All good now.

Ada lebih dari satu kesalahan di dalam file. Temukan semuanya.

Tantangan — Cerita tiga baris

Buka exercises/07/homework/04-three-line-story.lua. Tulis sebuah cerita mini tiga baris di mana:

  • baris pertama menggambarkan latar,
  • baris kedua memperkenalkan masalah,
  • baris ketiga menyelesaikan masalah.

Setiap baris harus dicetak oleh pemanggilan print-nya sendiri. Tambahkan komentar multi-baris --[[ ]] di bagian atas yang menjelaskan, dalam bahasa sehari-hari, tentang apa ceritamu.

Buntu atau sudah selesai? Buka halaman solusi PR untuk panduan penyelesaiannya.