Serdar YILMAZ / Software Developer
Bizimkisi Bir “Bug” Hikayesi...
Kocaeli/Körfez
Serdar Yılmaz “var” Anahtar Sözcüğünün Performansa ve Okunabilirliğe Etkisi

“var” Anahtar Sözcüğünün Performansa ve Okunabilirliğe Etkisi

Visual Studio’da kullanmakta olduğum ReShapper uzantısının; int, double, string, bool gibi veri tiplerinde tanımlanmış değişkenlerde dahi “var” anahtar sözcüğünün kullanımını önermesi üzerine, “var” anahtar sözcüğünün performans üzerinde bir artısı olup olmadığını araştırıp, konuya ilişkin bir içerik yayınlamaya karar verdim.

Performans Üzerindeki Etkisi

var” anahtar sözcüğü ile belirttiğimiz değişkenlerin veri tipleri, derleme anında, değişkenlere atadığımız değerlere göre belirlenmektedir.

Yukarıdaki kod satırlarında; number_1 değişkeninin veri tipi “int” olarak açık bir şekilde belirtilmişken, number_2 değişkeninin “var” anahtar sözcüğü ile belirtildiğini görmekteyiz.

Derleme işlemi sırasında oluşturulan ara kodu (IL) inceleyecek olursak, her iki değişkeninde “int” tipinde olduğunu görürüz. Yani “var” anahtar sözcüğü ile belirtilen number_2 değişkeninin veri tipi derleme anında “int” olarak belirlenmiştir. Her iki değişkenin de veri tipi çalışma anında int tipinde olacağından, iki kod satırı arasında herhangi bir performans farkı olmayacaktır. Tek fark; derleme anında number_1 değişkeni direkt “int” olarak işleme koyulurken, number_2 değişkeni, içerisine atanan değer incelendikten sonra “int” olarak işleme koyulacaktır, bu da her ne kadar derleme anında bir zaman kaybına neden olsa da çalışma anında herhangi bir zaman ve performans kaybına neden olmayacaktır.

Okunabilirlik Üzerindeki Etkisi

Değişkenlerin veri tiplerini açık bir şekilde belirtmek ile “var” anahtar sözcüğünü kullanmak arasında herhangi bir performans farkı olmadığına göre, konuyu diğer bir kıstasımız olan okunabilirlik üzerinden irdeleyerek devam edebiliriz.

“When you come to work, you are not writing code for you, you’re writing code for those who come after you”

– Nicolas C. Zakas

İki kod satırı arasında herhangi bir performans farkı olmayacağını derleme işlemi sırasında oluşturulan ara kodu (IL) inceleyecek doğrulayabiliriz.

Okunabilirlik açısından değerlendirdiğimiz zaman da iki kod satırı arasında bir fark olmadığını söyleyebiliriz. Sonuçta bir programcı, ilk bakışta person_1 ve person_2 referanslarının, değer (value) olarak Person sınıfından oluşturulan nesneleri tutan bir Dictionary koleksiyonunu işaret ettiğini anlayacaktır. GitHub üzerinden incelediğim projelerde, çoğu programcının böylesi bir durumda daha kısa kod satırları elde etmek için “var” anahtar sözcüğünü tercih ettiğini görmekteyim.

Yukarıdaki örneği inceleyecek olursak; ilk satırı gören bir programcı “GetPeople()” metodunun, içerisinde Person sınıfı nesnelerinin bulunduğu bir List koleksiyonu döndürdüğünü direkt anlayacaktır ama “var” anahtar sözcüğünün kullanıldığı kod satırında bunu ilk bakışta anlaması mümkün olmayacaktır. Bu yüzden böylesi bir durumda, kodlarımızın daha okunur olması için “var” anahtar sözcüğünü kullanmak yerine veri tipini açık bir belirtmeyi tercih edebiliriz.

Son olarak yukarıdaki örneği inceleyecek olursak; programcının persons referansında bir Dictionary’i nesnesinin tutulduğunu bildiğini farz edersek, “KeyValuePair” kullanmak yerine kısa olması açısından “var” anahtar sözcüğünü kullanmayı tercih edebiliriz.

Özetle; “var” anahtar sözcüğünün çalışma performansı üzerinde olumlu veya olumsuz herhangi bir etkisi bulunmamaktadır. Bu yüzden okunabilirliği zayıflatmayacağını düşündüğünüz durumlarda, daha kısa kod satırları elde etmek için kullanabilirsiniz.

“var” Niçin Var?

Her ne kadar “var” anahtar sözcüğü yaygın olarak kod satırlarını kısaltmak için kullanılsa da asıl kullanım amacı, veri tipi belli olmayan anonim türdeki verilerin bir değişkende tutulmasını sağlamaktır.

anonymousData değişkenini “var” anahtar sözcüğü ile tanımlamamış olsaydık, sadece fullName ve phoneNumber özelliklerini içeren nesneler oluşturabilmek için yeni bir sınıf oluşturmamız gerekirdi. Ancak “var” anahtar sözcüğü bu gereksinimini ortadan kaldırdı.

Serdar YILMAZ


Bu İçeriği Arkadaşlarınızla Paylaşmak İster misiniz?

Bir Yorum Yapın