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:
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:
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:
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:
- 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); - 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
Tentukan struct Pengguna di atas main dengan bidang: nama pengguna (tipe String) dan aktif (tipe bool).
Tunjukkan petunjuk
Tulis `struct User { nama pengguna: String, aktif: bool }`sebelum`main`.
Solusi tersedia setelah 3 upaya
Ubah pengguna1 agar bisa berubah (biarkan mut pengguna1) dan ubah bidang aktif menjadi false sebelum mencetak.
Tunjukkan petunjuk
Tambahkan `mut`to`let user1`untuk menjadikannya`let mut user1`, lalu masukkan `user1.active = false;`.
Solusi tersedia setelah 3 upaya
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!.
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