1 Mart 1987 Tarihli Commodore Gazetesi Sayfa 44

1 Mart 1987 tarihli Commodore Gazetesi Sayfa 44
Metin içeriği (otomatik olarak oluşturulmuştur)

programlar arası yolculuk serbesttir. Ayrıca bir altprogramı tamamladığı- nızda, altprogramda “gevşek son”' ol- maması gerekir. Gevşek son deyimi tamamlanmamış For-Next döngüleri için kullanılır. Bu basit kurallara uyul- duğu takdirde, bir hata durumunda altprogram ana progmmdan kolayca sökülebilir. Basic çoğunlukla bilgisayarcıların ilk göz ağrısıdır. Ancak bu özel ko- numuna rağmen, disiplinli bir prog- ramlama tekniğinin geliştirilmesi için kullanılabilecek en iyi dil olduğunu söylercek zordur. Çünkü pek çok ş.- yi geçiştirmenize izin verir; For-ne t döngüleri buna iyi bir örnektir. u döngüler genellikle programcı için bir sorun kaynağı olurlar. Örneğin altta- ki rutin insana oldukça makul gözü- küyor. 100 FOR I- 1 TO 100 110 GET TBS 120 IF TB$ *” THEN 350 130 NEXT İ Bu basit bir **reaksiyon testi”” ruti- nidir. Oyuncuya herhangi bir tuşa basması için belirli bir süre tanır. Eğer oyuncu bir tuşa basarsa program han- gi tuşa basıldığını bulmak için başka bir satıra atlar (350), eğer basılmazsa program altprogramda devam eder -daha doğrusu döner de döner-. Hem altprogram, hem de açıklama- sı makul gibi gözükse de, bir tuşa bas- makla For-Next döngüsünden çıkmış oluyorsunuz, yani ikinci kuralımızı -gevşek son- ihlal ediyorsunuz. Bu alt- programın işlevini bir Repeat-Until komutu ile çok daha iyi bir şekilde gerçekleştirebilirsiniz. Eğer bu komut Basic komutlarımız arasında yoksa ve maalesef yok, yukarıdaki fonksiyonu aşağıdaki rutin ile yapmak zorunda kalacaksınız. 99 REM TUŞA BASILDI MI? 100 FOR I- TO 100 110 GET TB$ 120 IF TB£ 100:TB- 1 130 NEXT I 140 IF TB- 1 THEN GOSUB 1000:REM TUŞA BASIM ALTPROGRAMI 150 RETURN &» 65 THEN |- Satır 120'de I limit değerine (100) ayarlanıyor. I 100'e eriştiğinde bilgi- sayar TB'nin değerine bakarak dön- güden çıkıyor ve o anda, bir tuşa ba- sılıp basılmadığını görmek için TB'yi test ediyor. Eğer TB | ise bilgisayar tuşabasım altprogramına atlıyor. Ta- bii bu rutinin her kullanımından ön- ce TB değerinin 0'lanması gerekiyor. Bu örneğimizde tuşa basıldığında dön- günün açık kalmaması için satır 120”- de |'nın limit değerine ayarlandığını görüyoruz. Bu durumda rutinimiz bu kez ikinci kuralı ihlal etmekten kur- tuluyor. Yapısal programlama tekniği de- mek sadece altprogram yazmak değil- dir. Bu nedenle biraz da esas progra- mımıza göz atalım. Esas program, yazdığınız tüm programın başında başlamalı, sonuna gitmeli ve orada bitmelidir. Kontrol ilk satırdan itibaren akma- ya başlamalı ve sanki gidiyormuşça- sına altprogramları çağırarak, END komutunda sona ermelidir. Son ola- rak GO TO komutundan bir beladan sakınıyormuşçasına kaçınmanızı tav- siye ediyorum Üst paragtafta söz edilen ve öğüt- lenen düzenlemenin ancak katı ve tek- düze bir program için geçerli olacağı- nı düşünebilirsiniz. Öyle ya eğer prog- ramın akış yönün değiştiremiyorsak, proğrama hasıl farklı işler yaptıraca- ğız? Sorun ne kadar ciddi ise cevabı da o kadar basittir: Ana rutininiz alt- programları duruma göre çağıracak- tır. Yani farklı sonuç farklı altprog- ramın çağırılması demektir. Yukarı- da verdiğim tuşabasım örneğinde bu prensibin işleyişini kolaylıkla görebi- lirsiniz. Altprogramların güzelliği istenildiği kadar uzun yazılabilmelerinden kay- naklanır. Altprogramlar, her zaman için, kontrolden geçtikten sonra, kontrolü çağırılmış oldukları nokta- ya -satıra- geri gönderirler. Böylece programın doğrusal akışı korunmuş olur. En doğrusu tüm alıprogramların asıl programın arkasına, bir End ko- mutu ile ayrılarak, yerleştirilmesidir. Bununla beraber, eminim siz de far- kındasınız, Basic derleyiciler satırları yukarıdan aşağıya doğru tararlar. Bu nedenle eğer programınızda hız önem- li bir faktörse, en çok çağırılan alt- programınız programınızın başlangı- cında olmalıdır. Daha doğru bir yak- laşımla programınızın ilk satırında en çok çağırılan altprogramınıza atlaya- cak ve ana programın işleyişini baş- latacak olan bir GO TO komutu ol- malıdır. Bu düzenleme pek sevimli ol- masa da oldukça yararlı ve etkilidir. İyi programlama tekniği hakkında söylenebilecek daha pek çok şey var, bu makale bu tekniğin önemli odak- larından sadece biri olan ve program- cıya programın akışını takip edebilme olanağını veren, disipline edilmiş yak- laşım tekniği üzerine kurulmuştur. Çünkü programcının, programı çalış- tırdığında, programın kullanacağı yo- lu seçmiş olması ileriki adımlarda ha- yati önem taşır. Bu makalede yeterince vurgulanma- yan tek bir nokta kaldı o da: Prog- ramlama tekniğinin öğrenilme ve ge- liştirilmesinin göründüğü kadar zor olmadığı, ancak bir makale okumak- la da başarılamayacağıdır. Eğer koy- duğum kurallara uymaz; canınızın is- tediği yerden sıçrar, gevşek sonları dikkate almaz, GO TO'larla istediği- niz gibi oynarsanız eninde sonunda çuvallarsınız. Programlarınız zamanla gelişecek ve daha karmaşık bir hal ola- caktır; o zaman sözünü ettiğim bu problemler de gittikçe çözümü daha zor hale gelecektir. Bunun yanında programınızı büyütmek için yeni sa- tırlar girmek istediğinizde, klavye ba- şında güç saatler geçirebileceğinizi de unutmayın çünkü -eğer yarım saattir okuduğunuz tekniği kullanmazsanız- en fazla bir hafta sonra programınız- da kullandığınız mantık zincirini unu- tabilirsiniz. Bir süre sonra Basic size dar gelme- ye başlayacak ve büyük bir ihtimalle makine diline yöneleceksiniz. Orada karşılaşacağınız problemlerin Basic'- tekilerden tek farkı: çözümlerinin da- ha zor ve uzun oluşudur. Bu nedenle makine dilini de kullanırken Basic'teki temel prensiplere başvurmanız gereke- cek ve tabil iyi bir program için iyi bir program tekniğine (hangisine acaba?). Sonuç olarak; programlama düze- yiniz ne olursa olsun yapısal program- lama tekniğini öğrenmeniz, geliştirme- niz ve basit, karmaşık demeden her programınızda kullanmanız gereki- yor. Bu yaklaşım, eğer iyi bir prog- ramcı olmak istiyorsanız, hem sizin hem de programlarınızın vazgeçilmez ögesi olmalıdır. Unutmayın; yanlış he- sap Bağdat'tan döner örneği; temel- siz akış diyagramsız, plansız bir prog- ram da ALU'dan (Aritmetik-Mantık Ünitesi) döner. ©

Bu sayıdan diğer sayfalar: