Değer Tipleri (Value Types)

6 Ara

.Net framework platformunun en basit tipleri nümerik ve mantıksal (Boolean) olan değer tiplerdir. Değer tipleri bellekte her hangi biryerde referans tutmadan direkt olarak kendi verilerini tutarlar. Değer tiplerinin örnekleri(Instances) bellekte stack denilen bölgede tutulur. Stack bölgesindeki verileri runtime esnasında oluşturma, güncelleme ve silme işlemleri en az iş yükü ile hızlıca gerçekleşir.

Genel olarak üç çeşit değer tipi bulunmaktadır.

  • Built-in tipler. .Net Framework bünyesindeki tiplerdir.
  • User-defined tipler. Kullanıcıların tanımladığı tiplerdir.
  • Enumeration tipler. Enum tipleridir.

Bütün bu tipler System.Value temel tipinden türemiştir.

Built-In Değer Tipleri

Built-in değer tipleri .Net Framework ortamında bulunan ve başka tiplerden inşa edilmiş temel tiplerdir. Aşağıdaki tabloda en çok kullanılan nümerik tipler bellekte kapladıkları alanlara göre büyükten küçüğe sıralanmıştır. Bunlardan ilk altı tanesi tamsayı değerlerini, son üç tanesi ise real sayıları temsil etmek için kullanılan tiplerdir.

Tip Byte
System.Sbyte(Sbyte/sbyte) -128 ve 127
System.Byte(Byte/byte) 0 ve 255
System.Int16(Short/short) -32768 ve 32767
System.Int32(Integer/int) –2147483648 ve 2147483647
System.UInt32(UInteger/uint) 0 ve 4294967295
System.Int64(Long/long) –9223372036854775808 ve9223372036854775807
System.Single (Single/float) –3.402823E+38 ve3.402823E+38
System.Double(Double/double) –1.79769313486232E+308 ve1.79769313486232E+308
System.Decimal(Decimal/decimal) –79228162514264337593543950335 ve79228162514264337593543950335

Not: Çalışma zamanı(runtime) 32 bit integer (Int32 ve Uınt32) tiplerini optimize eder. Bu yüzden sayaç(counter) ve sık erişilen değişkenler bu tiplerde olmalıdır. Örneğin döngülerde kullanılan sayaç değişkenleri int tipinde olması performansı arttırır. Floating point işlemlerinde ise Double tipi en etkili tiptir. Çünkü bu tip işlemler donanımlar tarafından optimize edilir.

Nümerik tiplerin yanında nümerik olmayan built-in veri tipleri de aşağıda verilemktedir.

Tip Byte
System.Char(Char/char) 2
System.Bolean (Boolean/bool) 4
System.IntPtr
System.DateTime (Date/date) 8

Bu tiplerin yanında Framework’te 300 den fazla tip mevcuttur. Ancak burada en sık kullanılan tipler verilmiştir. Değer tipleri arasında atama işlemi yapıldığında, veri bir değişkenden diğerine kopyalanmakta ve  iki ayrı stack bölgesinde depolanmaktadır.

Değer tipleri genellikle basit türleri temsil etmesine rağmen yine de nesneler(Object) olarak işleve görmektedir. Yani nesnelere(Object) ait metodları değer tipleri üzerinden çağırabiliriz. Örneğin en sık kullanılan metod olan ToString()  metodu değer tiplerine ait örneklerden erişilebilir. .Net Framework’te bütün neslere System.Object sınıfından türemiştir.bu sayede bütün tiplerin ortak bir noktası olmuştur.

Değer Tiplerinin Tanımlanması

Bir değer tipini kullanmaya başlamadan önce tanımlanması gerekmektedir. Değer tipleri gizli bir kurucu metoda sahiptir. Bu yüzden tanımlama esnasında sınıflarda kullanıldığı gibi  New anahtar kelimesinin kullanılmasına gerek yoktur. Mevcut kurucu metod, tanımlanan değişken örneğine başlangıç değeri olarak (Null, 0 veya False) gibi değerleri otomatik olarak atar. Ancak yinde oluşturulan değişkenlere başlangıç değerlerinin verilmesinde fayda vardır.

Örnek:

bool b = false;

Not: C# büyük harf ve küçük harfe duyarlı bir dildir.

