Metot Zincirleme
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 6 / 61.
Şimdiye kadar, değiştirilebilir metotlarımız yapıyı değiştirdi ve hiçbir şey döndürmedi. Peki aynı örnek üzerinde art arda birkaç metot çağırmak istersek ne olacak? self öğesine bir başvuru döndürerek metot zincirleme özelliğini etkinleştiririz: birden fazla metot çağrısının tek bir ifade içinde birbirine bağlandığı bir kalıp.
Önemli olan, &mut self yöntemlerinizin &mut Self döndürmesini sağlamaktır:
struct Config {
debug: bool,
timeout: u32,
}
impl Config {
fn new() -> Config {
Config { debug: false, timeout: 30 }
}
fn set_debug(&mut self, value: bool) -> &mut Self {
self.debug = value;
self
}
fn set_timeout(&mut self, seconds: u32) -> &mut Self {
self.timeout = seconds;
self
}
}
Her yöntem yapıyı değiştirir, ardından self değerini döndürür: aynı örneğe geri dönen değiştirilebilir bir başvuru. Bu, bir sonraki yöntem çağrısının hemen onun üzerinde çalışmaya devam etmesini sağlar:
fn main() {
let mut config = Config::new();
config.set_debug(true).set_timeout(60);
println!("Debug: {}, Timeout: {}", config.debug, config.timeout);
// Çıktı: Debug: true, Timeout: 60
}
Üç ayrı ifade yazmak yerine, her şeyi tek bir akıcı satırda yapılandırıyoruz. Bu "oluşturucu tarzı" kalıp, özellikle çok sayıda isteğe bağlı ayara sahip nesneleri kurarken kullanışlıdır ve kodunuzu daha kısa ve okunabilir hâle getirir.
Görev
KolayÜç alanı olan bir TextStyle yapısı oluştur: bold (bool), italic (bool) ve size (u32).
TextStyle için aşağıdakileri içeren bir uygulama bloğu ekle:
new:bolddeğerifalse,italicdeğerifalsevesizedeğeri12olarak ayarlanmış birTextStyledöndüren ilişkili bir işlevset_bold:&mut selfve birbooldeğeri alır, bold alanını ayarlar ve zincirleme kullanım için&mut Selfdöndürürset_italic:&mut selfve birbooldeğeri alır, italic alanını ayarlar ve zincirleme kullanım için&mut Selfdöndürürset_size:&mut selfve biru32değeri alır, size alanını ayarlar ve zincirleme kullanım için&mut Selfdöndürür
Üç girdi alacaksın:
- İlk satır: kalın ayarı (
trueveyafalse) - İkinci satır: italik ayarı (
trueveyafalse) - Üçüncü satır: yazı tipi boyutu (u32)
new kullanarak değiştirilebilir bir TextStyle oluştur, ardından tek bir ifadede üç ayarın tümünü uygulamak için yöntem zincirleme kullan. Son durumu aşağıda gösterilen biçimde yazdır.
Beklenen çıktı biçimi:
Bold: {bold}, Italic: {italic}, Size: {size}Kendin dene
use std::io;
// TODO: TextStyle struct'ını burada tanımla
// TODO: TextStyle için şu öğelerle implementation bloğunu ekle:
// - new() associated function
// - set_bold() method
// - set_italic() method
// - set_size() method
fn main() {
let mut input = String::new();
// Bold ayarını oku
io::stdin().read_line(&mut input).expect("Failed to read line");
let bold: bool = input.trim().parse().expect("Invalid bool");
input.clear();
// Italic ayarını oku
io::stdin().read_line(&mut input).expect("Failed to read line");
let italic: bool = input.trim().parse().expect("Invalid bool");
input.clear();
// Size ayarını oku
io::stdin().read_line(&mut input).expect("Failed to read line");
let size: u32 = input.trim().parse().expect("Invalid u32");
// TODO: new() kullanarak mutable bir TextStyle oluştur, ardından method chaining kullan
// üç ayarın hepsini tek bir ifadede uygulamak için
// TODO: Sonucu şu formatta yazdır: Bold: {bold}, Italic: {italic}, Size: {size}
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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