Şekil Alanı Hesaplayıcı
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 61 / 61.
Görev
KolayBu son meydan okuma, tek bir koleksiyonda depolanan farklı şekillerin toplam alanını hesaplamak üzere trait’leri, trait nesnelerini ve polimorfizmi bir araya getirerek pratik bir problemi çözer.
Trait nesnelerinin ve polimorfizmin gücünü gösteren bir şekil alanı hesaplayıcısı oluşturalım! Farklı şekillerin, yani dairelerin ve karelerin, tek bir koleksiyonda birlikte depolanabildiği ve toplam alanlarının birleşik bir arayüz aracılığıyla hesaplanabildiği bir sistem oluşturacaksın.
Kodunu üç dosyaya ayıracaksın:
shape.rs: BirShapedöndürenareametoduna sahipf64trait’ini tanımla. Bu trait, tüm şekillerin yerine getirmesi gereken sözleşmeyi oluşturur.shapes.rs: Trait’ini uygulayan iki struct oluştur. BirCirclebirradius(f64), birSquareise birside(f64) değerine sahiptir. Her struct, uygun alan formülüyleShapetrait’ini uygulamalıdır. Daireler için π değeri olarak3.14159kullan.main.rs: Her iki modülü içe aktar ve birtotal_areakabul edip tüm alanların toplamını döndürenVec<Box<dyn Shape>>fonksiyonunu oluştur. Sağlanan girdileri kullanarak bir daire ve bir kare oluştur, bunları trait nesnelerinden oluşan bir vektörde depola, toplam alanı hesapla ve sonucu yazdır.
Alan formülleri şunlardır:
- Daire:
3.14159 × radius × radius - Kare:
side × side
Çıktın tüm şekillerin toplam alanını göstermelidir:
Total area: {total}Örneğin, 2.0 (daire yarıçapı) ve 3.0 (kare kenarı) girdileriyle:
Total area: 21.56636Bunun nedeni şudur: Daire alanı = 3.14159 × 2² = 12.56636, Kare alanı = 3² = 9, Toplam = 21.56636
1.0 ve 4.0 girdileriyle:
Total area: 19.14159İki girdi alacaksın: dairenin yarıçapı ve karenin kenar uzunluğu (ikisini de f64 olarak ayrıştır).
Kendin dene
mod shape;
mod shapes;
use shape::Shape;
use shapes::{Circle, Square};
// TODO: total_area fonksiyonunu uygula
// Bir Vec<Box<dyn Shape>> kabul etmeli ve tüm alanların toplamını f64 olarak döndürmeli
fn total_area(shapes: Vec<Box<dyn Shape>>) -> f64 {
// TODO: Tüm şekil alanlarının toplamını hesapla ve döndür
0.0
}
fn main() {
let mut input1 = String::new();
std::io::stdin().read_line(&mut input1).expect("Failed to read line");
let radius: f64 = input1.trim().parse().expect("Invalid number");
let mut input2 = String::new();
std::io::stdin().read_line(&mut input2).expect("Failed to read line");
let side: f64 = input2.trim().parse().expect("Invalid number");
// TODO: Verilen yarıçapla bir Circle oluştur
// TODO: Verilen kenarla bir Square oluştur
// TODO: Her iki şekli bir Vec<Box<dyn Shape>> içinde sakla
// TODO: total_area'yı çağır ve sonucu şu formatta yazdır: "Total area: {total}"
}
Nesne Yönelimli Programlama 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 PlayerKendi başına pratik yap: Online Rust derleyicisi