Function, Parameter, Statement, dan Expression Rust

Dasar dari program yang akan kita buat adalah fungsi. Kode blok ini memiliki beberapa fitur dan keistimewaan yang akan kita bahas pada artikel ini.

  1. Fungsi
    1. Format penulisan kode yang salah
    2. Format penulisan kode yang benar
  2. Parameter
    1. Fungsi tanpa parameter
    2. Fungsi dengan parameter
  3. Statement dan Expression
    1. Contoh statement
    2. Contoh Expression
  4. Membuat dan Memanggil Fungsi
    1. Memanggil fungsi tanpa parameter
      1. Output fn fungsi_lain() di panggil
      2. Output fn fungsi_lain tidak dipanggil
    2. Memanggil fungsi dengan parameter
  5. Fungsi yang mengembalikan nilai tanpa parameter
  6. Fungsi yang mengembalikan nilai dengan parameter

Fungsi

Fungsi adalah blok atau sekuen tempat dimana kode ditulis. Untuk membuat sebuah fungsi gunakan syntax fn + nama fungsi. Aturan utama penulisan kode Rust, harus terdapat fungsi utama, yaitu fn main.

Silahkan cek artikel sebelumnya mengenai game tebak angka, variabel, atau tipe data. Kode yang ditulis pasti memiliki fn main. Pasalnya fungsi tersebut merupakan titik masuk untuk semua program Rust. Intinya, fn main adalah bagian vital.

Rust menggunakan gaya penulisan snake case sehingga semua kode ditulis dalam huruf kecil dan spasi digantikan oleh garis bawah “_. Nama variabel, konstanta, dan teks output diperbolehkan menggunakan huruf kapital. Misalnya const JUMLAH_BULAN: i32 = 12;.

Format penulisan kode yang salah

FN mAIn() {

LET harga roti: I32 = 2000;
PRiNtLn!("Harga roti tersebut adalah {harga_roti}");

}

Contoh 1.0

Format penulisan kode yang benar

fn main() {
  
  let harga_roti: i32 = 2000;
  println!("Harga roti tersebut adalah {harga_roti}");

}

Contoh 1.1

Parameter

Parameter adalah bagian dari fungsi yang menggunakan syntax tanda kurung ( ). Dapat diisi oleh variabel atau data dengan syarat tetap menuliskan tipe data seperti i32, f64, isize dsb.

Fungsi tanpa parameter

fn main() {
}

fn fungsi_kedua () {
}

Contoh 1.2

Fungsi dengan parameter

fn main () {
}
fn fungsi_kedua(harga_roti: i32) {
}

Contoh 1.3

Perhatikan pada fn fungsi_kedua terdapat parameter “( ) berisi variabel harga_roti dengan tipe data i32. Parameter pada fungsi juga berhubungan dengan penggunaan kembali kode sehingga tidak diperlukan penulisan ulang.

Functions have parameters so that they can be told to do something different when they are called from different places or different times. In a program this small, there is no need to have any functions but main(), so there is no need for parameters. In more complex programs, functions are absolutely essential — programs would be huge if you couldn’t reuse code to do more than one job and build up complex programs out of small, separable parts.

– Kevin Reid, Forum Rust (2023).

Statement dan Expression

Isi dari function adalah statement dan expression. Secara singkat statement adalah baris kode yang tidak mengembalikan nilai sedangkan ekspression mengembalikan nilai. Kata mengembalikan atau return agaknya sedikit membingungkan.

Agar lebih mudah, analogikan mengembalikan seperti sebuah pantulan bola kasti. Statement berarti bola tidak memantul sebaliknya expression adalah bola yang memantul. Hal yang dipantulkan adalah nilai.

Contoh statement

fn main() {

let harga_roti: i32 = 2000;

}

Contoh 1.4

let harga_roti: i32 = 2000; adalah statement yang diakhiri oleh semi colon “;“. Oleh karena itu, adanya “;” di baris 3 menyebabkan rangkaian kode tidak mengembalikan suatu nilai. Sehingga format penulisan variabel pada Rust tidak bisa menyertakan variabel dalam variabel seperti pada contoh 1.5 .

fn main () {
let harga_tempe: i32 = (let harga_tahu: i32 = 20000);
}

Contoh 1.5

Jika kita memaksakan kode tersebut pada Rust, akan terjadi error. let harga_tahu: i32 = 20000; adalah sebuah statement. Sehingga tidak akan mengembalikan sebuah nilai pada variabel let harga_tempe: i32.

cargo run  
   Compiling function v0.1.0 (/home/qoory/Rustaceans/function)
