Altbilgi içeriğine atla
Iron Academy Logo
C# ve .NET’te Neler Yeni

C# 10 ve .NET 6'da Sabit Enterpolasyon 10 Dakikada veya Daha Az Sürede

Tim Corey
6m 14s

Her yeni sürümle birlikte, C# hem gücü hem de zarafeti bakımından gelişmeye devam eder, geliştiricilere kod yazmak için daha temiz ve daha etkin yollar sunar. C# 10'da getirilen böyle bir ekleme, sabit interpolasyonlu dizelerdir — bu özellik, geliştiricilerin sabitler içinde dize interpolasyonu kullanmasına olanak tanır.

Bu özellikten önce, interpolasyon kullanarak sabit bir dize oluşturmaya çalıştığınızda (örneğin, $"{companyName} Products"), derleyici bir hata verirdi. Yalnızca düz dize literallerini const değerlere atayabilirsiniz; bu da genellikle sabit mesajlar veya öznitelik dizeleri oluştururken tekrar eden ya da hantal koda yol açardı.

Şimdi, C# 10 ve .NET 6 itibarıyla, sabitleri derleme zamanında doğrudan iç içe dizeler kullanarak birleştirebilirsiniz. Bu iyileştirme, kodunuzu sadece daha temiz hale getirmekle kalmaz, aynı zamanda tüm değerler program çalışmadan önce değerlendirildiğinden verimli olmasını da sağlar.

Tim Corey, "10 Dakikadan Daha Kısa Sürede C# 10 ve .NET 6'da Sabit Interpolasyon" adlı videosunda bu kavramı daha iyi anlamamız için bizi adım adım ilerletiyor. Alışılmış kısa ve pratik öğretim tarzıyla Tim, bu yeni özelliğin ne yaptığını, geleneksel dize birleştirmeden nasıl farklılaştığını ve özellikle nerelerde — bilhassa özniteliklerde — faydalı olabileceğini açıklar.

Şimdi Tim'in açıklamasına geçelim ve C# dilindeki sabit interpolasyonlu dizelerin tam olarak nasıl çalıştığını ve neden geliştiriciler için faydalı bir katkı olduğunu görelim.

Giriş

Bu videoda Tim, daha önce mümkün olmayan bir şeyi — sabit ifadelerde tanıdık dolar işareti ($) söz dizimini kullanan interpolasyonlu dizeleri — nasıl kullanabileceğimizi açıklıyor. Bu küçük değişiklik, sabit dize oluşturmayı daha kolay, daha temiz ve daha sürdürülebilir hale getirir.

.NET 6'da Sabitleri Keşfetme

Tim, bir .NET 6 konsol uygulaması açar ve tamamen sabit tanımlamalarına odaklanmak için kalıp kodu kaldırır.

En temel sabit dize bildirimine başlar:

const string companyName = "Acme";
const string companyName = "Acme";

Bu, sabit bir dizeye atanmış basit bir dize literalidir. Bu tür sabitler, derleme zamanında değerlendirilir, bu da onların değerlerinin sabitleştiği ve derlenmiş programa gömüldüğü anlamına gelir.

Ancak Tim hızla merkezi soruya geçiyor: ya sabit dizeleri birleştirmek veya değerleri doğrudan diğer dizelerin içine gömmek istersek?

C# 9 ve öncesinde bunu yapamazdınız:

const string productName = $"{companyName} Anvils"; // Not allowed before C# 10
const string productName = $"{companyName} Anvils"; // Not allowed before C# 10

Bu satır, derleme zamanı hatası verecektir çünkü sabit ifadeler için dize interpolasyonu desteklenmiyordu.

C# 10'da Sabit Interpolasyonlu Dizeler

Tim'in gösterdiği gibi, C# 10'da derleyici artık sabit interpolasyonlu dizeleri destekliyor — içlerindeki tüm interpolasyon ifadeleri de sabit olduğu sürece.

Bu nedenle, aşağıdaki örnek artık mükemmel şekilde çalışıyor:

const string productName = $"{companyName} Anvils";
const string productName = $"{companyName} Anvils";

