Trait’ler ile Ortak Davranışları Standartlaştırmak

Bir uygulamada kuşlar uçar, uçaklar uçar, hatta yeterince kararlı bir geliştiricinin yazdığı kod bile bazen “uçar”. Bu nesneler birbirinden tamamen farklı veri yapılarına sahip olsa da ortak bir davranışı paylaşabilir. Rust’taki trait yapısı, farklı tiplerin sahip olması gereken yetenekleri ortak bir sözleşmeyle tanımlamamızı sağlar. Nesne tabanlı dillerdeki interface kavramına benzese de varsayılan metotlar, generic kısıtları ve güvenli çok biçimlilik gibi güçlü araçlarla daha geniş bir kullanım alanı sunar.

Devamı...

Rust’ta String Mimarisi: String, &str ve UTF-8’in Perde Arkası

Rust’ta metinlerle çalışmaya başlayanların karşısına kısa sürede iki oyuncu çıkar: String ve &str. İlk bakışta ikisi de yazı tutuyor gibi görünür; ancak bellek yönetimi, sahiplik ve boyut açısından aralarında önemli farklar vardır. Bu ayrımı anlamak, hem gereksiz kopyalamaları önler hem de Rust’ın ödünç alma sistemini çok daha anlaşılır hâle getirir.

Devamı...

Rust'ta Enum ve Pattern Matching: Tüm Olasılıkları Yakalamak

Bir verinin yalnızca tek bir biçimi olmak zorunda değildir. Örneğin bir ödeme başarılı, reddedilmiş veya hâlâ bekliyor olabilir. Bu durumları metinlerle temsil etmek mümkün olsa da küçük bir yazım hatası programın mantığını bozabilir. Rust’ın enum ve match araçları, farklı veri varyasyonlarını güvenli biçimde modelleyerek derleyiciyi adeta hata avlayan bir ekip arkadaşına dönüştürür.

Devamı...

Rust’ta Akıllı İşaretçiler: Box, Rc ve RefCell Nasıl Çalışır?

Rust, çöp toplayıcı kullanmadan bellek güvenliği sağlamasıyla ünlüdür. Ancak boyutu derleme anında bilinmeyen veriler, birden fazla sahip gerektiren nesneler veya çalışma zamanında değişebilirlik isteyen yapılar, temel sahiplik kurallarının ötesine geçmemizi gerektirir. İşte Box, Rc ve RefCell, heap belleğin karanlık koridorlarında el feneri görevi görür.

Devamı...

Rust Yapıları: Struct ve impl ile Güçlü Veri Modelleri

Bir uygulamada kullanıcı adı, yaş, e-posta adresi ve aktiflik durumu gibi birbirleriyle ilişkili değerleri ayrı değişkenlerde tutmak mümkündür. Ancak proje büyüdükçe bu yaklaşım, çekmeceleri etiketlenmemiş bir dolaba dönüşür. Rust dilindeki struct yapıları, farklı tiplerdeki verileri anlamlı bir isim altında birleştirerek kendi veri tiplerimizi oluşturmamızı sağlar.

Devamı...

Rust HashMap Rehberi: Anahtar-Değer Dünyasında Sahiplik Macerası

Bir telefon rehberinde kişileri sayfa sayfa aramak yerine isimlerini doğrudan yazarak numaralarına ulaştığınızı düşünün. Hash haritaları tam olarak bu fikri programlama dünyasına taşır: Veriler, anahtar ve değer çiftleri hâlinde saklanır. Rust’ın HashMap koleksiyonu ise bu pratik yapıyı dilin sahiplik, ödünç alma ve yaşam süresi kurallarıyla birleştirerek hem hızlı hem de güvenli veri yönetimi sunar.

Devamı...

Panik Yok: Rust Result Enum ile Kurtarılabilir Hataları Yönetmek

