Yapısal Programlama Cenk EDEN Siz; bilgisayarcılar arasına yeni yeni katılan yeni bilgisayar sahipleri. Siz; bunun gururunu, coşkusunu taşıyan ve sorumluluklarınızın bilincinde olan yeni gönüllüler. Bilgisayara “merhaba”' dediniz ve belki de kullanım kılavuzundan veya derginiz Commodore'dan ilk programınızı yazdınız. Daha ilk adımda hata yapmamak ve ilk run'ınızda sevimsiz bir hata mesajı görmemek için, programınızı büyük bir dikkat ve özenle, en küçük ayrıntısını bile birkaç kez kontrol ederek yüklediniz. üm bu çabalarınıza rağmen, eğer programınız on satır- dan uzunsa, büyük bir ola- sılıkla ilk denemenizde çalış- mayacaktır. Olacak şey değil, progra- mınız yapabileceği tüm yanlışlıkları yapıyor ve siz bunun nedenini bir tür- lü bulamıyorsunuz. Programınıza bir daha -belki de 101. kez- göz attığınızda onu bir ta- bak spagettiden daha karışık buluyor- sunuz. Açıkçası programı düzeltme şansınız o kadar zayıf ki, fişi çekip ye- niden başlama fikri bir anda çok ca- zip hale geliyor. Bilgisayarın başına oturduğunuz o heyecan dolu, coşku dolu ilk günlere dönerseniz herhalde yukarıdaki tab- lonun size de pek yabancı olmadığını göreceksiniz. Pek çoğumuz yaşadık o umutsuzluk dolu saatleri ve belki de yeni bir kavram kattık dağarcığımıza; errorofobi. Çözümü yok muydu, ce- vapsız mıydı bu sorun? Elbette var; çözüm de sorun kadar önemli üstelik; disiplinli programlama daha doğru bir ifade ile programlarınıza disipline edilmiş bir yaklaşımla eğilmenizdir. Bilgisayarınızın tuşuna bastığınız ilk andan itibaren bu tekniği kullanma- ya ve geliştirmeye çalışmalısınız. Pro- fesyonel software yazarları -yazılımcı- lar- yapısal programlama teknikleri- ni kullanırlar. Yazılımcılar ilk olarak çözmek zo- runda oldukları problemlerin -fonksi- yoönel blokların- çözüm yollarını bu- lurlar ve tüm bu çalışmalar yapıldık- tan sonra, işin nispeten kolay yanı olan aşamaya gelinir. Bu aşamada, or- taya çıkan program planı bilgisayarın işleyeceği şekle sokulur. Yani program bilgisayar dillerinden birine çevrilir. Bir amatörden tüm bu çalışmaları yapmasını beklemek belki biraz faz- ladır. Bir de buna amatörün müteva- zi sayılabilecek amaçlarını eklerseniz, isteklerimin bir amatör için insafsız sayılabilecek kararlar olduğunu düşü- nebilirsiniz. Çünkü amatör, program- lamanın getireceği nimetlerle ilgilen- mez, onun için biçimsel ve yöntemsel kazançlar anlamsız birer kavram ol- maktan ileri gidemezler. Amatörün tek istediği, programının sonucunu mümkün olduğu kadar kısa sürede ek- randa görmektir. Bununla birlikte eğer bu tür bir disiplini programları- nızda biraz olsa bile kullanırsınız, programlarınızın daha kolay yazılır hale geldiğini görecek ve hepsinden önemlisi yanlışlarınızı daha kolay dü- zelttiğinizi farkedeceksiniz. Programınız için çizilecek birkaç akış diyagramı, size programınızın bir sonraki adımda ne yapacağını görme olanağını verir. Böylece programını- zın bölümler arası koordinasyonunu sağlama olanağınız olacaktır. Şimdi sıra programın gerçek anlamda yazı- mına geldi. Madem bir süre sonra Basic kulla- nıyor olacaksınız en azından onunla başlayacaksınız, öyleyse iyi kurulmuş bir Basic programında neler olması gerekiyor bir de buna bakalım. Önce- likle altprogramları gözden geçirelim. Programınızda her biri akış diyagra- mınızdaki bir kutuya karşılık gelen alt- programlardan bir dizi olmalıdır. Bu- nun sonucunda program parçalarınız küçük bloklar haline gelecek ve böy- lece tüm altprogramı ekrana aynı an- da listeleyebileceksiniz. Her altprogram açıkça tanımlanmış bir fonksiyonu yerine getirmeli ve ana programdan bağımsız olarak test edi- lebilmelidir. Bu testi gerçekleştirmek için sonuçlarını bildiğiniz test değer- lerini altprograma girin ve altprogra- mı çalıştırın, eğer çıkan sonuçlar sizin kendi sonuçlarınızla aynı ise, altprog- ram, bu kez farklı değerlerle, çalıştı- ğgında çıkacak sonuçların kesinlikle doğru olacağından şüpheniz olmasın. Basit bir örnek ele alalım. Farzedin programınızda bir dairenin alanının hesaplanması gerekiyor. Bunu hesap- layacak altprogram aşağıdakine ben- zer bir rutin olacaktır. 998 REM R YARIÇAPLI 99 REM DAİRENİN HESABI 1000 A — 77 xRxR 1010 RETURN Bu rutin oldukça basit olmasına rağmen değindiğim prensibi gerçekleş- tirir niteliktedir. Çünkü rutin sadece bir işlevi yerine getiriyor ve kolayca test edilme olanağı var. Aşağıdaki sa- tırı yazıp RETURN ederseniz, sonu- cun 28.274 veya buna yakın bir R—3: GOSUB 1000:PRİNT A sayı olduğunu göreceksiniz. Bu rutin, her ne kadar, görevini yukarıda say- dığım prensiplere göre eksiksiz yapı- yorsa da, mükemmel bir altprogram sayılmaz. Çünkü bu işlemi bir kez yaptıktan sonra kullandığınız modü- lü (satır) unutabilirsiniz. Ayrıca; ger- çi biraz ayrıntı sayılsa da, programı- nızda R değerinin belirli bir sınır için- de olup olmadığını koöntrol eden da- ha derin bir detay olabilirdi. Bu yön- temle eğer R belirlenen sınır içinde de- ğilse uygun bir hata mesajı basılabi- lir, böylece programın ana kısmı bir hata yapıldığından haberdar olabilir- i. Öyleyse daha düzgün, daha kulla- nışlı bir altprogramın nasıl düzenlen- mesi gerekiyor? Öncelikli programın doğrusal akışını korumanız gerekiyor. Mademki altprogramın çağrıldığı sa- tıra geri dönmesi için Return komu- tunu kullanmak zorundasınız, o za- man kontrol de düzgün bir şekilde ilk satırdan son satıra kadar akmalıdır. Bir altprogramdan programın baş- ka bir bölümüne hiçbir atlama olma- malıdır. Ancak bu genellemeye bir başka altprogram girmez; yani alt-