Bu, sabit bir ara değerli dizedir, yani derleyici, ara değerli dizeyi çalışma zamanı yerine derleme zamanında değerlendirir. Program çalıştığında ekstra dize birleştirme veya dize biçimlendirmesi gerçekleşmez — derleyici "Acme Anvils" gibi tek bir sabit dize literali üretir.

Tim, companyName değerini "Acme"den "ABC"ye değiştirirsek, derleyicinin otomatik olarak productName için "ABC Anvils" ürettiğini açıklar. Derleme zamanı dizesi oluşturma, çalışma zamanı ekleme değil.

Bu iyileştirme, + birleştirmesine başvurmadan veya değerleri elle tekrarlamadan sabit dizeleri birleştirmeyi çok daha kolay hale getirir.

İç İçe Sabit İnterpolasyonu

Tim, başka bir sabit tanımıyla bir adım daha öne geçiyor:

const string productDescription = $"{productName} are the best way to crush unsuspecting roadrunners.";
const string productDescription = $"{productName} are the best way to crush unsuspecting roadrunners.";

Bu, bir sabit interpolasyonlu dizenin (productName) başka bir dizenin içinde kullanıldığı iç içe interpolasyon örneğidir.

Derleyici, bunların hepsini sabit ifadeler olarak değerlendirir ve derleme zamanında tek bir değiştirilemez dize temsilini oluşturur.

Tim programı çalıştırdığında, çıktı şöyle okur:

Acme Anvils are the best way to crush unsuspecting roadrunners.
Acme Anvils are the best way to crush unsuspecting roadrunners.

Bu, sabit interpolasyonunun birden fazla sabit arasında bile sorunsuz çalıştığını doğrular.

Sabitler Neden Önemlidir

Bu noktada, Tim sabitlerin — ve şimdi sabit interpolasyonlu dizgilerin — neden yararlı olduğunu açıklamak için duraksıyor.

Sabitlerin son derece bellek verimli olduğunu çünkü değerlerinin bellekte ayrı örnekler olarak değil, derlenmiş kodda doğrudan saklandığını belirtir.

Buna karşılık, geliştiriciler daha önce benzer bir şeye ihtiyaç duyduğunda, genellikle salt okunur alanlar kullanırlardı:

readonly string companyName = "Acme";
readonly string companyName = "Acme";

Ancak Tim, readonly alanların const ile aynı olmadığını belirtiyor — bunlar çalışma zamanında değerlendirilir, bu da daha fazla bellek tüketir ve derleme zamanı optimizasyonunu engeller.

Sabit araya sokulmuş dizeler ile artık hem açıklığı hem de performansı artırarak, derleme sırasında sabit kalan ifadeler ve yeniden kullanılabilir biçimlendirilmiş dizeler yazabiliriz.

Pratik Örnek — Sabitleri Özelliklerde Kullanma

Tim daha sonra bu yeni özelliğin parladığı gerçek bir senaryo olan nitelikleri tanıtır.

O, Main() içinde basit bir yerel yöntem tanımlar:

void SayHi() { }
void SayHi() { }

Daha sonra, bir değişkene referans veren bir dize mesajıyla [Obsolete] özelliğini uygulamaya çalışır:

string myCompany = "Tim's Company";
[Obsolete($"This is no longer used for {myCompany}")]
string myCompany = "Tim's Company";
[Obsolete($"This is no longer used for {myCompany}")]

Bu başarısız olur çünkü nitelikler parametre olarak yalnızca sabit ifadeleri kabul edebilir. Derleyici, myCompany bir sabit değil, bir değişken olduğu için hata verir.

Tim, niteliğin mesajının derleme zamanı sabiti olması gerektiğini, yani çalıştırma zamanı değerlerine veya örnek değişkenlere bağlı olamayacağını açıklar.

Ancak, C# 10'da sabit interpolasyonlu dizeler sayesinde, şimdi bunu güvenle yapabiliriz:

const string productName = $"{companyName} Anvils";
[Obsolete($"This is no longer used for {productName}")]
const string productName = $"{companyName} Anvils";
[Obsolete($"This is no longer used for {productName}")]

Burada, derleyici hem companyName hem de productName'in sabitler olduğunu tanır, bu yüzden tüm iç içe geçmiş dize sabit bir ifadedir.