Bazı durumlarda değişkenlerin null olması gerektiği durumlar oluşabilir. Örneğin bir formdan Evet/Hayır şeklinde bir cevap almak istendiğinde kullanıcı seçeneği işaretlemedğinde de null değer saklanması gerekebilir. Bu durumlarda değişkeni Nullable olarak tanımlayabiliriz. .Net 2.0 ile gelen bu özellik sayesinde aşağıdaki gibi tanımlamalar yapabiliriz.

Örnek:

Nullable<bool> b = null;

//Veya

bool? B = bull;

Nullable değişkenlerin HasValue ve Value isimli iki özelliği bulunmaktadır. Bu sayede değişkenin değer içerip içermediği kontrol edilebilmektedir.

User-Defined (Kullanıcı Tanımlı) Tipler

Kullanıcı tanımlı değer tipleri Stracture olarak bilinen ve struct olarak tanımlanan tiplerdir. Diğer değer tipleri gibi struct tipi örnekleri de belleğin stack bölgesinde tutulur. Kendi verilerin tutarlar. Diğer yönleriyle sınıflarla hemen hemen aynı davranırlar.

Stracture tipleri diğer tiplerin kombinasyonundan oluşurlar ve bu da ilgili verilere kolay erişmeyi sağlar. Bunu en basit örneklerinden biri System.Drawing.Point yapısıdır. Bünyesinde int türünden X ve Y adında iki özellik barındırır. Bu özellikler noktanın koordinatlarını verir.

Örnek:

System.Drawing.Point p = new System.Drawing.Point(); //Nokta tanımlanıyor

p.Offset(-1,-1);  //Köşegen yönünde kaydırılıyor.

Kendi struct tipimizi de tanımlayabiliriz.

Örnek:

struct Cycle
{
  int val, min, max;
  public Cycle(int min, int max);
  {
    val=min;
    min=min;
    max=max;
  }

…….

}

Yukardaki Cycle örneğini değer tipinden referans tipine çevirmek son derece kolay. Yapılması gereken sadece struct yerine class yazmaktır. Bu durumda heap bölgesine 12 byte (her değişken için 4 byte) tahsis edilecektir.

İşlevsellik benzer olsa da structure’lar  sınıflardan çok daha etkili sonuç verir. Uzman görüşü olarak 16 byte’tan küçük veriler için performansın yüksek olmasını istiyorsanız class yerine struct kullanmalısınız.

Enumeration Tipleri

Enumeration tipleri kodun rahat okunabilmesini sağlamak amacıyla geliştirilen semboilk tiplerdir. Geliştirme aşamasında sınırlı seçenekler sunmak amacıyla tanımlanırlar.

Örnek:

enum Titler{
    Mr, Ms, Mrs, Dr
}

Kaynak: MCTS Self-Paced Training Kit: Microsoft .Net Framework 2.0 Application Development Faundation

C# Kod Standatları ve En İyi Programlama Teknikleri Son– Bölüm 8

28 Kas
  1. Giriş
  2. İsimlendirme ve standartları
  3. Girintiler ve aralıklar
  4. Doğru programlama teknikleri
  5. Mimari
  6. ASP.NET
  7. Yorumlar
  8. Hata ayıklama

Hata Ayıklama

Serimizin son bölümünde hata yakalama ile ilgili bazı tekniklerden bahsedilmektedir.

  • Bir cache exception tanımlayıp içini boş bırakmak doğru bir yöntem değildir. Çünkü bir hata oluştuğunda bize bir hata mesajı dönmeyecek ve hata yokmuş gibi kod işlemeye devam edecektir. Önemsiz hatalar için bu yöntemi uygulayan geliştiriciler vardır. Fakat siz programlı olarak her zaman hataları önlemek için çalışmalısınız. Hiç değilse hataları yakalayıp log dosyasına veya veritabanına kaydedip yola devam etmelisiniz.
  • Hata oluştuğu durumlarda kullanıcıya uygun bir mesaj vermelisiniz. Fakat hatayı tüm detayları ile kayıt altına almalısınız.
  • Her zaman genel Exception’lar yerine oluşabilecek hataya özgü Exception’lar yakalayın.

İyi Kod:

