Lompati ke konten utama
Modul 4 · Pelajaran 1 dari 27/14 dalam kursus~12 min
Pelajaran modul (1/2)

Mendefinisikan dan Membuat Instansiasi Struktur

Structs (atau struktur) di Rust adalah tipe data khusus yang memungkinkan Anda mengelompokkan beberapa nilai terkait menjadi satu. Mereka mirip dengan objek atau kelas dalam bahasa lain, tetapi tanpa pewarisan.

Mendefinisikan Struktur

Untuk mendefinisikan sebuah struct, kita menggunakan kata kunci struct diikuti dengan nama di PascalCase. Di dalamnya, kami mendefinisikan nama dan jenis bidang:

Rust
struct User {
    username: String,
    email: String,
    active: bool,
    sign_in_count: u64,
}

Membuat Instance

Untuk menggunakan struct, kita harus membuat sebuah instance dengan mengisi semua kolom yang ditentukan:

Rust
fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    // Access fields using dot notation
    println!("Is user {} active? {}", user1.username, user1.active);
}

Mutabilitas Struktur

Di Rust, seluruh instance harus ditandai sebagai bisa berubah (mut) jika Anda ingin mengubah salah satu kolomnya. Rust tidak mengizinkan penandaan hanya bidang tertentu sebagai bisa berubah:

Rust
fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    user1.active = false; // Valid because user1 is mutable!
}

Struktur Tuple dan Struktur Seperti Unit

Rust juga mendukung dua format struct lain selain struct bidang bernama klasik:

  1. Struktur Tuple: Bidang tersebut memiliki nama terkait namun bidangnya tidak memiliki nama tersendiri, hanya jenis saja. Mereka berguna untuk mendefinisikan dan membedakan tipe tertentu:
    Rust
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
  2. Struktur Seperti Unit: Struktur tersebut tidak mendefinisikan kolom apa pun. Mereka berperilaku seperti tipe unit (). Mereka berguna ketika Anda perlu mengimplementasikan perilaku (sifat) pada suatu tipe tanpa menyimpan data apa pun di dalamnya.

Cobalah sendiri

Latihan#rust.m4.l1.e1
Upaya: 0Memuat…

Tentukan struct Pengguna di atas main dengan bidang: nama pengguna (tipe String) dan aktif (tipe bool).

Memuat editor…
Tunjukkan petunjuk

Tulis `struct User { nama pengguna: String, aktif: bool }`sebelum`main`.

Solusi tersedia setelah 3 upaya

Latihan#rust.m4.l1.e2
Upaya: 0Memuat…

Ubah pengguna1 agar bisa berubah (biarkan mut pengguna1) dan ubah bidang aktif menjadi false sebelum mencetak.

Memuat editor…
Tunjukkan petunjuk

Tambahkan `mut`to`let user1`untuk menjadikannya`let mut user1`, lalu masukkan `user1.active = false;`.

Solusi tersedia setelah 3 upaya

Latihan#rust.m4.l1.e3
Upaya: 0Memuat…

Tentukan struct tupel bernama Color yang berisi tiga bidang i32. Di main, contohkan Warna dengan nilai 255, 0, dan 100 dengan menugaskannya ke variabel my_color, lalu cetak elemen pertamanya (nilai merah) menggunakan println!.

Memuat editor…
Tunjukkan petunjuk

Tentukan struct tupel dengan `struct Color(i32, i32, i32);`. Secara utama, buat instance-nya sebagai `let my_color = Color(255, 0, 100);`dan cetak nilai merah dengan`my_color.0`.

Solusi tersedia setelah 3 upaya