Fungsi di Rust — Rust

Fungsi di Rust Fungsi di Rust dideklarasikan dengan keyword fn. Rust mengharuskan kita mendeklarasikan tipe parameter dan tipe return secara eksplisit…

Fungsi adalah resep bernama: ia menerima bahan (parameter), mengolahnya, lalu menyerahkan hasilnya (return value). Di Rust, tipe tiap bahan dan tipe hasilnya wajib ditulis. Bayangin kartu hitung di meja kasir Kedai Martabak Bang Rusdi: "beri aku harga dan jumlah porsi, aku kembalikan totalnya". Kotak bahannya berlabel: harga harus angka bulat, porsi juga. Hasilnya diserahkan lewat piring di baris terakhir resep. Kalau piring itu malah ditutup titik koma, yang sampai ke kasir cuma nampan kosong.

🧪 Tebakan cepat: di fungsi total_harga, baris terakhirnya diberi titik koma: harga * porsi;. Apakah program masih mencetak Total: 76000? Tebak dulu, jawabannya ada di bagian "Expression dan statement".

Membuat dan memanggil fungsi

fn total_harga(harga: u32, porsi: u32) -> u32 {
    harga * porsi
}

fn main() {
    let total = total_harga(38000, 2);
    println!("Total: {}", total);
}
Total: 76000

Expression dan statement

Rust membedakan dua jenis baris:

Titik koma mengubah expression jadi statement. Ini kode tebakan tadi:

error[E0308]: mismatched types
 --> src/main.rs:1:43
  |
1 | fn total_harga(harga: u32, porsi: u32) -> u32 {
  |    -----------                            ^^^ expected `u32`, found `()`
  |    |
  |    implicitly returns `()` as its body has no tail or `return` expression
2 |     harga * porsi;
  |                  - help: remove this semicolon to return this value

return, dan fungsi tanpa hasil

fn total_harga(harga: u32, porsi: u32) -> u32 {
    return harga * porsi;
}

fn cetak_struk(menu: &str, total: u32) {
    println!("{}: {}", menu, total);
}

fn main() {
    cetak_struk("Martabak telur x2", total_harga(38000, 2));
}
Martabak telur x2: 76000

Memilih hasil dengan if

Fungsi sering harus memilih hasilnya. Detail if ada di pelajaran berikutnya. Untuk sekarang, pola ini yang perlu kamu kenal:

fn harga_menu(menu: &str) -> u32 {
    if menu == "manis" {
        32000
    } else if menu == "telur" {
        38000
    } else if menu == "es teh" {
        5000
    } else {
        0
    }
}

fn main() {
    println!("{}", harga_menu("telur"));
    println!("{}", harga_menu("bakso"));
}
38000
0

⚠️ Jebakan yang sering ketemu

TL;DR: Fungsi ditulis fn nama(param: Tipe, ...) -> TipeHasil { ... }. Tiap parameter wajib bertipe, dan -> menulis tipe hasilnya. Hasil fungsi adalah expression terakhir tanpa titik koma: harga * porsi. Titik koma mengubahnya jadi statement yang menyerahkan (), dan compiler menolak dengan expected `u32`, found `()` plus saran menghapus titik koma. return keluar lebih awal, dan fungsi tanpa -> menyerahkan (). Untuk memilih hasil, pakai if ... else if ... else, tiap cabang berisi nilai tanpa titik koma.

Yang akan kamu pelajari