0Pricing
Learn Rust Coding · Pelajaran

Struct dan Enum Generik

Bangun tipe data yang fleksibel.

Struct dan Enum Generik adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 2 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.

Struktur Data Generik

Sama seperti fungsi, struct dan enum dapat bersifat generik untuk satu tipe atau lebih. Dengan demikian, satu definisi dapat menyimpan nilai dari tipe apa pun.

Pustaka standar dibangun dengan cara ini: Vec<T>, Option<T>, dan Result<T, E> semuanya bersifat generik.

Struct Generik

Deklarasikan parameter tipe setelah nama struct, lalu gunakan parameter tersebut untuk field. Di sini Point menyimpan dua nilai dengan tipe T yang sama.

Satu definisi kini dapat digunakan untuk titik bilangan bulat, titik pecahan, dan lainnya.

struct Point<T> {
    x: T,
    y: T,
}

Membuat Struct Generik

Saat membuat instance, kompiler menyimpulkan T dari nilai field. Kedua field harus memiliki tipe yang sama.

Program ini membuat titik bilangan bulat dan titik pecahan dari struct yang sama.

struct Point<T> {
    x: T,
    y: T,
}

fn main() {
    let a = Point { x: 1, y: 2 };
    let b = Point { x: 1.5, y: 4.0 };
    println!("{} {}", a.x, b.y);
}

Parameter Tipe Campuran

Menggunakan dua parameter memungkinkan field memiliki tipe berbeda. Pair<T, U> dapat menyimpan bilangan bulat dan string secara bersamaan.

Pilih satu parameter ketika field harus sama, dan beberapa parameter ketika field boleh berbeda.

struct Pair<T, U> {
    first: T,
    second: U,
}

Metode pada Struct Generik

Untuk menambahkan metode, ulangi parameter tipe pada blok impl: impl<T> Point<T>. Parameter setelah impl mendeklarasikannya; parameter setelah nama tipe menerapkannya.

Di sini getter mengembalikan referensi ke field x.

struct Point<T> {
    x: T,
    y: T,
}

impl<T> Point<T> {
    fn x(&self) -> &T {
        &self.x
    }
}

Metode dengan Batasan

Anda dapat menulis metode hanya untuk tipe konkret tertentu atau untuk tipe yang memenuhi suatu batasan. impl ini hanya berlaku untuk Point<f64>.

Jadi dist_from_origin tersedia pada titik pecahan, tetapi tidak pada titik bilangan bulat.

struct Point<T> { x: T, y: T }

impl Point<f64> {
    fn dist_from_origin(&self) -> f64 {
        (self.x * self.x + self.y * self.y).sqrt()
    }
}

Enum Generik

Enum juga dapat bersifat generik. Setiap varian dapat membawa data generik. Ini menyerupai Option standar, yang berupa Some(T) atau None.

Mendefinisikannya sendiri membantu Anda memahami cara kerja tipe pustaka tersebut.

enum Maybe<T> {
    Just(T),
    Nothing,
}

Dua Parameter dalam Enum

Result menggunakan dua parameter agar nilai sukses dan nilai error dapat memiliki tipe berbeda. Berikut versi sederhananya.

Beberapa parameter tipe dalam enum memungkinkan penanganan error yang fleksibel di seluruh ekosistem.

enum Either<L, R> {
    Left(L),
    Right(R),
}

Mencocokkan Enum Generik

Anda mencocokkan pola enum generik sama seperti enum konkret. Muatan yang dibatasi menjadi binding di dalam arm.

Program ini membuka Maybe khusus dan mencetak nilai yang terkandung atau nilai fallback.

enum Maybe<T> { Just(T), Nothing }

fn main() {
    let m: Maybe<i32> = Maybe::Just(5);
    match m {
        Maybe::Just(n) => println!("got {}", n),
        Maybe::Nothing => println!("empty"),
    }
}

Membungkus Nilai

Pola yang common adalah struct pembungkus dengan satu field bertipe T serta beberapa metode pembantu. Di sini Wrapper menyimpan dan mengembalikan nilai apa pun.

Ini adalah dasar pola newtype dan tipe yang menyerupai penunjuk cerdas.

struct Wrapper<T> { inner: T }

impl<T> Wrapper<T> {
    fn new(v: T) -> Self {
        Wrapper { inner: v }
    }
}

fn main() {
    let w = Wrapper::new("hi");
    println!("{}", w.inner);
}

Tanpa Beban Tambahan Saat Runtime

Struct dan enum generik juga dimonomorfisasi. Point<i32> dan Point<f64> menjadi dua tipe berbeda yang sepenuhnya terspesialisasi setelah kompilasi.

Tidak ada pengalihan tersembunyi atau tag untuk tipe generik itu sendiri.

Pemeriksaan Singkat

Uji pemahaman Anda tentang struct dan enum generik.

Rangkuman

Struct dan enum mendeklarasikan parameter tipe setelah namanya dan menggunakannya pada field serta varian, sehingga memungkinkan wadah yang dapat digunakan kembali seperti Option dan Result.

Metode mengulangi parameter pada impl<T>, dan Anda dapat menulis blok impl khusus untuk tipe konkret. Semuanya dimonomorfisasi tanpa beban tambahan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Struct dan Enum Generik” gratis?

Ya — teks lengkap “Struct dan Enum Generik” 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 “Struct dan Enum Generik”?

Bangun tipe data yang fleksibel. 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 2 dari 4.

Berapa lama pelajaran “Struct dan Enum Generik” 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

  1. Fungsi Generik
  2. Struct dan Enum Generik
  3. Batas Trait
  4. Klausa where dan Banyak Batas
← Kembali ke Learn Rust Coding