Data Vinci 2: Magic Number

Yazılım geliştirme dünyasına ait bir çok terim var. Bazıları dillere “pelesenk” olmuş, bazıları pek tutmamış, kıyıda köşede kalmış. “Programming Geek” denen şahıslardan başkası bilmez. Beyaz yakalı camiasında zaten bileni döverler, open source tayfası aşinadır biraz daha. Merak eder en azından.

Bence kıyıda köşede kalan  terimlerden birisi de “Magic Number”. Aslında “magic number” bir anti-pattern ismi, fakat sıkça kullanılır(iyi anlamda söylemiyorum tabii).  Kıyıda köşede kalan şey “Magic Number” terimi, yoksa bir çok projede “radyoaktif” bir şekilde dolanıyor olduğundan eminim. Hiç umuldadık yerlere eklenerek -en zor bulanan hatalar, hata olmasına ihtimal verilmeyen yerlerde çıkıyor sanırım- oluşan dramın lezzeti katlanabilir. İsmine bakıldığında “magic” kelimesinde ötürü iyi bir şeymiş gibi görünse de, aslında doğru bir kodlama biçimi değildir.

Kodun içerisinde direkt olarak sayılar kullanılmasıdır.

Yukardaki methodun bir şeyi hesapladığı aşikâr. Amount parametresini bir katsayı ile çarparak geriye sonucu döndüren bir method görüyoruz. amount parametresinin çarpıldığı  “0.45664342”  değerinin ne olduğu ile ilgili ise hiçbir fikir yürütmek mümkün değil. Ama deneyeyim. Şair burda egzistansiyalizm’e hizmet olsun diye, millet bunun varlığını sorgulasın, ikircikli hayatlara yelken açsın diye kullanmış olabilir. Bu değer bir standart sapma olabilir, sabit bir katsayı olabilir, yazılımcının vergi dilim ağırlığı olabilir, iddaa oranı olabilir, kimsenin bilmediği! bir matematik sabiti olabilir. Olabilir de olabilir. Programı yazan kişi dahi sonradan dönüp baktığında bu değer ile ilgili fikir üretemeyebilir. Yazılan kod, kaynak kod yönetimi sistemine dahil değilse, “bunu ben yapmadım” diyebilir. Belki de artık kodun yaşadığı şirkette çalışmıyor olabilir. Olasılık bol.

Tüm bu olasılıklara istinaden söyleyebilirim ki, kod içerisinde bu tarz sayılar kullanmak hem okunabilirliği düşürür, hem de birden çok yerde kullanıldığı zaman bakım yapmayı da zorlaştırır. Yazılım dünyasında bu tarz “hard-coded”  sayısal değerler kullanılması kavramına “magic number” denilmektedir. Tabii kullanım sıklığına göre habis bir yapıya kavuşmuş, kodun içinden temizlenemeyecek kadar yaygınlaşmış olabilir bu tarz bir kullanım. Bu gibi anti-pattern kullanılan ve  yeni yazılan bir uygulama için hızlı bir çözüm oluşabilir, fakat yılların “spagetti”si ise hemen aksiyon almak kolay olmayabilir.

Kurumsal bakış açısı ile değerlendirirsek durumu, muhakkak ki özenle hazırlanmış bir kod gözden geçirme tamam listesi gerekmektedir.(Code Review Checklist). Yok ben üşenirim liste miste bilmem ben diyenler için ise alternatif çözüm: Kullanılan IDE’ler günden güne gelişiyor, çok güzel eklentiler var. Visual Studio için konuşursak, zaten kendine has bir uyarı sistemi var. Onları kullanın güzel kardeşlerim.

Solda paylaşmış olduğum ekran görüntüsü Visual Studio + Resharper kombinasyonuna sahip bir ortamdan alındı. Kod alanının sol tarafında yer alan sütunda yazılan kod analiz edilerek bir takım öneriler sunmakta. Gereksiz kullanımları tespit eden, kısa yazımları öneren, hatta seçimlik kurallar tanımlamaya bile olanak veren ikaz sistemine sahip. Yazılımcı  bu tarz iyileştirme ve gözden geçirme işlerini alışkanlık haline getirerek “clean code” yolunda bir adım atar.

Aksi takdirde “anti-pattern”lerin cirit attığı, yanlışlarla dolu olmasa da okuması zor. Geliştirmeye kapalı, spagettiye açık. “Benim makinede çalışıyor” sendromları yaşatan, utandıran uygulamalar yazmak işten bile değil. Yazılımcılık mesleği içten-dışa bir akışa sahiptir. Yani insanın içinden gelecek azizim. Hata yapılır, kötü kod yazılır ama bunda diretmemek gerekiyor. “Magic Number”sız günler dilerim:)

keep_calm

 

6 Replies to “Data Vinci 2: Magic Number”

  1. Çerez tadında, amaca odaklı ve nokta atışı tespitler içeren bir içerik olmuş. En battalından teşekkürler.

    1. Ben de yorumunuz için teşekkür ederim. Data vinci serisinde çerez tadındaki yazılarım devam edecek. 20 kadar yazı yazmayı düşünüyorum. Olumlu veya olumsuz eleştiri ve geri dönüşlerinizi beklerim.

  2. Çok şeker çok tatlı olmuş böyle bir kullanımın doğru olmadığını biliyordum ancak kavramı bilmiyordum çok teşekkürler.

Leave a Reply

Your email address will not be published. Required fields are marked *