Kötü Kod:

  • Tüm metodlarda hata yakalamaya gerek yoktur. Bazen uygulamanın çökmesi için açıklar bırakın. Bu sayede geliştirme aşamasında karşılaşılabiliecek hataları bulmanıza yardımcı olacaktır.
  • Try-cache bloğunu tüm metodlarda kullanmayın.  Başka bir şekilde önüne geçemeyeceğiniz hata durumları oluşacaksa kullanın. Örneğin veritabanına bir kayıt girerken kaydın zaten olup olmadığını anahtar değeriyle kontrol etmelisiniz. Bazen geliştirici kayıt sırasında kontrol etmeden giriş yapmaya çalışır ve hata durumunda kayıt zaten var zanneder. Bu kesinlikle kabul edilemez. Hata oluşmasını beklemeden önleminizi almalısınız.
  • Gerektiği durumlarda kendi hata yakalama sınıflarınızı yazın. Özel sınıflarınızı SystemException sınıfından değil ApplicationException sınıfından türetin.

Bu yazı ile birlikte kod standartları serimizin sonuna gelmiş bulunuyoruz. Umarım faydalı bir yazı dizisi olmuştur. Herkere iyi çalışmalar.

C# Kod Standatları ve En İyi Programlama Teknikleri – Bölüm 7

26 Kas
  1. Giriş
  2. İsimlendirme ve standartları
  3. Girintiler ve aralıklar
  4. Doğru programlama teknikleri
  5. Mimari
  6. ASP.NET
  7. Yorumlar
  8. Hata ayıklama

Yorumlar

Anlamlı ve açıklayıcı yorum satırları kodu daha anlamlı kılar ve bakımı kolaylaştırır. Bu noktada dikkat edilmesi gereken hususlar şunlardır.

  • Yazılan her koda yorum satırı eklemeye gerek yoktur.
  • Yorum satırları için // veya ///  işaretlerini kullanın. /*…*/ işaretini kullanmaktan kaçının.
  • Sadece gerekli olan yerlere yorum yazın. Bu sayede kodun okunabilirliği sağlanmış olur. Eğer metod ve değişken isimleri yeterince açıklayıcı şekilde seçilirse yorum satırlarına gerek kalmayacaktır.
  • Kod yorum satırı olmadan da anlaşılabiliyorsa gereksiz yere yorum yazmayın. Yorum satırlarının dezavantajlarından biri de kod değiştirilip yorum satırı değiştirilmediğinde kafa karışıklığına yol açmasıdır.
  • Az satırlı yorumlar kodu daha şık hale getirecektir. Ancak kod temiz, okunabilir değilse ve yorum satırları da yeterli değilse, bu durum da kötüdür.
  • Mantıksal açıdan çok karmaşık bir kod varsa yani anlaşılması güç bir mantık kullanılmışsa kilit noktalarda açıklamalar yapmak uygun olacaktır.
  • Yazım kurallarına uyan, noktalama işaretleri düzgün yorumlar yazın.

C# Kod Standatları ve En İyi Programlama Teknikleri – Bölüm 6

14 Kas
  1. Giriş
  2. İsimlendirme ve standartları
  3. Girintiler ve aralıklar
  4. Doğru programlama teknikleri
  5. Mimari
  6. ASP.NET
  7. Yorumlar
  8. Hata ayıklama

ASP.NET

Serimizin bu bölümünde Asp.Net tarafında faydalı olabilecek birkaç ipucuna değinilmektedir.

  • Session değişkenlerini kodun her tarafında kullanmayın. Yazdığınız sınıflarda ki metodlarda oturum değişkenlerine erişmek için kullanın. Bir sınıf System.Web.HttpContext.Current.Session ile oturum değişkenine erişebilir.
  • Session değişkenlerinde çok büyük veriler saklamayın. Büyük verilere sahip olan session değişkenleri çok kullanıcılı sistemlerde sunucu hafızasını olumsuz etkileyecektir.
  • Sayfaların tasarım kısmında stil dosyalarını kullanın. Font isimleri ve font büyüklüklerini sayfa kodları içine eklemeyin.  Uygun stil dosyalarını kullandığınızda font büyüklüklerini değiştirmek için bakacağınız yer stil dosyası olacaktır.

C# Kod Standatları ve En İyi Programlama Teknikleri – Bölüm 5

13 Kas
  1. Giriş
  2. İsimlendirme ve standartları
  3. Girintiler ve aralıklar
  4. Doğru programlama teknikleri
  5. Mimari
  6. ASP.NET
  7. Yorumlar
  8. Hata ayıklama

Mimari

Serimizin bu bölümünde mimariler konusuna kısaca değinilmektedir.

  • Her zaman çok katmanlı (N-Tier) mimariyi tercih edin.
  • Veritabanı bağlantılarını arayüzün bulunduğu katmandan (UI ) yapmayın. Her zaman veritabanı işlemlerini ve ilişkilerini barındıran bir veri erişim katmanınız bulunsun. Bu sayede bugün MsSQL server yarın Oracle veya Ms Access dosyasını kullanmanızda sorun olmayacaktır.
  • Veritabanı hatalarını yakalamak için try-cache kullanın. Bu sayede connectionstring, sql komutu, stored procedure gibi yapıların hangisinde hata olduğu açığa çıkıyor olacaktır.
  • Uygulamanızı gerektiği taktirde birçok projeden(assembly) oluşacak şekilde geliştirin.

C# Kod Standatları ve En İyi Programlama Teknikleri – Bölüm 4

9 Kas
  1. Giriş
  2. İsimlendirme ve standartları
  3. Girintiler ve aralıklar
  4. Doğru programlama teknikleri
  5. Mimari
  6. ASP.NET
  7. Yorumlar
  8. Hata ayıklama

Doğru Programlama Teknikleri

  • İçeriği çok uzun olan metodlar yazmayın. Bir metod 1 – 25 satır arası uzunlukta olmalıdır. Eğer 25 satırdan uzun bir metodunuz varsa bunu alt metodlara bölmelisiniz.
  • Metod isimleri metodun ne iş yaptığını anlatır nitelikte olmalıdır. Niyeti belli etmeyen yanıltıcı isimler kullanmayın. Metod ismi açıklayıcı şeklide seçilirse metodun ne iş yaptığını belirten yorum satırları yazmamıza gerek kalmaz.

İyi Kod:

Kötü Kod:

  • Yazılmış bir metodun tek bir işi olmalıdır. Metoda yaptıracağınız iş çok küçük olsa bile, tek bir satırlık olsa bile birmetoda birden fazla işi yüklemektek kaçının.

İyi Kod:

Kötü Kod:

  • Değişken tiplerini System ad uzayındaki özel tipler yarine C# veya VB dillerine belirlenmiş standart değişken tiplerden seçin.

  • Herzaman beklenmedik durumları göz önünde bulundurun. Örneğik iki değer alabilen bir değişkeniniz varsa bu değerler dışında bir durum olabileceğini göz önünde bulundurmalısınız.

İyi Kod:

Kötü Kod:

  • Sayı değerlerini kod içine doğrudan gömmek (Hardcode) yerine Constant değişken olacak şekilde tanımlayın. Ancak constant değişkenler ilerde değiştirilme ihtiyacı duyacaksa kullanması  önerilmez. Bunun yerine configuratin dosyaları veya veritabanları tercih edilir. Eğer bir değer hiç değişmeyecek değer alacaksa constant olarak tanımlayın. Örneğin pi sayısı gibi.
  • String değişkenleri kod içine doğrudan yazmak yerine resource dosyaların kullanın.
  • String değişkenleri birbiri ile karşılaştırmadan önce UpperCase veya LowerCase dönüşümü yapın. Bu sayede karşılaştırılan kelimeler yazım olarak aynı standarda getirilerek karşılaştırma yapılmış olacak. Yani “kelime” ile “KeLiMe” karşılaştırmasında hata olmaktan kutulmuş oluruz.

  • String tiplerin boş olup olmadığı durumları test etmek için (“”) sınaması yerine String.Empty sınamasını kullanın.

İyi Kod:

Kötü Kod:

  • Üye değişkenleri (members) kullanmaktan kaçının. Ortak bir üye değişkeni tüm metodlarda kullanmak yerine lokal değişkenleri gerektiği yerlerde tanımlayın ve diğer metodlara geçirin (parametre olarak). Bu sayede değişkenin hangi metod tarafından ne zaman değiştirildiğini takip etmek kolay olur.
  • Gerekli yerlerde enum kullanın.  Ayrık değerleri göstermek için string veya numaraları kullanmaktan kaçının.

