Pembaca seperti Anda membantu mendukung MUO. Saat Anda melakukan pembelian menggunakan tautan di situs kami, kami dapat memperoleh komisi afiliasi. Baca selengkapnya.

Salah satu fitur utama yang membuat Rust kuat dan lebih menarik adalah dukungannya terhadap struct. Struct adalah tipe data komposit untuk mengelompokkan data terkait. Mereka memungkinkan Anda untuk menentukan tipe data khusus dengan bidang bernama yang meningkatkan organisasi kode dan membuat manipulasi data lebih mudah.

Anda dapat menggunakan struct untuk mewakili berbagai objek, termasuk tipe data dan konfigurasi yang ditentukan pengguna. Struktur lebih fleksibel daripada banyak struktur data lainnya. Kemampuan mereka untuk mengenkapsulasi data terkait membuat mereka berguna karena mereka membuat model objek dunia nyata yang lebih logis.

Mendefinisikan Struct dan Bidang Struct

Anda akan mendefinisikan struct dengan menggunakan struct kata kunci diikuti dengan nama untuk struct. Ikuti ini dengan menentukan nama bidang struct dan mereka Tipe data karat di dalam sepasang kurung kurawal.

instagram viewer
structOrang {
nama: Rangkaian,
usia: u8,
is_siswa: bool,
}

Ini Orang struct memiliki tiga bidang. Itu nama bidang adalah string, the usia bidang adalah bilangan bulat 8-bit yang tidak ditandatangani, dan is_student lapangan adalah boolean.

Anda dapat menggunakan struct literal untuk membuat instance struct setelah definisi struct. Literal struct menentukan nilai bidang struct.

membiarkan orang = Orang {
nama: Rangkaian::dari("Yohanes"),
usia: 27,
is_siswa: BENAR,
};

Itu orang variabel adalah turunan dari Orang struct, dibuat dengan struct literal. Literal ini memberi contoh semua bidang struct dengan nilai dari tipe data yang sesuai.

Menggunakan Konstruktor untuk Membuat Struktur

Anda juga dapat menggunakan fungsi konstruktor untuk membuat instance dari struct.

impl Orang {
// Tentukan fungsi konstruktor `new` yang mengambil `name`, `age` dan
// parameter `is_student`
fnbaru(nama: Rangkaian, usia: u8, adalah_siswa: bool) -> Diri sendiri {
// Buat instance baru dari struct `Person` dan inisialisasi bidangnya
// dengan nilai yang diberikan
Diri sendiri {
nama,
usia,
adalah_siswa,
}
}
}

// Panggil fungsi konstruktor `new` dari struct `Person` dan tetapkan
// instance yang dihasilkan ke `orang`
membiarkan orang = Orang:: baru(Rangkaian::dari("Yohanes"), 27, BENAR);

Program di atas mendefinisikan konstruktor untuk Orang struktur dengan impl kata kunci. Itu baru konstruktor mengambil bidang struct sebagai argumen dan mengembalikan instance baru dari struct dengan nilai yang diinisialisasi.

Anda dapat membuat Orang contoh dengan baru konstruktor, memberikan argumen yang sesuai.

Mengakses dan Memodifikasi Bidang Struktur

Anda dapat mengakses dan memodifikasi bidang struct menggunakan notasi titik. Anda cukup menggunakan titik (.) operator diikuti dengan nama bidang untuk mengakses atau mengubah nilainya.

// mendeklarasikan struct Person
structOrang {
nama: Rangkaian,
usia: u8,
is_siswa: bool,
}

fnutama() {
// instantiate sebuah struct
membiarkanmut orang = Orang {
nama: Rangkaian::dari("Yohanes"),
usia: 27,
is_siswa: BENAR,
};

// cetak bidang nama dan umur struct
cetak!("Nama: {}", orang.nama);
cetak!("Usia: {}", orang.umur);

// ubah field is_student
person.is_student = PALSU;

cetak!("Apakah siswa: {}", person.is_student);
}

Program membuat struct, membuat instance struct, mencetak nama, Dan usia bidang, dan memodifikasi is_student bidang sebelum mencetak bidang.

Mendeklarasikan Metode untuk Structs

Tidak seperti struct di C, Anda dapat menentukan metode pada struktur Rust yang beroperasi pada sebuah instance. Metode adalah fungsi yang mengambil referensi ke struct untuk akses dan modifikasi. Anda juga dapat menggunakan notasi titik untuk memanggil metode struct dan mengakses fungsinya.

Inilah cara Anda dapat mendeklarasikan metode untuk struct dan menggunakan metode tersebut untuk melakukan operasi:

structOrang {
nama: Rangkaian,
usia: u8,
is_siswa: bool,
}

impl Orang {
fnkatakan halo(&diri sendiri) {
cetak!("Halo, nama saya {} dan umur saya {} tahun.", diri sendiri.nama,
diri sendiri.usia);
}

fnhave_birthday(&mutdiri sendiri) {
diri sendiri.umur += 1;
}
}

fnutama() {
membiarkanmut orang = Orang {
nama: Rangkaian::dari("Yohanes"),
usia: 27,
is_siswa: BENAR,
};

person.say_hello();

person.have_birthday();

cetak!("Zaman baru: {}", orang.umur);
}

Program ini mendefinisikan dua metode untuk Orang struct. Itu katakan halo metode mengambil referensi untuk diri sendiri dan mencetak salam yang mencantumkan nama dan usia orang tersebut. Itu have_birthday metode mengambil referensi yang bisa berubah diri sendiri dan menambah usia seseorang.

Model Kepemilikan Rust Mengoptimalkan Manajemen Memori

Struct adalah struktur data serbaguna, bertindak sebagai semacam kelas minimal yang setara.

Seperti struktur data Rust lainnya, Anda harus mengikuti aturan kepemilikan Rust saat bekerja dengan variabel struct. Model kepemilikan memastikan bahwa Anda mengelola memori secara efisien dalam program Anda, mencegah masalah umum seperti pointer null dan menggantung.