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 iniNamun, 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 langsungFleksibilitas ini membuat fungsi-fungsimu dapat digunakan dalam lebih banyak situasi tanpa memaksa pemanggil mengonversi datanya atau melepaskan kepemilikannya.
Tantangan
MudahKamu 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_messageyang menerima dua parameter:- String slice
&struntuk pesan usizeuntuk panjang maksimum
- String slice
- 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
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Alur Kontrol Lanjutan
Ekspresi 'match'Mencocokkan Beberapa NilaiMencocokkan RentangEkspresi 'if let'Perulangan sebagai EkspresiRangkuman, Parser Perintah Sederhana4Mengelompokkan Data dengan Struct
Apa Itu Struct?Ringkasan StructMengakses Field StructStruct yang Dapat DiubahStruct sebagai Parameter FungsiStruct TupleRangkuman: Buat Struct Buku2Pengantar Vektor
Apa Itu Vektor?Membuat VektorMenambahkan Elemen dengan pushMengakses Elemen VektorMelakukan Iterasi pada VektorIterasi MutableMenghapus ElemenRangkuman: Pelacak Skor Dasar5Pasangan Kunci-Nilai dengan Hash Map
Apa Itu Hash Map?Membuat Hash MapMenyisipkan Pasangan Kunci-NilaiMengakses NilaiMenelusuri Hash MapMemperbarui NilaiMenghapus PasanganRangkuman: Penghitung Kata8Proyek: Inventaris Barang Sederhana
Menyiapkan ProyekMenambahkan BarangMemeriksa StokMenjual BarangMenyatukan Semuanya3Daftar Tugas Baris Perintah
Penyiapan ProyekMenambahkan TugasMelihat Semua TugasMenghapus TugasKode Akhir6Menangani Ketiadaan dengan 'Option'
Apa itu 'Option'?Menggunakan 'match' dengan 'Option'is_some() dan is_none()Membuka bungkus 'Option'Metode expectMemberikan Nilai Default: unwrap_orRangkuman: Menemukan Elemen9Potongan String dan Lainnya
String vs. &strMembuat Potongan StringPotongan sebagai Parameter FungsiPotongan LainnyaRangkuman: Temukan Kata PertamaLatihan sendiri: Compiler Rust online