Bildirimsel Makrolar (`macro_rules!`)
Tekrarlanan kod örüntülerini soyutlamak ve derleme zamanında kod üretmek için bildirimsel makrolar yazmayı öğrenin.
Bildirimsel Makrolar (`macro_rules!`), CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 3 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 3 dersten oluşur.
Rust Makroları Nedir?
Makrolar, kod yazan kodlar yazmanın bir yoludur! İşlevlere benzerler, ancak değerler yerine söz dizimi ağaçları (kodunuzun yapısı) üzerinde çalışırlar.
- Tekrarlanan kodları soyutlamanıza yardımcı olurlar.
- Rust içinde Alana Özgü Diller (DSL'ler) oluşturmanızı sağlarlar.
- Derleme zamanında çalışır ve derlemeden önce normal Rust koduna genişlerler.
Bildirimsel Makro Söz Dizimi
Rust'ın bildirimsel makroları macro_rules! anahtar sözcüğünü kullanır. Rust kodunun belirli kalıplarıyla eşleşen bir dizi kural tanımlarlar.
Bunu kod parçaları için kalıp eşleştirme gibi düşünebilirsiniz. Derleyici bir makro çağrısı gördüğünde, girdiyi tanımladığınız kurallardan biriyle eşleştirmeye çalışır.
İlk `macro_rules!` Makronuz
Karşılama mesajı yazdıran çok basit bir makro oluşturalım. macro_rules! anahtar sözcüğüne ve girdi kalıbı olmayan bir kural tanımlayan () => {} söz dizimine dikkat edin.
Bu örneği çalıştırmayı deneyin:
macro_rules! greet {
() => {
println!("Hello from a macro!");
};
}
fn main() {
greet!(); // Call our macro!
}Belirteçlerle Girdi Yakalama
Makrolar, "belirteçleri" kullanarak girdi alabilir. Bunlar makroya ne tür Rust söz dizimini yakalaması gerektiğini bildirir.
$expr: Bir ifade (ör.1 + 2,"hello")$ident: Bir tanımlayıcı (ör. değişken adı, işlev adı)$ty: Bir tür (ör.i32,String)$block: Bir kod bloğu (ör.{ ... })- ...ve daha fazlası!
Bağımsız Değişken Alan Makrolar
Burada bir ifade ($e:expr) alan ve değerini yazdıran bir makro görüyorsunuz. :expr, belirteçtir.
Yakalanan $e, makronun gövdesinde kullanılabilir hâle gelir. stringify! makrosu, ifadeyi dize gösterimine dönüştürür.
macro_rules! debug_print {
($e:expr) => {
println!("Debug: {} = {:?}", stringify!($e), $e);
};
}
fn main() {
let x = 10;
debug_print!(x + 5);
debug_print!("Rust macros are fun");
}Birden Çok Girdiyi Ele Alma
Bir makronun aynı türden birden çok bağımsız değişken almasını istiyorsanız ne yaparsınız? Tekrarlama işleçlerini kullanabilirsiniz: $()*.
$(): İçindeki içerik, tekrarlanacak kalıptır.*: Sıfır veya daha fazla tekrar.+: Bir veya daha fazla tekrar.- Virgülle ayrılmış öğeler için
$(...),*gibi bir ayırıcı da belirtebilirsiniz.
Tekrarlanan Bağımsız Değişkenlere Sahip Makro
Virgüllerle ayrılmış birden çok ifade alan ve her birini ayrı ayrı yazdıran bir makro oluşturalım. Bu, liste benzeri yapılar oluşturmak için güçlü bir yöntemdir.
macro_rules! print_all {
( $( $x:expr ),* ) => {
$( // This $(...)* repeats the `println!` call
println!("Item: {:?}", $x);
)*
};
}
fn main() {
print_all!(1, "hello", true, 3.14);
print_all!("Just one item");
}Makro Temizliğini Anlama
Rust'ın makroları "temizdir". Bu, bir makro içinde tanımlanan değişkenlerin, aynı ada sahip olsalar bile makronun dışındaki değişkenlerle yanlışlıkla çakışmayacağı anlamına gelir.
Derleyici, istenmeyen yan etkileri önlemek için genişletme sırasında öğelerin adlarını dahili olarak değiştirir. Bu da makroları daha güvenli ve kullanımı daha öngörülebilir hâle getirir.
Makrolarda Hata Ayıklama
Bazen makrolar beklediğiniz gibi genişlemez. Rust, genişletilmiş kodu görmenin bir yolunu sağlar:
cargo expandkomutunu çalıştırın (cargo-expandaracının yüklenmesi gerekir)rustc --pretty expandedkomutunu doğrudan kaynak dosyanız üzerinde kullanın.
Bu, makronuzun oluşturduğu ham Rust kodunu gösterir; karmaşık makro davranışlarında hata ayıklamak ve bunları anlamak için çok değerlidir!
Makro Kalıp Eşleştirme Testi
Aşağıdaki makro tanımını inceleyin:
macro_rules! make_tuple {
( $x:expr, $y:expr ) => {
($x, $y)
};
}Aşağıdaki satırlardan hangisi başarıyla derlenir ve make_tuple! makrosunu kullanır?
Özet: Bildirimsel Makrolar
Bu derste macro_rules! kullanarak bildirimsel makroları öğrendiniz:
- Tekrarlanan kalıpları soyutlayarak derleme zamanında kod oluştururlar.
- Söz dizimine göre girdi yakalamak için kalıp eşleştirmeyi kullanırlar.
$exprve$identgibi belirteçler, ne tür bir söz dizimi beklenmesi gerektiğini belirtir.$()*gibi tekrarlama işleçleri, esnek ayırıcılarla birden çok bağımsız değişkeni ele alır.- Makrolar temizdir ve yanlışlıkla oluşabilecek ad çakışmalarını önler.
Makrolar, gereksiz tekrarları azaltmak ve Rust'ta esnek, kullanımı kolay API'ler oluşturmak için güçlü bir araçtır!
Sıkça Sorulan Sorular
“Bildirimsel Makrolar (`macro_rules!`)” dersi ücretsiz mi?
Evet — “Bildirimsel Makrolar (`macro_rules!`)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 3 dersten oluşur.
“Bildirimsel Makrolar (`macro_rules!`)” dersinde ne öğreneceğim?
Tekrarlanan kod örüntülerini soyutlamak ve derleme zamanında kod üretmek için bildirimsel makrolar yazmayı öğrenin. Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 1. dersidir.
“Bildirimsel Makrolar (`macro_rules!`)” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Bildirimsel Makrolar (`macro_rules!`)
- Yordamsal Makrolar: Türetme, İşlev
- Güvensiz Rust ile Etkileşim