Derleyici, biçimlendirilmiş dizeyi derleme zamanında üretir ve bu, özniteliğin içinde geçerli hale getirir.

Bu örnek, sabit enterpolasyonunun neden sadece sözdizimsel şeker olmadığını mükemmel bir şekilde vurgular — derleme-zamanı formatlanmış dizeleri doğrudan nitelikler veya meta verilerde kullanmak gibi yeni senaryoları mümkün kılar.

Perde Arkası — Derleyici Bunu Nasıl İşler

Tim videoda düşük düzey derleyici iç ayrıntılarına girmiyor, ancak kavram C# 10'da yerleşik dize işleyicilerinin nasıl çalıştığıyla yakından ilişkilidir.

Genel olarak, derleyici bir interpolasyonlu dizeyle karşılaştığında, arka planda AppendLiteral() ve AppendFormatted() gibi çağrılar oluşturarak bir biçim dizisi işlemine benzer kod üretir.

Ancak sabit interpolasyonlu dizelerle çalışırken, derleyici her şeyi derleme zamanında değerlendirir — oluşturulan IL kodunda herhangi bir interpolasyonlu dize işleyicisi veya yöntem çağrısı yer almaz.

Bu, elde edilen değerin herhangi bir dize sabiti gibi davrandığı anlamına gelir; yine de diğer sabitlerden gömülü ifadeler kullanarak oluşturabilirsiniz.

Derleyici, dize yapısını statik olarak ele alarak sıfır çalışma zamanı maliyeti sağladığından, ifade gücü ile verimlilik arasında zarif bir denge söz konusudur.

Değişmez Yorumlu Dizeleri Ne Zaman Kullanmalı

Tim, herkesin bu özelliği her gün kullanmayacağını kabul ediyor. Sıklıkla sabitleri tanımlamayan veya öznitelikler yazmayan geliştiriciler hemen fayda sağlamayabilir.

Ancak, birçok derleme zamanı tanımı, sabit mesaj veya öznitelik meta verisi oluşturanlar için bu özellik, kodu basitleştirir ve string birleştirme dağınıklığını önler.

Bu aynı zamanda daha güvenlidir — çünkü sabitler değiştirilemez ve derleyici tarafından kontrol edilir, bu yüzden dinamik olarak birleştirilmiş dizgilerden veya yanlış yönetilen değişkenlerden kaynaklanan hataları ortadan kaldırırsınız.

Bu, kodunuzu daha dayanıklı, okunabilir ve bakımını daha kolay hale getirir.

Sonuç

Tim videosunu bitirirken, geliştiricileri projelerinde sabit interpolasyonlu dizeler kullanıp kullanmayacaklarını düşünmeye davet ediyor. Bazıları bunların daha temiz derleme zamanı biçimlendirilmiş dizeleri için gerekli olduğunu düşünebilirken, diğerleri bunları küçük bir kolaylık olarak görebilir.

Her iki durumda da, Tim'in demonstrasyonu bu özelliği nasıl uygulayacağınızı ve nerede etkili bir şekilde uygulayacağınızı tam olarak gösteriyor.

Özetle:

Sabit interpolasyonlu dizeler, sabitler içinde interpolasyonlu ifadelerin kullanılmasına izin verir.

Derleme zamanında değerlendirilirler ve verimli dize sabitleri üretirler.

  • Tekrar eden dize birleştirmeyi daha temiz bir söz dizimi ile değiştirirler.

Özellikle özniteliklerde, sabite dayalı yapılandırmada ve meta veri mesajlarında oldukça faydalıdırlar.

Derleme zamanı güvenliğini okunabilirlikle birleştirerek, C# 10'daki sabit interpolasyon ifade gücü yüksek ve verimli C# programlamaya doğru atılmış başka bir adımdır — Tim Corey'nin örneğinde açıkça gösterildiği gibi.

Hero Worlddot related to C# 10 ve .NET 6'da Sabit Enterpolasyon 10 Dakikada veya Daha Az Sürede
Hero Affiliate related to C# 10 ve .NET 6'da Sabit Enterpolasyon 10 Dakikada veya Daha Az Sürede

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js üzerinde çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara