Menu
CoddyTech

Potongan sebagai Parameter Fungsi

Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 56 dari 66.

Saat menulis fungsi yang bekerja dengan string, menggunakan &str sebagai tipe parameter alih-alih String membuat fungsi jauh lebih fleksibel dan berguna.

Fungsi yang menggunakan parameter String hanya dapat menerima string yang dimiliki, sehingga membatasi cara kamu memanggilnya:

fn print_message(text: String) {
    println!("{}", text);
}

// Ini berhasil, tetapi mengambil kepemilikan
let my_string = String::from("Hello");
print_message(my_string); // my_string tidak bisa digunakan lagi setelah ini

Namun, fungsi yang menerima &str dapat menerima referensi String dan string literal, sehingga jauh lebih serbaguna:

fn print_message(text: &str) {
    println!("{}", text);
}

// Sekarang kamu bisa memanggilnya dengan salah satu tipe
let my_string = String::from("Hello");
print_message(&my_string); // Berikan referensi ke String
print_message("World");     // Berikan literal string secara langsung

Fleksibilitas ini membuat fungsi-fungsimu dapat digunakan dalam lebih banyak situasi tanpa memaksa pemanggil mengonversi datanya atau melepaskan kepemilikannya.

challenge icon

Tantangan

Mudah

Kamu akan menerima dua input. Input pertama adalah pesan teks, dan input kedua adalah panjang maksimum yang diizinkan untuk pesan tersebut. Buat fungsi bernama truncate_message yang menerima string slice (&str) dan panjang maksimum (usize) sebagai parameter. Jika panjang pesan melebihi panjang maksimum, fungsi harus mengembalikan slice pesan hingga panjang maksimum. Jika tidak, fungsi harus mengembalikan seluruh pesan. Cetak hasilnya.

Persyaratan:

  • Baca input pertama (pesan teks) dan hapus spasi di awal dan akhir
  • Baca input kedua (panjang maksimum) dan hapus spasi di awal dan akhir
  • Parse panjang maksimum menjadi usize
  • Definisikan fungsi truncate_message yang menerima dua parameter:
    • String slice &str untuk pesan
    • usize untuk panjang maksimum
  • Di dalam fungsi, periksa apakah panjang pesan lebih besar daripada panjang maksimum
  • Jika ya, kembalikan slice pesan dari indeks 0 hingga panjang maksimum menggunakan &message[0..max_len]
  • Jika tidak, kembalikan seluruh pesan
  • Panggil fungsi dengan pesan input dan panjang maksimum
  • Cetak hasil yang dikembalikan

Input:

  • Baris pertama: Pesan teks (misalnya, Hello World from Rust)
  • Baris kedua: Panjang maksimum berupa angka (misalnya, 11)

Output:

  • Pesan yang dipotong jika panjangnya melebihi panjang maksimum, atau seluruh pesan jika tidak

Coba sendiri

use std::io;

// TODO: Definisikan fungsi truncate_message di sini


fn main() {
    // Baca pesan teks
    let mut message = String::new();
    io::stdin().read_line(&mut message).expect("Failed to read line");
    let message = message.trim();
    
    // Baca panjang maksimum
    let mut max_length_input = String::new();
    io::stdin().read_line(&mut max_length_input).expect("Failed to read line");
    let max_len: usize = max_length_input.trim().parse().expect("Invalid number");
    
    // TODO: Panggil fungsi truncate_message dan simpan hasilnya
    
    // TODO: Cetak hasilnya
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Rust online