Öncelikle belirtmeliyim ki ben kendi halinde bir çevre mühendisiyim ve üniversitede yalandan gördüğüm Matlab dışında herhangi bir yazılım geçmişim yok fakat merakım var. Madem merakın var neden öğrenmiyorsun diye düşünebilirsiniz, ona da cevap olarak çabuk sıkılıyorum diyebilirim. Uzun uzun bir şeyleri okuyup öğrenenemediğimden direkt olaya dalıp bir amaca hizmet eden ufak programları çeşitlendirerek öğrenmeyi yeğliyorum. Shell script olsun, Python olsun, bu site ve diğer tasarladığım sitelerdeki gibi HTML, CSS, JS olsun hepsi başkalarının kodlarını inceleyerek öğrendiğim şeyler oldu.
Bu BMI hesaplayıcısını yapmam 4 saatimi aldı; Stackoverflow, bloglar, kılavuzlar derken bir sürü açıklamanın ve kodun arasından birleştirip nihayet başardım. Ne kadar doğru bir yaklaşım olmuştur, daha basit yöntem var mıdır bilemem ama çalışıyor en azından. Artık bunu ihtiyaç olduğunda basit formülleri hesaplamak için kullanırım.
Artık başlayalım. Öncelikle bir form oluşturup kilo ve boy girecek inputlar ekliyoruz. Daha sonra da bir hesapla butonu ve sonuçların gösterileceği bir textarea ekliyoruz. Yapabilir miyim diye merakımdan bir de sonuç grafiği ekledim, o da sonucun aralığına göre belirli bir renkte çarpı işareti olarak görünüyor.
CSS olmadan hiçbir şeye benzemediği için bir de stil hazırlamamız gerekiyor. Form içeriğini düzenlemek için grid kullandım, grafik alanı için de flex kullandım. Renkleri de Happy Hues'dan aldım.
Gelelim javascript bölümüne. Bu kısım beni saatlerce uğraştırdı. Sayıları karşılaştırma konusunda sorun yaşadım; ben if (18.5 <= result <= 24.9) şeklinde karşılaştırmaya çalışırken if (18.5 <= result && result <= 24.9) şeklinde olması gerekiyormuş. Tabi buna gelene kadar acaba bunlardan bazıları float bazıları string olabilir mi diye düşünüp bir süre hepsini dönüştürmeye çalıştım falan derken oldukça zamanım gitti.
Bu sorunu çözdükten sonra keyfi olarak koyduğum grafik sorun çıkarmaya başladı; hesaplayıcıyı farklı değerlerle her çalıştırdığımda eski çarpı işareti silinmeden yenisini koyuyordu, en nihayetinde her yer işaretlenmiş görünüyordu. Bunun için de grafikteki her alanı önce temizleyip ondan sonra ilgili alana işaretleme yapacak şekilde ayarlayarak çözdüm.