Klausa where dan Banyak Batas
Jaga agar tanda tangan kompleks tetap mudah dibaca.
Klausa where dan Banyak Batas adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Saat Batasan Sebaris Menjadi Rumit
Batasan sebaris seperti <T: Display + Clone, U: Debug + Default> menjadi sulit dibaca ketika bertambah panjang. Rust menyediakan klausa where sebagai alternatif yang lebih rapi.
Klausa ini memindahkan batasan ke bawah tanda tangan, sehingga daftar parameter tetap singkat.
Klausa where Dasar
Klausa where berada di antara tipe kembalian dan isi fungsi. Setiap baris mencantumkan sebuah tipe beserta batasannya.
Kedua tanda tangan ini memiliki arti yang persis sama; bentuk where hanya lebih mudah dibaca.
use std::fmt::Display;
fn show<T>(value: T)
where
T: Display,
{
println!("{}", value);
}Beberapa Batasan dalam where
Anda dapat menempatkan beberapa batasan, satu untuk setiap parameter tipe, yang dipisahkan dengan koma. Masing-masing dapat menggabungkan sifat dengan +.
Dengan begitu, tanda tangan yang padat tetap mudah dibaca dibandingkan jika semuanya dijejalkan secara sebaris.
use std::fmt::{Display, Debug};
fn report<T, U>(a: T, b: U)
where
T: Display + Clone,
U: Debug,
{
println!("{} {:?}", a, b);
}Contoh Lengkap
Program ini menggunakan klausa where yang mengharuskan Display. Program ini berjalan dan mencetak setiap argumen beserta labelnya.
Perhatikan bahwa kepala fungsi tetap rapi meskipun batasannya dicantumkan.
use std::fmt::Display;
fn label<T>(name: &str, value: T)
where
T: Display,
{
println!("{} = {}", name, value);
}
fn main() {
label("age", 30);
label("city", "Oslo");
}Batasan yang Tidak Dapat Ditulis Sebaris oleh Kompiler
Beberapa batasan hanya dapat ditulis dalam klausa where, misalnya batasan pada tipe terkait atau tipe yang direferensikan. Sintaks sebaris tidak dapat menyatakan where Vec<T>: Clone.
Karena itu, bentuk where lebih ekspresif.
fn duplicate<T>(items: Vec<T>) -> (Vec<T>, Vec<T>)
where
Vec<T>: Clone,
{
(items.clone(), items)
}Menggabungkan Sifat Standar
Batasan yang umum dalam penggunaan nyata menggabungkan pengurutan, penyalinan, dan pencetakan. Generik max_of ini menemukan item terbesar dalam sebuah irisan.
Klausa where mengelompokkan ketiga sifat yang diperlukan algoritme.
use std::fmt::Display;
fn max_of<T>(items: &[T]) -> &T
where
T: PartialOrd + Display,
{
let mut best = &items[0];
for item in items {
if item > best { best = item; }
}
best
}Menjalankan max_of
Berikut gagasan yang sama dalam program yang dapat dijalankan. Irisan bilangan bulat memenuhi PartialOrd + Display, sehingga pemanggilan dapat dikompilasi dan mencetak nilai maksimum.
Fungsi ini juga akan bekerja dengan baik pada bilangan pecahan atau karakter.
fn max_of<T>(items: &[T]) -> &T
where
T: PartialOrd,
{
let mut best = &items[0];
for item in items {
if item > best { best = item; }
}
best
}
fn main() {
let nums = [3, 7, 1, 9, 4];
println!("{}", max_of(&nums));
}where pada Blok impl
Klausa where juga dapat diterapkan pada blok impl. Dengan ini, sebuah metode hanya ditambahkan ketika tipe yang disimpan menerapkan Display.
Instans yang T-nya bukan Display tidak akan memiliki metode ini.
use std::fmt::Display;
struct Holder<T> { item: T }
impl<T> Holder<T>
where
T: Display,
{
fn print(&self) {
println!("{}", self.item);
}
}Banyak Batasan Sekaligus
Antarmuka pemrograman generik nyata sering memerlukan beberapa sifat untuk setiap parameter. Tanda tangan ini mengharuskan penyalinan, pemeriksaan kesalahan, dan nilai bawaan.
Klausa where membuatnya tetap mudah dibaca meskipun ada tiga batasan pada satu tipe.
use std::fmt::Debug;
fn build<T>() -> T
where
T: Default + Clone + Debug,
{
let v = T::default();
v.clone()
}Memilih Sebaris atau where
Gunakan batasan sebaris untuk satu atau dua batasan sederhana. Beralihlah ke where jika terdapat banyak parameter, daftar sifat yang panjang, atau batasan pada tipe yang kompleks.
Keduanya dikompilasi menjadi kode yang identik; pilihannya semata-mata berkaitan dengan keterbacaan.
where dengan Masa Hidup
Klausa where dapat mencantumkan hubungan masa hidup bersama batasan sifat. Dengan demikian, tanda tangan generik yang memiliki kedua jenis batasan tetap teratur.
Di sini, klausa tersebut mengharuskan T hidup lebih lama daripada masa hidup 'a.
fn keep<'a, T>(value: &'a T) -> &'a T
where
T: 'a,
{
value
}Pemeriksaan Singkat
Uji pemahaman Anda tentang klausa where dan beberapa batasan.
Ringkasan
Klausa where memindahkan batasan sifat ke bawah tanda tangan, sehingga keterbacaan meningkat ketika parameter atau daftar sifat bertambah panjang. Klausa ini juga dapat menyatakan batasan pada tipe kompleks dan masa hidup yang tidak dapat dinyatakan oleh sintaks sebaris.
Batasan sebaris dan where dikompilasi secara identik, jadi pilihlah bentuk yang lebih mudah dibaca.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Klausa where dan Banyak Batas” gratis?
Ya — teks lengkap “Klausa where dan Banyak Batas” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Klausa where dan Banyak Batas”?
Jaga agar tanda tangan kompleks tetap mudah dibaca. Kamu berlatih Learn Rust Coding dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Learn Rust Coding?
Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Klausa where dan Banyak Batas” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn Rust Coding ini?
Ya. Setiap pelajaran Learn Rust Coding menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Fungsi Generik
- Struct dan Enum Generik
- Batas Trait
- Klausa where dan Banyak Batas