Özet - Koordinat Noktası
Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 28 / 61.
Görev
KolayHerhangi bir sayısal türle çalışan esnek bir koordinat sistemi oluşturalım! Izgara tabanlı oyunlar için tam sayıları veya hassas grafikler için kayan noktalı sayıları kullanarak konumları temsil edebilen genel bir Point yapısı oluşturacaksınız; hem de tek bir tanımdan.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
point.rs: Her ikisi deTtüründe olanxveyadında iki genel (public) alana sahip, genel birPoint<T>yapısı tanımlayın. Noktanız için şu metotları uygulayın:- x ve y koordinatlarından bir nokta oluşturan bir
newilişkili fonksiyonu - dx ve dy değerlerini alan ve koordinatları bu miktarlar kadar kaydırılmış yeni bir
Pointdöndüren birtranslatemetodu (bu,T'nin toplama ve kopyalamayı desteklemesini gerektirir, bu nedenleT: std::ops::Add<Output = T> + Copysınırını kullanın)
- x ve y koordinatlarından bir nokta oluşturan bir
main.rs: Nokta modülünüzü dahil edin ve aynı genel yapının farklı sayısal türlerle nasıl sorunsuz çalıştığını gösterin.
Ana dosyanızda, genel Point yapınızı şunları yaparak sergileyin:
- İlk iki girişi kullanarak (
i32olarak ayrıştırılmış) bir tam sayı noktası oluşturma - Bunu üçüncü ve dördüncü girişlerle (yine
i32) öteleme (translate) - Beşinci ve altıncı girişleri kullanarak (
f64olarak ayrıştırılmış) bir kayan noktalı nokta oluşturma - Her üç noktayı da görüntüleme
Çıktınız şu formatı takip etmelidir:
Integer point: ({x}, {y})
After translation: ({x}, {y})
Float point: ({x}, {y})Örneğin, 3, 5, 2, -1, 1.5 ve 2.5 girişleriyle:
Integer point: (3, 5)
After translation: (5, 4)
Float point: (1.5, 2.5)Point::new(3, 5) ifadesinin bir Point<i32> oluştururken, Point::new(1.5, 2.5) ifadesinin bir Point<f64> oluşturduğuna dikkat edin; aynı yapı tanımı her ikisine de uyum sağlar!
Altı giriş alacaksınız: ilk nokta için iki tam sayı, öteleme için iki tam sayı ve ikinci nokta için iki kayan noktalı sayı.
Kendin dene
mod point;
use point::Point;
fn main() {
// Girdileri oku
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: x1 ve y1 kullanarak bir tam sayı noktası (integer point) oluşturun
// TODO: Tam sayı noktasını dx ve dy kadar öteleyin (translate)
// TODO: x2 ve y2 kullanarak bir ondalıklı sayı noktası (floating-point point) oluşturun
// TODO: Sonuçları istenen formatta yazdırın:
// println!("Integer point: ({}, {})", ...);
// println!("After translation: ({}, {})", ...);
// println!("Float point: ({}, {})", ...);
}
Object Oriented Programming bölümündeki tüm dersler
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media Player