Lewati ke konten

Sintaks Rust

Sekarang kamu sudah bisa menjalankan Rust. Ayo pelan-pelan melihat apa sebenarnya arti setiap bagian sebuah program. Kita pakai contoh sekecil mungkin, lalu membongkarnya satu per satu.

fn main() {
println!("Halo, dunia!");
}

Output:

Halo, dunia!
▶ Coba sendiri
fn main() {
// kodemu dijalankan di sini
}

Setiap program Rust dimulai dari sebuah fungsi bernama main. Saat kamu menjalankan programmu, Rust mencari main dan menjalankan kode di dalamnya.

  • fn adalah keyword untuk mendefinisikan fungsi (sekumpulan kode yang diberi nama).
  • main adalah nama fungsinya. Nama yang satu ini istimewa, karena menjadi titik awal (entry point) program.
  • () berisi input untuk fungsi tersebut (di sini kosong, karena main tidak menerima input apa pun).
  • Kurung kurawal { } membungkus body (badan fungsi), yaitu kode yang menjadi milik fungsi itu.

Di dalam body, setiap instruksi biasanya berupa statement (pernyataan), dan statement diakhiri dengan titik koma ;:

fn main() {
let x = 5;
let y = 10;
println!("{}", x + y);
}

Output:

15
▶ Coba sendiri

Lupa menulis titik koma di tempat yang seharusnya adalah salah satu kesalahan paling umum di kalangan pemula, dan compiler akan langsung menunjuk ke situ.

Kode Rust terdiri dari dua jenis potongan, dan perbedaannya lebih penting di Rust daripada di kebanyakan bahasa lain:

  • Statement melakukan sesuatu tapi tidak menghasilkan nilai. let x = 5; adalah statement.
  • Expression (ekspresi) menghasilkan sebuah nilai. 5, x + 1, dan x * 2 semuanya adalah expression.

Ini bagian yang sering bikin kaget: blok kode di dalam kurung kurawal { } juga merupakan expression. Nilainya adalah baris terakhir yang ditulis tanpa titik koma:

fn main() {
let x = 5;
let y = {
let doubled = x * 2; // sebuah statement di dalam blok
doubled + 1 // tanpa titik koma: ini nilai bloknya
};
println!("y bernilai {y}");
}

Output:

y bernilai 11
▶ Coba sendiri

Blok itu menjalankan statement-statement di dalamnya, lalu mengembalikan doubled + 1, yaitu 11, dan nilai itulah yang menjadi y. Perhatikan titik koma setelah } penutup: seluruh baris let y = ...; tetaplah sebuah statement.

Kalau kamu menambahkan titik koma setelah doubled + 1, baris itu tidak lagi menjadi nilai bloknya. Blok tersebut lalu mengembalikan “tidak ada apa-apa” (Rust menuliskannya sebagai ()), dan println! tidak bisa mencetaknya, jadi kodenya tidak akan bisa di-compile. Aturan “baris terakhir tanpa titik koma” ini persis cara fungsi mengembalikan nilai. Kamu akan melihatnya lagi di halaman Fungsi dan di if sebagai expression.

Perhatikan baik-baik println!. Tanda seru itu bukan salah ketik. Tanda ! berarti ini adalah makro (macro), bukan fungsi biasa.

Kamu belum perlu memahami makro sepenuhnya. Cukup ingat ini: kalau kamu melihat !, berarti itu makro. Untuk sekarang, satu-satunya makro yang akan kamu pakai adalah println! untuk mencetak teks.

fn main() {
println!("Ini pemanggilan makro");
}

Di dalam println!, kurung kurawal {} adalah placeholder (tempat kosong) yang akan diisi dengan nilai-nilai yang kamu berikan setelah teksnya:

fn main() {
let name = "Ferris";
let age = 10;
println!("{} berumur {} tahun", name, age);
}

Output:

Ferris berumur 10 tahun
▶ Coba sendiri

Kamu juga bisa langsung menulis nama variabel di dalam kurung kurawal, yang sering kali lebih rapi:

println!("{name} berumur {age} tahun");

Rust tidak peduli dengan indentasi seperti Python. Rust memakai kurung kurawal { } untuk mengetahui di mana sebuah blok dimulai dan berakhir. Indentasi hanya untuk memudahkan manusia membaca kodenya.

Meski begitu, komunitas Rust punya gaya penulisan standar, dan Rust menyediakan tool untuk menerapkannya secara otomatis:

Terminal window
cargo fmt

Menjalankan cargo fmt akan merapikan kodemu sesuai gaya resmi. Biasakan memakainya.

Kamu bisa meninggalkan catatan di kodemu yang diabaikan oleh Rust. Catatan ini disebut komentar, dan diawali dengan //:

fn main() {
// Ini komentar, Rust melewatinya
println!("Halo!"); // komentar juga bisa ditaruh di akhir baris
}

Kita akan membahas komentar lebih detail di halaman berikutnya.

Buat dua variabel, a = 7 dan b = 3, lalu cetak 7 + 3 = 10. Biarkan Rust yang melakukan penjumlahannya. Petunjuk: sebuah println! bisa punya beberapa placeholder {}, yang diisi berurutan oleh nilai-nilai setelah teksnya.

Lihat solusi
fn main() {
let a = 7;
let b = 3;
println!("{} + {} = {}", a, b, a + b);
}

Output:

7 + 3 = 10
▶ Coba sendiri

Sebuah toko menjual 3 barang dengan harga 4 per barang, ditambah 2 untuk ongkos kirim. Hitung total dengan sebuah blok { }: di dalamnya, buat subtotal, lalu kembalikan subtotal + 2. Cetak Total: 14. Petunjuk: baris terakhir blok tidak boleh diberi titik koma.

Lihat solusi
fn main() {
let price = 4;
let quantity = 3;
let total = {
let subtotal = price * quantity;
subtotal + 2 // ongkos kirim
};
println!("Total: {total}");
}

Output:

Total: 14
▶ Coba sendiri
  • Setiap program dimulai dari fungsi main.
  • Kode ditulis di dalam kurung kurawal { }; kebanyakan statement diakhiri dengan ;.
  • Statement melakukan sesuatu; expression menghasilkan nilai. Baris terakhir sebuah blok yang ditulis tanpa ; adalah nilai blok tersebut.
  • Tanda ! (seperti di println!) berarti itu sebuah makro.
  • {} di dalam println! adalah placeholder yang diisi oleh nilai-nilai yang kamu berikan.
  • Indentasi hanya untuk keterbacaan. Jalankan cargo fmt untuk merapikan kode secara otomatis.

Kuis singkat

1. Apa yang istimewa dari fungsi main di program Rust?

2. Apa arti tanda ! setelah println?

3. Berapa nilai y setelah let y = { let a = 2; a + 1 };?

Skor: 0 / 3