İyi Kod:

Kötü Kod:

  • Üye değişkenleri (members) public veya protected tanımlamayın. Bunun yerine bu değişkenlere özel özellikler (properties) tanımlayın.
  • Olay yakalayıcılar (Event Handler) içerisinde direk iş yapıcı kodlar bulundurmak yerine Event Handler tarafından bir metodu çağırarak metoda iş yaptırın.
  • Kod içinde fiziksel dosya yollarını (path) veya sürücü isimlerini asla elle yazmayın. Bunun yerine “application path” denilen uygulamanın göreceli yollarını kullanın.
  • Uygulamanızın her zaman “C:” sürücüsünde çalışacağını farzetmeyin. Belki bir kullanıcı “D:” sürücüsünde veya sunucuda çalışacak olabilir.
  • Uygulama başlatılırken, önce bir “öz dnetim” yaparak gerekli dosyaların olup olmadığını veya veritabanı bağlantılarının sağlanım sağlanmadığını test ederek kullanıcıyı uygun bir mesajla durumdan haberdar edin.
  • Konfigürasyon dosyası yoksa uygylama varsayılan olarak bir dosya oluşturabilmeli.
  • Konfigürasyon dosyasındaki bir ayar yanlış girlmişse uygulama bir hata fırlatmalı veya kullanıcıya doğru ayarın ne olması gerektiğini bildirmelidir.
  • Hata mesajları kullanıcıya sorunu çözebilmesi için yardımcı olmalıdır. Örneğin “Veritabanı bağlantısı sırasında bir hata oluştu. Kullanıcı adı ve şifrenizi kontrol ediniz.” gibi.
  • Bir dosya içinde birden fazla sınıf (class) bulundurmayın.
  • Çok büyük dosyalar oluşturmaktan kaçının. Bir dosya içinde binlerce satır kod olmamalıdır. Bunun yerine ayrı dosyalarda küçük sınıflar (class) halinde çalışılmalıdır.
  • AssemblyInfo dosyasına bilgileri tam olarak girin. Ad, soyad, şirket v.s gibi.
  • Eğer bir veritabanı, file stream veya soket bağlantısı açtıysanız bu bağlantıyı finally bloğunda kapatın. Bu sayede kodunuz zaten açık olan bağlantıyı açmaya çalışıyorsunuz şeklinde hatalardan arınmış olur.
  • Bir döngü içinde string nesnelerini işlemek zorunda kaldığınızda string yerine StringBuilder nesnelerini tercih edin. .Net’te String nesnesi garip bir şekilde çalışır. Bir stringe bir ekleme yaptığınızda eski string silinerek yeni bir nesne oluşturulur. Bu da pahalı bir yöntem olacaktır.

Aşağıda bu durumu yansıtan bir örnek mevcut:

   public string ComposeMessage (string[] lines)
   {
      string message = String.Empty;

      for (int i = 0; i &lt; lines.Length; i++)
      {
        message += lines [i];
      }
      return message;
   }

StringBuilder nesnesinin kullanıldığı bir örnek ise şu şekilde olacaktır:

   public string ComposeMessage (string[] lines)
   {
     StringBuilder message = new StringBuilder();

     for (int i = 0; i &lt; lines.Length; i++)
     {
        message.Append( lines[i] );
     }

     return message.ToString();
   }

C# Kod Standatları ve En İyi Programlama Teknikleri – Bölüm 3

3 Kas
  1. Giriş
  2. İsimlendirme ve standartları
  3. Girintiler ve aralıklar
  4. Doğru programlama teknikleri
  5. Mimari
  6. ASP.NET
  7. Yorumlar
  8. Hata ayıklama

Girintiler ve aralıklar

  • Girinti yapmak için TAB tuşunu kullanın. Boşluk (SPACE) tuşunu kullanmayın.
  • Yorum satırları kod satırlarıyla aynı hizada olmalıdır.

İyi Kod:

Kötü Kod:

  • Süslü parantzler ( {} ) kodlar ile aynı seviyede olmalıdır.

  • Gruplandırdığınız kod blokları arasında bir satır boşluk bırakın.

