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:
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.

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.
ile oluşturuldu