Struct sebagai Parameter Fungsi
Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 24 dari 66.
Sekarang setelah kamu tahu cara membuat dan mengubah struct, mari kita pelajari cara menggunakannya dengan fungsi. Sama seperti tipe data lainnya di Rust, kamu bisa meneruskan instance struct ke fungsi dan mengembalikannya dari fungsi.
Untuk meneruskan struct ke fungsi, kamu cukup menyertakannya sebagai parameter dalam definisi fungsi:
fn calculate_area(rect: Rectangle) -> i32 {
rect.width * rect.height
}Fungsi ini menerima struct Rectangle sebagai parameter dan mengembalikan i32. Di dalam fungsi, kamu dapat mengakses field struct menggunakan notasi titik, sama seperti di tempat lain.
Kamu juga bisa mengembalikan struct dari fungsi dengan menetapkan tipe struct sebagai tipe kembalian:
fn create_square(size: i32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}Menggunakan struct dengan fungsi membuat kodemu lebih teratur dan bermakna. Daripada meneruskan beberapa parameter secara terpisah, kamu dapat mengelompokkan data yang saling terkait dan meneruskannya sebagai satu kesatuan yang terdefinisi dengan baik.
Tantangan
MudahKamu akan menerima empat input: lebar persegi panjang (sebagai bilangan bulat), tinggi persegi panjang (sebagai bilangan bulat), panjang sisi persegi (sebagai bilangan bulat), dan angka pilihan (1 atau 2). Definisikan struct Rectangle dengan dua field: width: i32 dan height: i32. Buat dua fungsi: satu fungsi menerima Rectangle dan menghitung luasnya, dan fungsi lainnya menerima panjang sisi dan mengembalikan Rectangle yang mewakili persegi. Berdasarkan input pilihan, hitung dan cetak luas yang sesuai.
Persyaratan:
- Definisikan struct
Rectangledengan field:width: i32danheight: i32 - Buat fungsi
calculate_areayang menerimaRectanglesebagai parameter dan mengembalikani32(luasnya) - Buat fungsi
create_squareyang menerimai32(panjang sisi) sebagai parameter dan mengembalikanRectangledengan lebar dan tinggi yang sama - Baca input pertama dan ubah menjadi
i32untuk lebar persegi panjang - Baca input kedua dan ubah menjadi
i32untuk tinggi persegi panjang - Buat sebuah instance
Rectangledengan dimensi tersebut - Baca input ketiga dan ubah menjadi
i32untuk panjang sisi persegi - Baca input keempat dan ubah menjadi
i32untuk pilihan (1 atau 2) - Jika pilihan adalah 1: hitung dan cetak luas persegi panjang
- Jika pilihan adalah 2: buat persegi menggunakan
create_square, lalu hitung dan cetak luasnya
Input:
- Baris pertama: Lebar persegi panjang sebagai bilangan bulat (misalnya,
8) - Baris kedua: Tinggi persegi panjang sebagai bilangan bulat (misalnya,
5) - Baris ketiga: Panjang sisi persegi sebagai bilangan bulat (misalnya,
6) - Baris keempat: Pilihan sebagai bilangan bulat, yaitu 1 atau 2 (misalnya,
1)
Output:
- Jika pilihan adalah 1:
Rectangle area: [area] - Jika pilihan adalah 2:
Square area: [area]
Coba sendiri
use std::io;
// TODO: Definisikan struct Rectangle di sini
// TODO: Definisikan fungsi calculate_area di sini
// TODO: Definisikan fungsi create_square di sini
fn main() {
// Baca lebar persegi panjang
let mut width_input = String::new();
io::stdin().read_line(&mut width_input).expect("Failed to read line");
let width: i32 = width_input.trim().parse().expect("Invalid input");
// Baca tinggi persegi panjang
let mut height_input = String::new();
io::stdin().read_line(&mut height_input).expect("Failed to read line");
let height: i32 = height_input.trim().parse().expect("Invalid input");
// Baca panjang sisi persegi
let mut side_input = String::new();
io::stdin().read_line(&mut side_input).expect("Failed to read line");
let side: i32 = side_input.trim().parse().expect("Invalid input");
// Baca pilihan
let mut choice_input = String::new();
io::stdin().read_line(&mut choice_input).expect("Failed to read line");
let choice: i32 = choice_input.trim().parse().expect("Invalid input");
// TODO: Tulis kodemu di bawah ini
// Buat instance Rectangle, periksa pilihan, lalu hitung luas yang sesuai
// Tampilkan output hasil berdasarkan pilihan
// Gunakan: println!("Rectangle area: {}", area); atau println!("Square area: {}", area);
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Alur Kontrol Lanjutan
Ekspresi 'match'Mencocokkan Beberapa NilaiMencocokkan RentangEkspresi 'if let'Perulangan sebagai EkspresiRangkuman, Parser Perintah Sederhana4Mengelompokkan Data dengan Struct
Apa Itu Struct?Ringkasan StructMengakses Field StructStruct yang Dapat DiubahStruct sebagai Parameter FungsiStruct TupleRangkuman: Buat Struct Buku2Pengantar Vektor
Apa Itu Vektor?Membuat VektorMenambahkan Elemen dengan pushMengakses Elemen VektorMelakukan Iterasi pada VektorIterasi MutableMenghapus ElemenRangkuman: Pelacak Skor Dasar5Pasangan Kunci-Nilai dengan Hash Map
Apa Itu Hash Map?Membuat Hash MapMenyisipkan Pasangan Kunci-NilaiMengakses NilaiMenelusuri Hash MapMemperbarui NilaiMenghapus PasanganRangkuman: Penghitung Kata8Proyek: Inventaris Barang Sederhana
Menyiapkan ProyekMenambahkan BarangMemeriksa StokMenjual BarangMenyatukan Semuanya3Daftar Tugas Baris Perintah
Penyiapan ProyekMenambahkan TugasMelihat Semua TugasMenghapus TugasKode AkhirLatihan sendiri: Compiler Rust online