İyi Kod:

Kötü Kod:

  • Sınıf içinde her bir metod arasında sadece bir satır boşluk olmalıdır.
  • Süslü parantezler if, for gibi kodlarla aynı satırda olmamalı ayrı bir satırda olmalıdır.

İyi Kod:

Kötü Kod:

  • Her operator ve parantezden önce bir boşluk bırakın

İyi Kod:

Kötü Kod:

  • Birbiri ile alakalı kod parçalarını guruplamak için #region kodunu kullanın. Bu kod arasında kalan kodları kapatarak saklamak mümkündür.

  • Private üye değişkenleri,  metodları ve özellikleri dosyanın üst kısmında public olanları ise dosyanın alt kısmında tutun.

C# Kod Standatları ve En İyi Programlama Teknikleri – Bölüm 2

31 Eki
  1. Giriş
  2.  İsimlendirme ve standartları
  3. Girintiler ve aralıklar
  4. Doğru programlama teknikleri
  5. Mimari
  6. ASP.NET
  7. Yorumlar
  8. Hata ayıklama

İsimlendirme ve standartları

Serimizin ikinci bölümüyle yeniden birlikteyiz. Bu bölümde kodlama yaparken alan, özellik, sınıf gibi yapıların isimlendirmelerini yaparken dikkat etmemiz gereken noktaları konuşacağız.

İsimlendirme standartlarına giriş yaparken makale boyunca sıklıkla karşılaşacağımız Pascal Casing ve Camel Casing  kavramlarından bahsetmemiz gerekiyor: 

Pascal Casing: Kelimelerin ilk harfleri büyük geri kalan harfleri küçük yazılır.

Örnek: ProductName

Camel Casing: İlk kelimenin ilk harfi hariç kelimelerin baş harfleri büyük diğer harfler küçük yazılır.

Örnek: productName

  • Sınıf adlandırmalarında Pascal Casing yöntemini kullanın.

  • Metod adlandırmalarında Pascal Casing  yöntemini kullanın.

  • Değişken isimlerinide ve metod parametrelerinde Camel Casing yöntemini kullanın.
  • Arayüz (Interface) isimlendirmelerini yaparken “I” ön ekini kullanın.(Ör: IProduct)
  • Değişken isimlendirmelerinde Macar (Hungarian) notasyon tercih etmeyin. Önceleri  programcıların değişken kelimeleri arasında kullandığı ”_” alt tire karakteri .net kod standartlarında tercih edilmez. (ÖR: String m_name;). Bunun yerine Camel Casing kullanılır.
  • Değişkenler için anlamlı ve açıklayıcı kelimeler kullanın. Kısaltma kullanmayın.

İyi Kod:

string address

int salary

Kötü Kod:

string nam

string addr

int sal

  • Tek karakterlik değişken işimleri (i, n, s gibi) kullanmayın. Bunun yerine index, temp gibi kelimeler kullanın. Ancak döngülerde iterasyon için kullanılan değişkenler bu durum haricindedir.

for ( int i = 0; i < count; i++ )
{

……..

}

  • Lokal değişkenler için (_) alt tire karakterini kullanmayın.
  • Değişken isimlerini C# anahtar kelimelerine benzer olacak şekilde seçmeyin.
  • Mantıksal (boolean) değişkenlerin önünde (is) veya benzer ön ekler kullanın. (ör: private bool isFinished)
  • UI elemanlarını birbirinden ayırabilmek için uygun bir önek kullanın.
Control Prefix
Label lbl
TextBox txt
DataGrid dtg
Button btn
ImageButton imb
Hyperlink hlk
DropDownList ddl
ListBox lst
DataList dtl
Repeater rep
Checkbox chk
CheckBoxList cbl
RadioButton rdo
RadioButtonList rbl
Image img
Panel pnl
PlaceHolder phd
Table tbl
Validators val
  • Sınıfların (Class) bulunduğu fiziksel dosya isimleri sınıf ismi ile aynı olmalıdır. Örneğin HelloWorld sınıfı için dosya adı helloworld.cs veya HelloWorld.cs olabilir.
  • Dosya isimleri için Pascal Casing kullanın.