error: expected expression, found `let` statement
 --> src/main.rs:2:25
  |
2 | let harga_tempe: i32 = (let harga_tahu: i32 = 20000);

Contoh 1.6

Untuk memahami statement dan expression secara komprenhensif. Saya menyarankan untuk membaca blog Nicky Meuleman.

Contoh Expression

fn main() {

let harga_tempe: i32 = {
    let harga_kedelai: i32 = 2000;
    harga_kedelai + 500
};

println!("Harga tempe satu gulung adalah {harga_tempe}");

}

Contoh 1.7

Kurung kurawal “{ } digunakan untuk membentuk sebuah blok kode baru. Blok tersebut adalah expression karena nantinya akan mengembalikan sebuah nilai. Pengembalian nilai dipengaruhi oleh isi pada kurung kurawal { }, yaitu harga_kedelai + 500. Perhatikan bahwa pada akhiran kode tidak terdapat semi colon “;“.

Mekasime program tersebut bertumpu pada expression harga_kedelai + 500. Secara eksplisit dituliskan menjadi 2000+500 kemudian mengembalikan nilai 2500 pada variabel harga_tempe. Error akan terjadi jika harga_kedelai + 500 ditambahkan oleh semi colon ;, menjadi statement (tidak mengembalikan nilai).

>>>cargo run
   Compiling function v0.1.0 (/home/qoory/Rustaceans/function)
error[E0308]: mismatched types
 --> src/main.rs:3:24
  |
3 |   let harga_tempe: i32 = {
  |  ________________________^
4 | |     let harga_kedelai: i32 = 2000;
5 | |     harga_kedelai +  500;
  | |                         - help: remove this semicolon to return this value
6 | | };
  | |_^ expected `i32`, found `()`

Contoh 1.8

Perthatikan pesan error pada contoh 1.8 saat mencoba menambahkan semi colon “;“.

Remove this semicolon to return this value.

– Compiler

Cara penggunaan

Terdapat banyak variasi yang bisa dilakukan dengan function, parameter, statement, dan expression. Bahkan bisa saja tidak lengkap terangkum dalam tulisan ini.

Membuat dan Memanggil Fungsi

fn main adalah fungsi utama yang harus ada pada program. Bukan berarti kita tidak bisa membuat fungsi lain. Tentunya bisa, gunakan syntax fn + nama fungsi. Setelah itu panggil fungsi tersebut ke dalam fungsi utama.

Memanggil fungsi tanpa parameter

fn fungsi_lain(){

  println!("Hello word");

}

fn main(){

  println!("Welcome . . .");

  fungsi_lain();

}

Contoh 1.9

fn fungsi_lain() mendahului blok fungsi utama fn main(), hal ini tidak menjadi masalah. Penempatan fungsi lain bisa sebelum atau sesudah fn main. Kemudian pemanggilan fungsi menggunakan perintah fungsi_lain(); yang berada di dalam blok fn main. Tindakan tersebut akan mengembalikan nilai berupa println!(“Hello word”);. Maka dari itu, pemanggilan fungsi adalah sebuah expression.

Output fn fungsi_lain() di panggil

cargo run
   Compiling function v0.1.0 (/home/qoory/Rustaceans/function)
    Finished dev [unoptimized + debuginfo] target(s) in 0.20s
     Running `target/debug/function`
Hello word
Welcome . . .

Contoh 2.0

Output fn fungsi_lain tidak dipanggil

cargo run
   Compiling function v0.1.0 (/home/qoory/Rustaceans/function)
warning: function `fungsi_lain` is never used
Welcome . . .

Contoh 2.1

Fungsi selain fn main, yaitu fn fungsi_lain ketika tidak di panggil akan menjadi dead code atau kode mati sehingga println!(“Hello word”); tidak ditampilkan saat program dijalankan. Ingat bahwa fn main adalah entri poin bagi program.

Memanggil fungsi dengan parameter

Untuk memanggil fungsi dengan parameter pastikan mendeklarasikan tipe data yang dimuat dalam tanda kurung ( ), contohnya i32, i64, f64, dll. Perhatikan contoh 2.2.

fn main() {

    harga_bayam(3000);
  
}
  
fn harga_bayam(x: i32) {
  
    println!("Harga bayam adalah: {x}");
  
}

Contoh 2.2

Inti dari program tersebut adalah harga_bayam(3000); memanggil fungsi fn harga_bayam(x: i32). Parameter pada fn harga_bayam merupakan sebuah variabel x dengan tipe data i32. Fungsi tersebut dipanggil dengan harga_bayam(3000); yang memiliki parameter angka 3000.

