Karat - Struktur
Array digunakan untuk merepresentasikan kumpulan nilai yang homogen. Demikian pula, struktur adalah tipe data yang ditentukan pengguna lain yang tersedia di Rust yang memungkinkan kita untuk menggabungkan item data dari berbagai jenis, termasuk struktur lain. Struktur mendefinisikan data sebagai pasangan nilai kunci.
Sintaks - Mendeklarasikan struktur
Kata kunci struct digunakan untuk mendeklarasikan struktur. Karena struktur diketik secara statis, setiap bidang dalam struktur harus dikaitkan dengan tipe data. Aturan penamaan dan konvensi untuk struktur seperti variabel. Blok struktur harus diakhiri dengan titik koma.
struct Name_of_structure {
field1:data_type,
field2:data_type,
field3:data_type
}
Sintaks - Menginisialisasi struktur
Setelah mendeklarasikan struct, setiap bidang harus diberi nilai. Ini dikenal sebagai inisialisasi.
let instance_name = Name_of_structure {
field1:value1,
field2:value2,
field3:value3
};
//NOTE the semicolon
Syntax: Accessing values in a structure
Use the dot notation to access value of a specific field.
instance_name.field1
Illustration
struct Employee {
name:String,
company:String,
age:u32
}
fn main() {
let emp1 = Employee {
company:String::from("TutorialsPoint"),
name:String::from("Mohtashim"),
age:50
};
println!("Name is :{} company is {} age is {}",emp1.name,emp1.company,emp1.age);
}
Contoh di atas mendeklarasikan struct Karyawan dengan tiga bidang - nama, perusahaan, dan usia jenis. Main () menginisialisasi struktur. Ini menggunakan println! makro untuk mencetak nilai bidang yang ditentukan dalam struktur.
Keluaran
Name is :Mohtashim company is TutorialsPoint age is 50
Mengubah instance struct
Untuk mengubah sebuah instance, variabel instance harus ditandai dapat berubah. Contoh di bawah ini mendeklarasikan dan menginisialisasi struktur bernama Employee dan kemudian mengubah nilai bidang usia menjadi 40 dari 50.
let mut emp1 = Employee {
company:String::from("TutorialsPoint"),
name:String::from("Mohtashim"),
age:50
};
emp1.age = 40;
println!("Name is :{} company is {} age is
{}",emp1.name,emp1.company,emp1.age);
Keluaran
Name is :Mohtashim company is TutorialsPoint age is 40
Meneruskan struct ke suatu fungsi
Contoh berikut menunjukkan cara melewatkan instance struct sebagai parameter. Metode tampilan mengambil contoh Karyawan sebagai parameter dan mencetak detailnya.
fn display( emp:Employee) {
println!("Name is :{} company is {} age is
{}",emp.name,emp.company,emp.age);
}
Berikut adalah program lengkapnya -
//declare a structure
struct Employee {
name:String,
company:String,
age:u32
}
fn main() {
//initialize a structure
let emp1 = Employee {
company:String::from("TutorialsPoint"),
name:String::from("Mohtashim"),
age:50
};
let emp2 = Employee{
company:String::from("TutorialsPoint"),
name:String::from("Kannan"),
age:32
};
//pass emp1 and emp2 to display()
display(emp1);
display(emp2);
}
// fetch values of specific structure fields using the
// operator and print it to the console
fn display( emp:Employee){
println!("Name is :{} company is {} age is
{}",emp.name,emp.company,emp.age);
}
Keluaran
Name is :Mohtashim company is TutorialsPoint age is 50
Name is :Kannan company is TutorialsPoint age is 32
Mengembalikan struct dari suatu fungsi
Mari kita pertimbangkan fungsi who_is_elder () , yang membandingkan usia dua karyawan dan mengembalikan yang lebih tua.
fn who_is_elder (emp1:Employee,emp2:Employee)->Employee {
if emp1.age>emp2.age {
return emp1;
} else {
return emp2;
}
}
Berikut adalah program lengkapnya -
fn main() {
//initialize structure
let emp1 = Employee{
company:String::from("TutorialsPoint"),
name:String::from("Mohtashim"),
age:50
};
let emp2 = Employee {
company:String::from("TutorialsPoint"),
name:String::from("Kannan"),
age:32
};
let elder = who_is_elder(emp1,emp2);
println!("elder is:");
//prints details of the elder employee
display(elder);
}
//accepts instances of employee structure and compares their age
fn who_is_elder (emp1:Employee,emp2:Employee)->Employee {
if emp1.age>emp2.age {
return emp1;
} else {
return emp2;
}
}
//display name, comapny and age of the employee
fn display( emp:Employee) {
println!("Name is :{} company is {} age is {}",emp.name,emp.company,emp.age);
}
//declare a structure
struct Employee {
name:String,
company:String,
age:u32
}
Keluaran
elder is:
Name is :Mohtashim company is TutorialsPoint age is 50
Metode dalam Struktur
Metode itu seperti fungsi. Mereka adalah kelompok instruksi pemrograman yang logis. Metode dideklarasikan denganfnkata kunci. Ruang lingkup suatu metode berada dalam blok struktur.
Metode dideklarasikan di luar blok struktur. Ituimplkata kunci digunakan untuk mendefinisikan metode dalam konteks struktur. Parameter pertama dari suatu metode akan selaluself, yang merepresentasikan instance pemanggilan struktur. Metode beroperasi pada anggota data suatu struktur.
Untuk memanggil metode, pertama-tama kita perlu membuat contoh strukturnya. Metode ini dapat dipanggil menggunakan instance struktur.
Sintaksis
struct My_struct {}
impl My_struct {
//set the method's context
fn method_name() {
//define a method
}
}
Ilustrasi
Contoh berikut mendefinisikan struktur Persegi Panjang dengan bidang - lebar dan tinggi . Sebuah metode wilayah didefinisikan dalam konteks struktur itu. Metode area mengakses bidang struktur melalui kata kunci mandiri dan menghitung luas persegi panjang.
//define dimensions of a rectangle
struct Rectangle {
width:u32, height:u32
}
//logic to calculate area of a rectangle
impl Rectangle {
fn area(&self)->u32 {
//use the . operator to fetch the value of a field via the self keyword
self.width * self.height
}
}
fn main() {
// instanatiate the structure
let small = Rectangle {
width:10,
height:20
};
//print the rectangle's area
println!("width is {} height is {} area of Rectangle
is {}",small.width,small.height,small.area());
}
Keluaran
width is 10 height is 20 area of Rectangle is 200
Metode Statis dalam Struktur
Metode statis dapat digunakan sebagai metode utilitas. Metode ini ada bahkan sebelum struktur dibuat. Metode statis dipanggil menggunakan nama struktur dan dapat diakses tanpa sebuah instance. Tidak seperti metode normal, metode statis tidak akan mengambil parameter & self .
Sintaks - Mendeklarasikan metode statis
Metode statis seperti fungsi dan metode lain secara opsional dapat berisi parameter.
impl Structure_Name {
//static method that creates objects of the Point structure
fn method_name(param1: datatype, param2: datatype) -> return_type {
// logic goes here
}
}
Sintaks - Memanggil metode statis
The structure_name :: sintaks yang digunakan untuk mengakses metode statis.
structure_name::method_name(v1,v2)
Ilustrasi
Contoh berikut menggunakan metode getInstance sebagai kelas pabrik yang membuat dan mengembalikan instance Titik struktur .
//declare a structure
struct Point {
x: i32,
y: i32,
}
impl Point {
//static method that creates objects of the Point structure
fn getInstance(x: i32, y: i32) -> Point {
Point { x: x, y: y }
}
//display values of the structure's field
fn display(&self){
println!("x ={} y={}",self.x,self.y );
}
}
fn main(){
// Invoke the static method
let p1 = Point::getInstance(10,20);
p1.display();
}
Keluaran
x =10 y=20