C# Kodunuzu Basitleştirmenin 14 Yolu – Tim Corey'nin Videosundan C# En İyi Uygulamaları Hakkında İçgörüler
[[academy-video-youtube({"vid": "4inJy5iKWp4", "start_time": "0", "title": "C# Kodunuzu Basitleştirmenin 14 Yolu", "creator": "Tim Corey", "length": "44m 57s"})]]
Tim Corey, "C# Kodunuzu Basitleştirmenin 14 Yolu" başlıklı kapsamlı videosunda, kodun okunabilirliğini artıran, karmaşayı azaltan ve kod tabanını sürdürülebilir kılan pratik C# en iyi uygulamalarını inceliyor. Tim, tek satırlık çözümler veya anlaşılması güç hileler üzerinde durmak yerine, iyi kod yazma uygulamalarına odaklanır—diğer geliştiricilerin takip edebileceği temiz, anlaşılır kod nasıl yazılır.
Her ipucunu Visual Studio'daki gerçek örnekler etrafında şekillendiryor, isimlendirme kuralları, hata yönetimi ve kodu herhangi bir şeyi bozmadan nasıl yeniden yapılandıracağı hakkında da konuşuyor. Bu sadece teori değil—uygulama kodu daha iyi hale getirir.
Bu makalede, onun gösterdiği 14 yöntemin her birini adım adım inceleyelim.
1. Daha Temiz Kod için Statik Kullanım
Tim, statik erişimin tekrarlayan çağrıları nasıl basitleştirebileceğini göstererek başlar. Şunu beyan ederek:
using static System.Console;using static System.Console;Artık her statik üyeyi Console ön eki ile yazmanız gerekmemektedir.
Bu, sadece kelimeleri çıkarmaktan daha fazlasıdır; statik erişimi net hale getirmekle ilgilidir. Tim, Console veya Math gibi sık kullanılan bir sınıfta tanımlanmış bir statik üyeyi çağırıyorsanız, bu kısayolun kod okunabilirliğini artırdığını belirtir.
Ancak, iyi kodlama uygulamalarının bir parçası olarak, geliştiricilerin çakışmalardan kaçınmaları gerektiği konusunda uyarıyor - iki farklı sınıf, statik bir üyeye aynı ismi verebilir. Olası beklenmedik davranışların farkında olmak önemlidir.
2. Liste Başlatma ile
C#, artık listeleri daha doğrudan başlatmanızı sağlıyor:
List<string> names = ["Tim", "Sue", "Bilbo"];List<string> names = ["Tim", "Sue", "Bilbo"];Tim, bunun her şeyi tek bir ifadeye sıkıştırmakla ilgili olmadığını, okuyup anlamayı kolaylaştırmak ve formaliteleri azaltarak performansı optimize etmek için kod yazmakla ilgili olduğunu açıklıyor.
"new List of String" şablonunu ayrıştırmak yerine, okuyucu koleksiyondaki açıklayıcı isimleri doğrudan görür. Tim ayrıca bunun diziler ve hatta sözlükler için de çalıştığını, netliği önceliklendiren kodlama gelenekleriyle uyumlu olduğunu belirtiyor.
3. Hedef-Tipli new
Başka bir zaman tasarrufu sağlayan özellik: hedef-tipi yeni. Yerine:
List<int> numbers = new List<int>();List<int> numbers = new List<int>();yazabilirsiniz:
List<int> numbers = new();List<int> numbers = new();Tim, sınıf adının tekrarlanmasının gereksiz olduğunu vurguluyor—zaten sol tarafta yer alıyor. Bu, kod tabanınızı taramayı kolaylaştırırken fazlalığı ortadan kaldırarak iyi kodlama uygulamalarına uyar.
4. var ve Anonim Tipler
Tim, kodlama pratiği çevrelerinde tartışmalara yol açan bir özellik olan var'ı ele alıyor. Kimi, değişken adlarını ve türlerini gizlediği için bunu sevmez, ancak Tim, bunun gerçek gücünün anonim türlerde yattığını açıklar.
Veri kaynaklarıyla çalışırken (örneğin Dapper aracılığıyla SQL), Tim var'ın nasıl nesneler oluşturmanıza olanak tanıdığını gösteriyor:
var parameters = new { FirstName = "Tim", LastName = "Corey" };var parameters = new { FirstName = "Tim", LastName = "Corey" };Bu, sorgular yazmak veya tek seferlik nesneler için mükemmeldir—sadece parametreler için bir temel sınıf oluşturmanız gerekmez. Tim'in dediği gibi, bu, gereksiz türlerle kod tabanınızı kirletmekten kaçınırken, bir şeyler ters gittiğinde anlamlı hata mesajları sağlamaya devam eder.
5. Dosya-Kapsamlı Ad Alanları
Tim bu ad alanlarının kapsamını dosya tabanlı hale getiriyor ve bunun nasıl olduğunu gösteriyor:
namespace ProjectName
{
// indented code
}namespace ProjectName
{
// indented code
}şuna dönüşür:
namespace ProjectName;namespace ProjectName;Bu küçük değişiklik, gereksiz girintileri ortadan kaldırır ve kamu üyeler için Pascal büyük harfle denilen C# adlandırma kurallarına uyar. Tim, çoğu dosyanın sadece bir tane namespace içerdiğini açıklayarak, bunun kodun okunabilirliğini artırdığını ve mantıksal bölümleri uyum içinde tuttuğunu belirtir.
6. Tek Satırlık Veri Yapıları için Kayıtlar
Kayıtları kullanmak, veri nesnelerini sadece bir ifadede tanımlamanıza olanak tanır:
public record EmployeeRecord(int Id, string Name);public record EmployeeRecord(int Id, string Name);Tim, bunun minimum çaba ile kapsamlı bir tür (özellikler, değişmezlik ve ToString()) ürettiğini belirtir. Basit türev sınıf senaryolarının hâlâ sınıflara ihtiyaç duyduğunu açıkça belirtiyor, ancak nesneniz salt okunur olduğunda, kayıtlar tek sorumluluk ilkesini izleyerek tek bir işi iyi yapar.
7. Desen Eşleştirme
Tim, desen eşlemenin nasıl istisnaları ele almanıza ve güvenli bir şekilde karşılaştırmalar yapmanıza yardımcı olduğunu gösteriyor. Detaylı tip kontrolü yazmak yerine, bunları birleştirebilirsiniz:
if (emp is EmployeeRecord e)
{
e.Id = 1;
}if (emp is EmployeeRecord e)
{
e.Id = 1;
}Bu tek satır kontrol eder ve dönüştürür. Tim, bunun iyi kodlama uygulamalarıyla uyumlu olduğunu söylüyor—x veya y gibi tek harfli değişken adlarından kaçınıyor ve bunun yerine e gibi açıklayıcı adlar veriyorsunuz. Açık yöntem adları ve değişken adları, diğer geliştiriciler için kodun bakımını kolaylaştırır.
8. String Ara Değiştirme
Okunabilir dizeler oluşturmak için, Tim dize ara eklemeyi gösterir:
$"The employee with ID {e.Id} is {e.Name}"$"The employee with ID {e.Id} is {e.Name}"Bu durumun anlamlı hata mesajları ve yorum yazmayı kolaylaştırdığını belirtiyor. Karışık birleştirme yerine, İngilizce gibi okunan kod yazabilirsiniz—kod kalitesini artırır ve çıktı kontrol eden gelecekteki birim testlerini basitleştirir.
9. Güvenli Refactoring için nameof()
Tim, kodu yeniden yapılandırdığınızda nameof()'un sizi nasıl koruduğunu gösteriyor. String'lerdeki sabit kodlu değişken adları yeniden adlandırıldığında beklenmedik davranışlara yol açabilir. Ancak yazarak:
nameof(emp)nameof(emp)derleyici her kullanımı otomatik olarak günceller. Bu, kod tabanınızı temiz yazarken ve yeniden düzenlerken sağlıklı tutan en iyi uygulamalardan biridir.
10. Birden Fazla Dönen Değer için Demetler
Tim, sadece iki değeri döndürmek için bir temel sınıf oluşturmak yerine, demetleri kullanır:
(string FirstName, string LastName) SplitName(string fullName)(string FirstName, string LastName) SplitName(string fullName)Bu, gereksiz dış bağımlılıklardan kaçınır ve tek sorumluluk ilkesine uyar—metot sadece bir ismi böler, başka bir şey yapmaz. Tim'in dediği gibi, aşırı mühendislikten kaçındığınızda pratik yapmak kodu daha iyi hale getirir.
11. Yapının Bozulması
Tim, demetler üzerinde çalışarak sonuçları yerel değişkenlere nasıl açığa çıkaracağını gösteriyor:
var (firstName, lastName) = SplitName("Tim Corey");var (firstName, lastName) = SplitName("Tim Corey");Bu, değişken adlarını açıklayıcı tutar ve daha sonra karmaşık tuple sözdizimini önler. Tim, kullanılmayan değerleri atma konusuna bile değiniyor (kullanarak _), bu niyeti gösterir—açıklanmamış tek harfli değişken isimleri bırakılmaz.
12. Gereksiz Değerlerin Yoksayılması
Tim, tüm demet parçalarına ihtiyacınız yoksa yoksayıcıları öneriyor:
var (firstName, _) = SplitName("Tim Corey");var (firstName, _) = SplitName("Tim Corey");Bu, diğer geliştiricilere bir değeri kasıtlı olarak göz ardı ettiğinizi gösterir—bütün çıktılarının önemli olmadığı test framework'leri veya birim testlerinde iyi bir şeydir.
13. Bloksuz Using İfadeleri
Tim, kaynak yönetimi ve hata işleme konularına geçiyor. Daha önce, yazardınız:
using (var connection = new SqlConnection(connString))
{
// work
}using (var connection = new SqlConnection(connString))
{
// work
}Artık kullanabilirsiniz:
using var connection = new SqlConnection(connString);using var connection = new SqlConnection(connString);Bu, SOLID prensipleriyle uyumludur—özellikle tek sorumluluk prensibi ve bağımlılık tersine çevirme prensibi ile. Tim, bu söz diziminin veritabanları gibi harici bağımlılıklar için iyi çalıştığını, çoğu hata yönetimini daha temiz hale getirdiğini ve bağlantıların her zaman kapatılmasını sağlayarak performans sorunlarını veya bağlantılar uygun şekilde sonlandırılmadığında meydana gelebilecek SQL enjeksiyon senaryolarını önlediğini belirtir.
14. Satır İçi Çıkış Değişkeni Beyanları
Son olarak, Tim, ayrıştırma gibi işlemler için satır içi out değişken bildirilerini ele alıyor:
if (int.TryParse(numberText, out int numberValue))if (int.TryParse(numberText, out int numberValue))Burada, yerel değişkeni aynı satırda oluşturursunuz. Bu, kodlama kurallarını sıkı tutar ve yöntem adlarının açıklayıcı olmasını sağlar. Kodu düzgün bir şekilde gruplandırarak beklenmedik davranışları azaltır ve gelecekteki kod yeniden düzenleme çabalarını güvenli hale getirirsiniz.
Sonuç
Tim, izleyicilere hatırlatarak videosunu kapatıyor: bu basitleştirmeler, gizemli tek satırlık kodlar yazmakla ilgili değil, iyi kodlama uygulamalarıyla ilgilidir. Statik, kayıtlar, desen eşleme, tuple'lar ve yoksaymalar gibi özellikler, temiz ve modern bir C# yazmanıza olanak tanır.
Geliştiricileri, bu özellikleri benimserken adlandırma kuralları, hata yönetimi ve anlamlı adlar üzerine düşünmeye teşvik eder. "Kod, insanlar tarafından okunmak içindir," diyor Tim—ve anlaşılması kolay kod yazdığınızda, kendiniz ve diğer geliştiriciler için hayatı daha iyi hale getirirsiniz.
Kısacası: Bu C# en iyi uygulamalarını benimseyin, tek sorumluluk ilkesi, arayüz ayrımı ilkesi ve bağımlılık tersine çevirme ilkesi gibi SOLID prensiplerine uyun ve kodunuz sadece derlenmekle kalmayacak; performansı artıracak, beklenmedik davranışları azaltacak ve ekibinizi mutlu bir şekilde kodlamaya devam edecek.

