Rangkuman: Titik Koordinat
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 28 dari 61.
Tantangan
MudahMari buat sistem koordinat fleksibel yang berfungsi dengan tipe numerik apa pun! Kamu akan membuat struct generik Point yang dapat merepresentasikan posisi menggunakan bilangan bulat untuk game berbasis grid atau bilangan floating-point untuk grafik yang presisi, semuanya dari satu definisi.
Kamu akan mengatur kodemu dalam dua file:
point.rs: Definisikan struct generikPoint<T>publik dengan dua field publik:xdany, keduanya bertipeT. Implementasikan method untuk point-mu:- Fungsi terkait
newyang membuat point dari koordinat x dan y - Method
translateyang menerima nilai dx dan dy lalu mengembalikanPointbaru dengan koordinat yang digeser sebesar nilai tersebut (ini mengharuskanTmendukung penjumlahan dan penyalinan, jadi gunakan batasanT: std::ops::Add<Output = T> + Copy)
- Fungsi terkait
main.rs: Muat module point-mu dan tunjukkan bagaimana struct generik yang sama berfungsi dengan lancar menggunakan tipe numerik yang berbeda.
Di file utama, tunjukkan penggunaan Point generik dengan cara:
- Membuat point bilangan bulat menggunakan dua input pertama (diurai sebagai
i32) - Menggesernya menggunakan input ketiga dan keempat (juga
i32) - Membuat point floating-point menggunakan input kelima dan keenam (diurai sebagai
f64) - Menampilkan ketiga point
Output-mu harus mengikuti format ini:
Integer point: ({x}, {y})
After translation: ({x}, {y})
Float point: ({x}, {y})Contohnya, dengan input 3, 5, 2, -1, 1.5, dan 2.5:
Integer point: (3, 5)
After translation: (5, 4)
Float point: (1.5, 2.5)Perhatikan bagaimana Point::new(3, 5) membuat Point<i32>, sedangkan Point::new(1.5, 2.5) membuat Point<f64>: definisi struct yang sama menyesuaikan diri dengan keduanya!
Kamu akan menerima enam input: dua bilangan bulat untuk point pertama, dua bilangan bulat untuk translasi, dan dua bilangan desimal untuk point kedua.
Coba sendiri
mod point;
use point::Point;
fn main() {
// Baca input
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let dx: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let dy: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x2: f64 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y2: f64 = input.trim().parse().expect("Invalid input");
// TODO: Buat titik bilangan bulat menggunakan x1 dan y1
// TODO: Geser titik bilangan bulat sebesar dx dan dy
// TODO: Buat titik bilangan desimal menggunakan x2 dan y2
// TODO: Cetak hasilnya dalam format yang diminta:
// println!("Integer point: ({}, {})", ...);
// println!("After translation: ({}, {})", ...);
// println!("Float point: ({}, {})", ...);
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Method dan Perilaku
Pengantar Blok ImplementasiParameter SelfMethod MutableFungsi TerkaitBeberapa Blok ImplementasiMethod BerantaiRangkuman: Aksi Persegi Panjang4Proyek: Hewan Peliharaan Virtual
Mendefinisikan Hewan PeliharaanMemberi Makan Hewan Peliharaan2Enkapsulasi dan module
Dasar-Dasar moduleKata Kunci publicField privateGetterSetterRekap: Loker AmanLatihan sendiri: Compiler Rust online