C#’ın Pek Bilinmeyen 10 Özelliği

By -

C#’ı yalayıp yuttum ben! Daha ne öğreneyim!?!!

Kullandığımız programlama dili ne olursa olsun, dile ne kadar aşina olursak olalım daima bir işi daha iyi yapmanın yeni yollarını keşfediyoruz.

"Biri cahil mi dedi?"

“Biri cahil mi dedi?”

“Tamam, ben her şeyi öğrendim” diyecek kadar cahil cesaretine ulaşmadığımız sürece de keşifler bitmek bilmeyecek.

Peki sürekli kullandığımız C#’ta neleri gözden kaçırıyoruz? İşimizi daha da kolaylaştıracak, okunabilirliği arttıracak, bize ilgi ve şefkat gösterecek ne gibi özellikler var?

Madde madde bakalım neleri bilmiyoruz:

1. Değişken isimlerinde @ karakteri ile rezerve isimler kullanılabilir

Zorunlu bir durumdan dolayı bir değişkenin ismini “string” koymanız mı gerekiyor? (Böyle bir şey niye başıma gelsin ki?)

Merak etmeyin yolu var! Değişkenin önüne @ işareti koymanız yeterli:

Tebrikler! Artık nur topu gibi string tipinde bir string‘iniz var.

2. “default” ile generic tiplerde varsayılan değerin atamasını sağlayabilirsiniz

T referans tipiyse null, int ise 0, boolean ise false atanacaktır.

3. Dosya yollarını “System.IO.Path.Combine()” ile birleştirebilirsiniz

Aşağıdaki kod tanıdık geldi mi?

Artık buna ihtiyacınız yok!

Böyle daha güzel.

4. Lokal namespace dışında tanımlanan bir sınıfa ismiyle erişemiyor musunuz? Korkmayın “global::” bu günler için!

5. “Environment.NewLine” yeni satıra geçmek için gereken “escape karakteri”ni döndürür.

Uygulamanın çalıştığı ortamda yeni satır karakteri neyse Environment.NewLine bu karakteri döndürür. Böylelikle ortamdaki yeni satır karakteri “\n” miydi “\r\n” miydi diye kara kara düşünmemize gerek kalmaz!

6. “as” ile casting esnasında Exception fırlatılmasının önüne geçebilirsiniz!

“as” keyword’ü ile casting esnasında Exception fırlatabilme ihtimali olan satırlarda “null” döndürülmesini sağlayabilirsiniz!

7. “Coalescing operator” ile kolay null kontrolü

Aşağıdaki örnekte, test string’ine testStr1‘in değeri null değilse atanacak, şayet null ise testStr2 atanacaktır. Eğer testStr2 de null ise boş string ataması yapılacaktır. (Deneyerek görmeniz, bu cümleleri okuyup anlamanızdan çok daha kolay olacaktır gibi geliyor bana)

8. String’lerinizi tek hamlede kontrol edin: “String.IsNullOrEmpty()” ile kolayca boş değer ve null kontrolü!

Ne gerek var buna:

Şu varken:

9. “yield” ile iterasyon esnasında enumerator objelerin değerlerini atayabilirsiniz

İteras… enumerator ob… ne!??

Örnekle göstersek daha mantıklı olacak sanırım:

10. Generic sınıflara “where” ile sınırlama getirmek

Generic sınıflara “new” ile sınırlama getirerek generic sınıflara parametresiz, public constructor’a sahip olma koşulu koyabilirsiniz:

E güzelmiş, işime yarar bunlar!

E harika! Hazır bilgiler tazeyken merak ettiklerinizi test etmekte fayda var.

İyi kodlamalar!

Çalışmaktan zevk aldığı insanlarla beraber, ürettiği projelerde edindiği deneyimleri elinden geldiğince objektif olarak aktarmaya çalışıyor. ("O iş hep nazardan yattı.")

  • http://www.tulpargames.com/ Murat Şahin Kılıç

    if(String.IsNullOrEmpty(strVal) == false)

    {

    } böyle yapmak yerine başına ! ünlem getirirseniz de o değerin tam tersini almış olursunuz :) yani bu kodun daha kolayı
    if(!String.IsNullOrEmpty(strVal))
    {

    }

    asla boolean değerlerde == kullanmayı önermem gereksiz ve çirkin bir görünüm

    • Rıdvan Caner Öncü

      Selamlar Murat,

      Evet bu şekilde de kontrol gerçekleştirilebilir ancak kişisel tercih olarak “expression == false” tarzı kullanımı kod üzerinde hızlıca göz gezdirirken daha rahat tespit edilebilir buluyorum. Tercihe göre tabi ki senin paylaştığın biçim de kullanılabilir. Alternatifini de paylaştığın için teşekkürler :)

    • vtomaili

      Okunurluk önemli tabi, bi o kadar da göreceli bir konu. Biri “exp == false” ile daha iyi okuyabiliyorken başkası metod ile daha iyi okuyordur. Bu daha çok çalışma arkadaşların ile beraber ortak karar verilen bir kodlama standardı. Performans olarak ne kadar etki eder i inceleyeyim dedim pek bi etkisi yok 😛 zaten CIL e çevrilirken tüm optimizasyonları yapılıyor.

      http://codepen.io/VictorTomaili/pen/RPGZaZ

  • White Enamel

    Değerli bilgiler için teşekkürler. İşime bayağı yarayacaklar.