Rust ile Roma Rakamlarını Sayıya Çevirme
Bu makalemizde Roma rakamlarını integer sayılara çeviren bir kod örneği inceleyeceğiz
Jan 19
/
Salih Cantekin
Rust'ta Tiplerin Trait'ler ile Extend Edilmesi
Rust, güvenliği ve performansı ön planda tutan güçlü bir dildir. Bazı diğer dillerdeki klasik "extension method"lara sahip olmasa da, benzer işlevselliği "trait"ler aracılığıyla sağlar. Bu makale, Rust'ta trait'leri kullanarak mevcut tipleri (types) yeni davranışlarla nasıl extend edebileceğinizi gösterecektir.
Empty space, drag to resize
Bölüm 1: Temel String Extension'ları
Basit bir örnekle başlayalım. String tipine bazı utility fonksiyonlar eklemek istediğimizi varsayalım. StringExtensions adında bir trait tanımlayabiliriz:
Açıklama: İki metoda sahip StringExtensions adında bir trait tanımladık: is_empty ve is_white_space_only. Ardından bu trait'i String tipi için implemente ettik. Bu, söz konusu metotları tüm String instance'larına eklediğimiz anlamına gelir.
Yukarıdaki kod değişikliğinden sonra, bu yeni metotları herhangi bir String üzerinde kullanabiliriz:
Yukarıdaki kod değişikliğinden sonra, bu yeni metotları herhangi bir String üzerinde kullanabiliriz:
Yukarıdaki kod değişikliğinden sonra, bu yeni metotları herhangi bir String üzerinde kullanabiliriz:
Empty space, drag to resize
Bölüm 2: Vektörler için Generic Extension'lar
Trait'ler generic tipler için de implemente edilebilir. Vec tipini bir is_empty metodu ile extend edelim:
Açıklama: Bir is_empty metoduna sahip VecExtensions trait'ini tanımladık. Bu trait'i, T'nin herhangi bir tip olabileceği Vec<T> için implemente ettik.
Açıklama: Bir is_empty metoduna sahip VecExtensions trait'ini tanımladık. Bu trait'i, T'nin herhangi bir tip olabileceği Vec<T> için implemente ettik.
Artık herhangi bir Vec bu metodu kullanabilir. Aşağıdaki koda bakalım:
Empty space, drag to resize
Bölüm 3: Özelleştirilmiş (Specialized) Extension'lar
Yalnızca spesifik tipler için geçerli olan trait'ler de oluşturabiliriz. Örneğin, Vec<i32> için negatif sayıları kontrol eden ve toplamı hesaplayan bir trait oluşturalım:
Açıklama: has_negative ve sum metotlarına sahip VecExtensionsForInt adında bir trait tanımladık. Bu trait'i özellikle Vec<i32> için implemente ettik.
Artık bu metotları Vec<i32> üzerinde kullanabiliriz:
Empty space, drag to resize
Bölüm 4: Vektör Elemanlarını Görüntüleme
Trait'leri diğer Rust özellikleri ile birleştirelim. Bir Printable trait'i oluşturacağız ve bunu, T'nin Display trait'ini implemente ettiği durumlarda Vec<T> için uygulayacağız:
Açıklama: Bir print metoduna sahip Printable trait'i tanımladık. Bu trait'i, T'nin fmt::Display trait'ini implemente etmesi şartıyla Vec<T> için implemente ettik.
Artık elemanları Display olabilen herhangi bir Vec'i yazdırabiliriz:
Sonuç
Rust'taki trait'ler, mevcut tipleri yeni işlevselliklerle extend etmek için esnek bir yol sağlar. Hem generic hem de spesifik tiplerle kullanılabilirler ve "trait bounds" gibi diğer Rust özellikleri ile kombine edilebilirler. Bu durum, trait'leri Rust'ta modüler ve reusable (tekrar kullanılabilir) kod oluşturmak için güçlü bir araç haline getirir.
Online eğitim anlayışını temelli değiştiren bir Öğrenme platformu
Bizimle bağlantı kurun
Copyright © 2026