Secara eksplisit x: i32 = 3000. Kode tersebut akan ditampilkan bersamaan dengan pengembalian nilai dari fn fungsi_lain. Output program di atas lihat contoh 2.3.

cargo run
   Compiling function v0.1.0 (/home/qoory/Rustaceans/function)
    Finished dev [unoptimized + debuginfo] target(s) in 0.81s
     Running `target/debug/function`
Harga bayam adalah: 3000

Contoh 2.3

Fungsi yang mengembalikan nilai tanpa parameter

Untuk membuat fungsi yang mengembalikan suatu nilai pastikan mendeklarasikan tipe return value dengan sytntax “– >” dan tipe data seperti i32, f64, usize, dll. Fungsi dapat mengembalikan suatu nilai dikarenakan memiliki expression.

fn main() {

  let x: i32 = harga_martabak();
  
  println!("Harga martabak adalah: {x}"); 
}

fn harga_martabak() -> i32 {
  9000
} 

Contoh 2.5

Ternyata fungsi yang mengembalikan nilai dapat menjadi nilai variabel let x: i32. Kuncinya ada pada “pengembalian nilai”. Hal inilah yang menyebabkan fungsi fn harga_martabak() -> i32 tidak memiliki kode apapun selain angka 9000 tanpa semi colon, agar menjadi expression bukan statement. Perhatikan output contoh 1.

cargo run
   Compiling function v0.1.0 (/home/qoory/Rustaceans/function)
    Finished dev [unoptimized + debuginfo] target(s) in 0.18s
     Running `target/debug/function`
Harga martabak adalah: 9000

Contoh 2.6

Fungsi yang mengembalikan nilai dengan parameter

Kita dapat menjadikan fungsi mengembalikan suatu nilai dan memiliki parameter. Hal yang harus selalu diingat adalah tipe data harus eksplisit dituliskan seperti pada contoh 2.7.

fn main() {

  let y: i32 = harga_martabak(1500);
    
  println!("Harga martabak adalah: {y}"); 
}
  
fn harga_martabak( x: i32) -> i32 {
   x + 9000
} 

Contoh 2.7

Hal mendasar yang perlu diperhatikan adalah pengembalian nilai dari bentuk expression x + 9000 dimana x adalah variabel. x juga dideklarasikan pada parameter ( x: i32) sebagai pertanda bahwa saat dipanggil pada fn main terdapat angka 1500.

Mekanisme dari program tersebut adalah memasukan terlebih dahulu nilai dari variabel x pada parameter, yaitu 1500 . Sehingga expression tersebut menjadi 1500 + 9000 = 10500. Angka 10500 adalah bentuk pengembalian nilai hasil penjumlahan.

cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/function`
Harga martabak adalah: 10500

Contoh 2.8

Catatan

Expression dapat menjadi bagian dari statement. Pada dasarnya Rust adalah bahasa ekspresi. Sehingga hampir sebagian besar kode adalah ekspression.

fn main() {

  let a: i32 = 200;

}

let a: i32 = 200; adalah sebuah statement yang terdiri dari expression, yaitu 200. Angka 200 mengembalikan nilai 200. Pengembalian nilai bukan hanya hasil penjumlahan saja seperti pada contoh 2.7.

Kalimat tersebut sedikit aneh. Tetapi dapat dipahami ketika contoh 1.6 yang bukan merupakan sebuah expression. Kemudian dijelaskan pada contoh 1.7 mengenai expression bernilai 2500. Oleh karena itu, nilai 2500 adalah expression yang mengembalikan nilai 2500 sehingga dapat disandingkan dengan variabel.

Penutupan

Agar dapat memahami konsep function, parameter, statement, dan expression dibutuhkan trial & error. Apalagi untuk pelajar seperti saya yang tidak memiliki latar belakang pemrograman sistem. Tetapi, saya tidak pernah berkecil hati. Selama ada waktu artinya masih ada kesempatan.

Untuk memahami konsep dalam bahasa pemrograman, saya biasanya menggali, memahami pola dan cara kerja kode. Dalam imajinasi saya ketika memanggil sebuah fungsi, ibaratkan menggeser-geser sebuah balok.


Discover more from Qorinotes

Subscribe to get the latest posts sent to your email.

Qori Avatar

Published by

Categories:

One response to “Function, Parameter, Statement, dan Expression Rust”

  1. Akhirnya Aku Bisa Membedakan Stament dan Expression – Qorinotes Avatar

    […] untuk belajar lagi soal statement dan ekspression dari blog Nicky Meuleman dan tulisan aku sendiri di sini. Sebenarnya perbedaan keduanya masih agak rancu […]

    Like