Bir dosyanın bulunamaması, kullanıcının harf yerine sayı girmesi veya sunucunun geçici olarak yanıt vermemesi programın kıyamet senaryosu değildir. Bunlar beklenebilen ve çoğu zaman düzeltilebilen durumlardır. Rust, böyle hataları görünmez bir kontrol akışına teslim etmek yerine Result enum’u aracılığıyla açıkça modellememizi sağlar. Böylece hata yönetimi, kodun kenarında unutulan bir ayrıntı değil, fonksiyonun sözleşmesinin parçası olur.

Devamı...

Öğrenci ve Ekip İş Akışları Yönetimi: Güvenli Dağıtım, Toplama ve Kod Paylaşımı

Kalabalık bir sınıfta yüz ödevi toplamak veya büyük bir geliştirici ekibinde ortak kod tabanını yönetmek, yalnızca dosya paylaşmak değildir. Kim neyi görebilir, hangi değişikliği yapabilir ve teslim edilen çalışma nasıl doğrulanır? Sağlam bir iş akışı; hiyerarşi, otomasyon, izlenebilirlik ve en az yetki ilkelerini birlikte kullanarak dijital koridordaki kargaşayı düzenli bir üretim hattına dönüştürür.

Devamı...

Null Kabusuna Son: Rust Option Enum ile Güvenli Hata Yönetimi

Bir nesnenin var olduğunu düşünerek kod yazarsınız, uygulamayı çalıştırırsınız ve aniden meşhur “null reference” hatasıyla karşılaşırsınız. Rust, bu sürprizi çalışma zamanına bırakmak yerine bir değerin yokluğunu Option enum’u ile açıkça modellememizi ister. Böylece “Belki vardır, belki yoktur” ihtimali, derleyicinin denetleyebildiği güvenli bir tipe dönüşür.

Devamı...

Korkusuz Eşzamanlılık: Rust ile Veri Yarışlarına Derleme Zamanında Fren

Eşzamanlı programlama, performans kapısını açarken içeri veri yarışları, kilitlenmeler ve gizemli üretim hataları da sokabilir. Rust’ın “korkusuz eşzamanlılık” yaklaşımı ise sahiplik kurallarını ve tip sistemini bir güvenlik görevlisi gibi kullanır. Böylece birçok tehlikeli thread senaryosu, program çalıştırılmadan önce derleyici tarafından reddedilir. Kısacası Rust, “Önce çalıştıralım, sonra ne patlıyor bakarız” geleneğine pek sıcak bakmaz.

Devamı...

Kapanışlar ve İteratörler: Veriyi Fonksiyonel Bir Akışa Dönüştürmek

Kapanışlar (closures) ve iteratörler, veriyi “nasıl dolaşacağımızı” adım adım anlatmak yerine “hangi dönüşümleri istediğimizi” ifade etmemizi sağlar. Kapanışlar çevrelerindeki değişkenleri hatırlayan isimsiz fonksiyonlardır; iteratörler ise koleksiyon elemanlarını sırayla üreten soyutlamalardır. Birlikte kullanıldıklarında kısa, okunabilir ve yeniden kullanılabilir veri işleme zincirleri ortaya çıkar.

Devamı...

Jenerikler ile Tek Kod, Birçok Tip: Esnek ve Tekrarsız Programlama

Aynı işlemi Int, String ve özel veri tipleri için ayrı ayrı yazdığınızı düşünün. Kod çalışır; fakat proje büyüdükçe kopyalanmış fonksiyonlar küçük bir klon ordusuna dönüşür. Jenerikler (Generics), fonksiyonları, yapıları ve enum’ları belirli bir tipe kilitlemeden tanımlamamızı sağlar. Böylece tip güvenliğinden vazgeçmeden daha esnek, yeniden kullanılabilir ve bakımı kolay kod üretiriz.

Devamı...

GitHub’sız da Olur: GitLab, Gitea ve Kendi Git Sunucunu Kurma Rehberi

