Fungsi#

Fungsi#

Fungsi merupakan sebuah abstraksi dari proses khusus yang kemudian mengembalikan nilai. Sebuah prosedur merupakan sebuah abstraksi rangkaian dari proses khusus yang serupa dengan fungsi, namun prosedur tidak mengembalikan apa-apa.

Fungsi dalam Rust#

Dalam bahasa Rust, fungsi dideklarasikan dengan keyword fn.

// Sebuah fungsi
fn a_function() -> i32 {

}

// Sebuah fungsi dengan parameter
fn a_function_with_param(a: i32) -> i32 {
   a + 1
}

Saat sebuah fungsi mengembalikan nilai, kita harus menuliskan secara eksplisit tipe apa yang ia kembalikan dengan tanda ->. Lalu karena Rust merupakan expression-oriented language, kita tidak perlu menuliskan keyword return pada saat mengembalikan nilai. Cukup menuliskan nilai yang dikembalikan tanpa titik koma seperti yang terlihat diatas.

Early Return#

Ada kalanya kita menginginkan sebuah nilai untuk dikembalikan duluan sebelum proses sebuah fungsi berakhir. Disinilah kita menggunakan keyword return dengan benar pada Rust.

fn early_return(a: i32) -> i32 {
    if a > 10 {
        return 20;
    }

    a + 3
}

Fungsi diatas akan mengembalikan 20 bila parameter a lebih besar dibanding 10, dan mengabaikan a + 3 dibawahnya.

Prosedur dalam Rust#

Disini kita akan membahas lebih detail tentang prosedur. Sebuah prosedur biasanya adalah sebuah rangkaian dari proses khusus yang dijalankan untuk mengubah sesuatu, dan tidak mengembalikan apa-apa. Contoh dari sebuah prosedur untuk mengubah nilai sebuah variabel adalah berikut:

fn change_value(a: &mut i32) {
    *a += 3;
}

fn main() {
    let mut a = 5;
// 5
println!("Sebelum prosedur: {}", a);
change_value(&mut a);
// 8
println!("Setelah prosedur: {}", a);
}

Prosedur tersebut menerima sebuah mutable reference atau reference yang dapat diubah kepada sebuah nilai, dan kemudian mengubah nilai tersebut. Tanda asterisk * diatas berfungsi untuk men-dereference nilai dari reference diatas, sehingga ia mengubah nilai yang direferensikan reference tersebut.

Latihan#

Seperti pada materi sebelumnya, kerjakan latihan yang berada pada file lib.rs dalam folder src. Ganti todo!() dengan jawabanmu, kemudian jalankan cargo test!