Serinin bu bölümü umarım anlaşılabilmiştir. Bir sonraki bölümde görüşebilmek dileğiyle.

C# Kod Standatları ve En İyi Programlama Teknikleri – Bölüm 1

30 Eki
  1. Giriş
  2. İsimlendirme ve standartları
  3. Girintiler ve aralıklar
  4. Doğru programlama teknikleri
  5. Mimari
  6. ASP.NET
  7. Yorumlar
  8. Hata ayıklama

Giriş

C# Kodlama standartlarının anlatıldığı 8 bölümlük serimize giriş yapmış bulunuyoruz.

Herkes birkaç aylık programlama eğitimi sonrasında kod yazar hale gelebilir. Kolayca çalışan uygulamalar ortaya çıkarabilir. Ancak işi doğru bir şekilde yapmak, daha fazla çalışma gerektirir.

Şuna inanmak gerekir ki programcıların çoğu “çalışan kod” değil “iyi kod” yazmak ister. “İyi kod” yazmak öğrenilmesi gereken gereçek bir sanattır.

“İyi kod” yazmanın tanımını herkes farklı bir şekilde yapabilir. Bence iyi kodun şu özellikleri taşıması gerekir.

  • Güvenilir olamlıdır.
  • Sürdürülebilir olmalıdır. Yani bakımı kolay olmalıdır.
  • Verimli olmalıdır.

Birçok geliştirici kodun sürdürülebilir ve güvenilir olmasından çok, yüksek performanslı olmasını göz önünde tutar. Ancak uzun vadede (Yatırım açısından) verimlilik ve performans, güvenilirlik ve bakımdan sonra gelir. Yazdığınız kod güvenilir ve sürdürülebilir değilse, siz (veya şirketiniz) her defasında sorunların tespiti ve uygulamanın akışını anlayabilmek için çok fazla zaman harcamak zorunda kalacaktır. Unutmayın, yapılan her fazla mesainin ardında plansız yapılmış işler vardır.

Microsoft ASP.NET takımından Syn. Stephen Walter bir hikayesinde yazılım geliştirmeye ilk başladığı zamanlarda iyi yazılım için “Good software is software that works as you intended.” diyoru. Yani iyi yazılım istediğiniz gibi çalışan yazılımdır. Ancak daha sonraları büyük şirketlere girdiğinde geliştirilen yazılımın odak noktasının hızlı yazılım üretmek değil, yazılan kodun bakımının kolay olması olduğunu görüyor. Stephen Walter fikrini değiştiriyor ve “Good software is software that works as you intended and that is easy to change” diyor. Yani iyi yazılım bakımı kolay olan ve istediğiniz gibi çalışan yazılımdır diyor.

Serinin devamında isimlendirme ve standartları ile kodlama olaylarını örneklerle anlatarak devam ediyor olacağız.

C# Dilinde Kullanılan Faydalı Operatörler

28 Ağu

(??)  “null coalescing” Null kontrol operatörü

Bu operatör nullable(null değer alabilir) bir değişkenin null oluğ olmadığını kontrol eder.

Örnek:
               string name = "Product";
               string info = name ?? "product name is null"

(?:)  Mantıksal Sınama Operatörü

Bu operatör mantıksal bir sınamayı ifadeyi temsil eder. if sınamasının kısa yazım şeklidir.

Kullanımı:
               condition ? first_expression : second_expression;
               şart ? birinci_durum : ikinci_durum;

Örnek:
               if(x != 0.0) s = Math.Sin(x)/x; else s = 1.0;
               s = x != 0.0 ? Math.Sin(x)/x : 1.0;

Nullable<> (?) operatörü

Örnek: public int? Command { get; set; } şeklindeki bir tanımlamada ? ile Command property’nin null değer alabileceği ifade ediliyor.

Örnek:
              public Nullable<int> Command {get; set;}

(::) operatörü

Bazı kütüphanelere extern alias tanımlaması yapılır. Harici isim takma şeklinde Türkçeleştirilebilir. .NET’te birçok noktada global:: şeklinde tanımlamalar bulunur. Amaç aynı isimdeki sınıfların birbirini ezmesini engellemek ve her iki sınıfada farklı isimler vererek kullanıma sunmaktır.

Örnerk:
              public global::System.Int32 id