GitHub, açık kaynak dünyasının kalabalık meydanı olabilir; ancak bütün kodlarımızı tek bir ekosisteme emanet etmek zorunda değiliz. Gizlilik, maliyet, kurum politikaları, çevrim dışı çalışma veya eğitim ihtiyaçları nedeniyle kendi Git platformumuzu barındırabiliriz. GitLab ve Gitea gibi çözümler, sıradan bir bulut sunucusunu bağımsız bir yazılım geliştirme merkezine dönüştürür.

Devamı...

Git Uzak Depolar ve Klonlama: Kodun Bulutla Buluşması

Bir projeyi yalnızca kendi bilgisayarında tutmak, bütün yumurtaları aynı sepete koymaya benzer. Git’in uzak depo mekanizması sayesinde kodlar GitHub, GitLab veya Bitbucket gibi servislerde saklanabilir; ekip üyeleri aynı proje üzerinde çalışabilir ve yerel değişiklikler dış dünyayla paylaşılabilir. Bu süreçte clone, remote, fetch, pull ve push komutları başrolü üstlenir.

Devamı...

Git Temelleri: Değişiklikleri Anlamlı Commit’lerle Kaydetmek

Bir projede kod yazarken yalnızca sonucun çalışması yeterli değildir; hangi değişikliğin ne zaman ve neden yapıldığını da bilmek gerekir. Git, projenin belirli anlarını yerel bir tarihçeye kaydederek geçmişe bakmayı, hataları izlemeyi ve güvenle deney yapmayı sağlar. Commit ise bu tarihçedeki sıradan bir kayıt değil, projenin belirli bir andaki anlamlı fotoğrafıdır.

Devamı...

Git Push ve Pull ile Senkronizasyon Akışı

Bir ekip projesinde kod yazmak kadar, yazılan kodu doğru yere ve doğru zamanda ulaştırmak da önemlidir. Git’in push ve pull komutları, yerel bilgisayarımız ile GitHub, GitLab veya Bitbucket gibi uzak sunucular arasında köprü kurar. Biri tamamladığımız çalışmaları dışarı gönderirken diğeri ekip arkadaşlarımızın değişikliklerini içeri alır; yani biri kargoyu yollar, diğeri kapıda teslim alır.

Devamı...

Git Merge ve Conflict Çözümü: Dalları Birleştirme Sanatı

Yazılım ekiplerinde herkes aynı dosyaya sırayla dokunsaydı hayat kolay, geliştirme süreci ise epey yavaş olurdu. Git dalları sayesinde geliştiriciler paralel çalışabilir; ancak bu çalışmaların eninde sonunda yeniden buluşması gerekir. merge, farklı dallardaki değişiklikleri ortak bir geçmişte birleştirirken conflict çözümü Git’in karar veremediği noktalarda insan muhakemesini devreye sokar.

Devamı...

Git Kurulumu ve VS Code Entegrasyonu: Terminale Dokunmadan Sürüm Takibi

Kod yazarken çalışan bir özelliği yanlışlıkla bozmak, çoğu geliştiricinin yaşadığı küçük çaplı bir korku filmidir. Git, projenin değişim geçmişini kaydederek bu filmi mutlu sonla bitirir. VS Code entegrasyonu sayesinde dosya değişikliklerini görmek, commit oluşturmak ve uzak depoya göndermek için terminal komutlarını ezberlemek de gerekmez.

Devamı...

Dallanma Stratejileri: Ana Kodu Kırmadan Güvenle Geliştirmek

Yeni bir özelliği denerken ana uygulamayı bozmak, çalışan motora tornavidayla yaklaşmaya benzer: Küçük bir değişiklik bütün sistemi durdurabilir. Git dalları sayesinde geliştiriciler ana kod tabanından bağımsız çalışma alanları oluşturabilir, deneylerini güvenle yapabilir ve yalnızca hazır olan değişiklikleri projeye ekleyebilir.

Devamı...