Yeni Programcılar İçin
Bilgisayarını yeni almış, çiçeği burnunda bir programcı için çalışmayan bir programı düzeltmek çok zor bir iş haline gelebilir. Düzeltilen hatanın yararları bir yana, bunun programcıya verdiği başarı zevki apayrı bir duygudur. Basit hataları düzeltmede ustalaştıktan sonra, bir zamanlar yanlış bir şeyler yapmaktan korkan adamın yerini sonuçta ne olacağını görmek için bilerek kendi programına hata yerleştiren bir programcı alır. Bu noktada deneyimsiz programcı artık işini bilen bir olup çıkmıştır. Bilgisayarını programlamaya yeni başlayanların en kolay başardıkları iş, hata yapmaktır. Kullanım kılavuzundaki veya başka kaynaklardan edinilen hazır programlar bilgisayara girilirken bile çok basit yanlışlar meydana gelir. Örneğin dergimizde yayımlanan programların sonundaki BDE kontrol toplamlarını da programlarına dahil edip bize programların bozuk olduğunu bildirmek için yazanların sayısı az değildir. Olduğu şekliyle yayınlanan programlarda ise PRINT komutu içindeki karakterlerin ne olduğunu anlayamayıp bunları yazmadıkları için programlarının çalışmayacağını sanıp paniğe kapılanlar da unutulmamalı. Kullanıcı biraz daha deneyim kazanıp kendisi program yazmaya başladığında daha değişik hata mesajları ile karşılaşacaktır. Bu yazıda C-64/128 kullanıcılarına programlama ve hata düzeltmeyle ilgili bazı pratik öğütler vereceğiz. Eğer yeni bir kullanıcı iseniz ve ilk kez programlama yapacaksanız yazının size yararlı olacağını umuyoruz.
Bu arada, eski programcılar da bir iki hile kapabilirler. Programınızı bilgisayara girerken özellikle sistem kılavuzunuzu sürekli elinizin altında bulundurup sık sık kullanmak iyi bir alışkanlıktır. Arada sırada bilgisayarınızı kullanmadığınız zamanlarda kılavuzun ekler ve bölümlerini inceleyerek kılavuza karşı bir tanışıklık kazanın. Aklınızda fazla bilgi kalması önemli değil sadece önemli kısımlar hakkında genel bir bilgi sahibi olmanız yeterlidir. En çabuk bulunması gereken önemli kısımların başında BASIC komutları ve hata mesajları gelmektedir. Bu bölümler, programlama ve hata düzeltme sıra-
Can ÖZTÜRK başta başvurulacak yerler.
Yeni başlayanların en sık karşılaştıkları problemlerden biri programlamada henüz yeterli olmamalarından dolayı hata mesajlarını tam olarak anlayamamalarıdır. Sistem kılavuzunda hata mesajlarının yer aldığı ekler bölümüne bakarak genellikle problemin neden kaynaklandığını bulmak için nereye bakmanız gerektiği konusunda bir fikir sahibi olabilirsiniz. Belli zamanlarda üzerinde çalıştığınız programın kopyasını alın.
Örneğin programınıza yeni bir rutin koyduktan sonra onu bu yeni haliyle kaydetmek yerinde bir uygulamadır. Yeni rutininizi program içinde çalıştırmanız mümkün olmazsa veya sistem uçarsa önceki kopyaya geri dönerek programlamaya devam edebilirsiniz. Şimdi biraz her gün karşılaşılan programlama ve programa girme hatalarına bakalım. Herhangi bir programcının herhalde en sık karşı karşıya geldiği hata mesajı ünlü SYNTAX ERROR'dür. Bu mesajın sebepleri arasında en başta programı BASIC tarafından yorumlanamayan bir biçime dönüştüren yazım hataları gelir. Genellikle, yanlış yazılmış bir komut (ör: POKE yerine POEK veya 0 harfi yerine 0 sayısını basmak gibi) şeklindedir. Syntax error komutunun bize yaptığı en büyük yardım, hatanın meydana geldiği satırı söylemesidir. Eğer belli bir satırda SYNTAX ERROR'ün nerede olduğunu göremiyorsanız bu satırı baştan girin. Bazen satırı olmadığı halde doğruymuş gibi görürüz ve satırı baştan girmek burada basit bir çözüm olabilir. Asıl mesele çıkaran syntax error, kullanıcı tarafından tanımlanan bir fonksiyondaki (DEF FN) hatadan kaynaklanır. Eğer fonksiyon hatalıysa hata mesajında belirtilen satır, fonksiyonun tanımlandığı satır yerine fonksiyonu çağıran satırı işaret eder. Syntax error'den programın her satırını dikkatli bir şekilde girerek ve kullanılan BASIC komutları ile tanışıklık sahibi olarak sakınılabilir. Bir kez daha, bu komutlarla ilgili tecrübenin okuyarak kısa zamanda kazanılabileceğini hatırlatalım. Başka bir yaygın problem, programın işlemesi sırasında bilgisayarın koyduğu bazı sınırlamalardan dolayı meydana gelir. Bu tür hatalarda, program sentaksı doğrudur ancak program, bilgisayarı yerine getiremeyeceği bir şey yapmaya zorlamaktadır. Syntax error'ler gibi işleme hataları program içinde belli bir satırı sebep olarak gösterirler. Hatanın nedenlerini bulmak pek kolay olmadığından, düzeltmede sorunlar çıkabilir. Örnek olarak ILLEGAL QUANTITY hatası herhangi bir bellek adresini sıfırdan küçük veya 255'ten büyük bir sayı ile POKE etmeye çalıştığınızda alacağınız bir mesajdır. Bu değer, program içinde başka bir satırda hesaplanıyor olabilir ancak hata mesajında verilen satır bu değeri kullanmaya çalışan satırın numarasıdır. Hatayı düzeltmek için bu yanlış OUT OF DATA mesajı da bir başka yaygın hatayı bildirir. Bu mesajla karşılaştığınızda hemen READ komutunun okuyacak data bulamadığını düşünmelisiniz. Aslında OUT OF DATA'nın sebepleri çok farklı olabilir: eksik bir data ifadesi veya satırı; okunacak data miktarını aşan bir FOR/NEXT döngü artışı; unutulan virgüller ya da virgül yerine konan noktalar veya datayı RESTORE yapmadan tekrar READ ile okutmaya çalışmak gibi. Uzun data satırlarını bilgisayara girmek bütün programcılar için sinir bozucu bir işlemdir. Sonsuz gibi gözüken satırlarda yanlış girilmiş dataları bulmak saman içinde topluiğne aramaya benzer. Burada yapılacak şey datayı kolonlar ve satırlar halinde teker teker kontrol etmek ve bu arada virgül yerinde bulunan noktalarla 0 ile karışan O harflerini ve benzer yazım hatalarını bulmak olmaktadır. Bazı durumlarda sayıları ters yazmak (02'yi 20 yazmak gibi) programı çalıştırdığınızda hata mesajı almadan programınızın kilitlenmesine sebep olabilir. Hatalı girilmiş dataların genellikle programın son çeyrek kısmında ve satır sonlarında bulunduklarını kendiniz de keşfedebilirsiniz. Burada size tavsiyemiz programı ağır ve düzenli bir şekilde yazmaktır. Sakın 10K'lık bir programı bir oturuşta yazmayı düşünmeyin, mutlaka bir yerlerde hata yaparsınız. Örneğin bir data satırını yazmayı unuttuğunuzda değişkenlerin hatadan sonraki kısmının tamamı yanlış değerler alabilir. Üstelik bir de satırları saklamadıysanız ve sistem uçarsa bunları baştan tekrar yazmak bir işkence haline gelecektir. Altrutinlerden birini atladığınızda veya program tarafından çağrılmayacak biçimde yerleştirdiğinizde RETURN WITHOUT GOSUB hata mesajını karşınızda bulursunuz. NEXT WITHOUT FOR mesajı da benzer sebeplerden meydana gelir. En muhtemel mesajlardan biri de UNDEFINED STATEMENT ERROR'dür. Bu hata, programda olmayan bir satıra gidilmesini bildiren bir satırda ortaya çıkar. Sonuçta en iyisi programlarınızı belli aralıklarla ve dikkatle girmek olacaktır. Analitik hatalar takip edilmeleri en zor olan hatalar arasında başta yer alırlar. Bunlar BASIC'in fark edemeyeceği, program dizaynı ve mantık hatalarıdır. Yani program doğru bir sentaks ile çevrildiği halde gerektiği biçimde çalışmaz. Örneğin aşağıdaki programda bir bölüm hesaplamak için iki değişken kullanılmaktadır.
— 9
20B - 5
30C — B/A
40 A — A-l: B
50 1IFB < 1 THEN END
60 GOTO 20
Döngünün değerinin her azalışında değişkenlerden birisinin 1'den küçük olup olmadığı kontrol ediliyor. GOTO ifadesi yanlış satır numarasını gösterdiğinden kontrol edilen B değişkeni aynı değeri tekrar alırken bölen durumundaki A değişkeni, satır 30'da bir DIVISION BY ZERO hatası verinceye kadar satır 40'ta azalmaya devam eder. Hata esasında satır 60'tadır ve GOTO ifadesi, satır 30'u göstermelidir. Benzer tipte programlama hataları sonucunda program hata mesajı vermeden yanlış sonuçlar bildirecek şekilde çalışabilir. Bunu önlemek için programı zihinden veya kâğıt üzerinden adım adım izleyerek hesapların ters gittiği satırları bulmak gerekmektedir. Bazen bir programı run etmeye çalışırsınız ve hiçbir şey olmaz. Ekran kaybolur ve öylece değişmeden kalır. Bu programın bir döngüye takıldığının veya tamamen uçtuğunun bir işaretidir. Veya yazı rengi arkaplan rengine dönüşüp mesaj okunmaz hale gelmiş olabilir. Bunu halletmenin en basit yolu RUN/STOP tuşuna bastıktan sonra ekran rengini değiştirmektir. RUN/STOP programı durdurup bilgisayarın çalıştırdığı en son satırın numarasını verecektir. Ekran rengini değiştirerek bu durdurma mesajını okunabilir duruma getirebilirsiniz. Mesajın verdiği satır numarası, hatayı ilk arayacağınız yer olacaktır. Eğer bunları yapmanız mümkün olmuyorsa makineniz kilitlenmiş demektir ve bu durumda makinenizi resetleyebilir (ayrıca satın alacağınız bir reset switch ile) veya kapatıp açabilir ve programınızın en son kaydetmiş olduğunuz versiyonuyla çalışmaya devam edebilirsiniz. Diyelim ki, pek çok ifade içeren bir satırı kontrol etmek istiyorsunuz ve hangi ifadenin sorun çıkardığından emin değilsiniz. Bu tür satırları düzeltirken her satırı tek ifadeli satırlara bölmek gerekebilir. Bunu yapmanın çabuk bir yolu satırda kaç ifade varsa o sayıda programda bulunmayan değişik satır numarasını bu satırın başına yazıp herbiri için return'e basın. Böylelikle aynı satırın içindeki ifadelerin sayısı kadar kopyalarını çıkarmış olursunuz. Sonra bunları kursor ve delete tuşlarıyla tek ifadeli satırlara kolaylıkla dönüştürebilirsiniz. Örnek olarak satırınız şöyle olsun:
250X — X4 1: FORO — 1TO100:
PRINTO: NEXT: GOÖSUB600:
B-24
Bu satırı takip eden bir sonraki satır numarasını 260 kabul edersek arada 9 satırlık bir boşluğumuz var demektir. Şimdi satır 250'nin başına gidip 252 yazıp return'e basın. Yine kursoru yukarı götürüp 254 ve sonra da 256 yazıp return'e basarak aynı satırın farklı numaralı üç adet benzerini elde edin. Eğer LIST 250 - 260 derseniz bunları görürsünüz. Bundan sonra kursor ve boşluk tuşunu kullanarak fazla olan ifadeleri silerek return'e basın. Şimdi programınız aşağıdaki gibi görünecektir:
—- X41
252 FORO — 1 TO 100: PRİNT:
NEXT
254 GOSUB600
256 B — 24
Programınızı bu hale getirirken, hiç yoktan, başka hatalar yaratmamaya dikkat edin. Programınızın başka yerlerinde, yaptığınız bu değişikliği dikkate almayacak satırlar bulunabilir. Eğer bu tür birkaç hata düzeltme denemesine rağmen program çalışmamakta direniyorsa sıra programınızın bir printer dökümünü almaya gelmiş demektir. Printer çıktısını programınızın bir haritası olarak düşünebilirsiniz. Bunu elde etmek için printer'ınıza kâğıt yerleştirdikten sonra;
OPEN 4,4: CMD 4: LIST:
CLOSE 4 (RETURN)
yazmak yeterli olacaktır. Hataları düzeltmede bir printer dökümünü kullanmanın da bir sanatı vardır. Değişik sayı ve renkte fosforlu kalemlerle programın çeşitli kısımlarını işaretlemek iyi bir yoldur. Bu kalemlerle, değişkenlerin ve değerlerini değiştirdikleri yerlerin, fonksiyon tanımlamalarının ve çağrılarının veya program akışını değiştiren her şeyin üzerini çizin. Sarı ile GOTO, GOSUB ve IF-THEN analizlerini belirtebilirsiniz. Sonra GOSUB'ları başladıkları yerden itibaren izleyerek altrutinin sonunda bulunması gereken RETURN ifadesine kadar olan satır numaralarını işaretleyin. Daha sonra kırmızı bir markör ile dallanan altrutinleri birbirine bağlayın (böylece programda neyin neyi çağırdığı daha açık olacaktır). Bütün bunlardan sonra programın nasıl yapılandığı hakkında bir fikriniz olacaktır. Sonradan bu fosforlu kalemlere hiç ihtiyacınız kalmayacak program dökümünü sezgi ve bilgilerinizle bir bakışta yorumlayabileceksiniz. Şimdi biraz daha ileri birkaç teknikten bahsedelim. Programınıza yerleştirdiğiniz bir STOP komutu, çalışan programı, değişkenlerini kaybetmeden belli bir noktada durdurur ve daha sonra programınızı CONT yazarak yeniden çalıştırabilirsiniz. Eğer işler gerçekten karmaşık hale gelirse STOP ile programı durdurup hangi değişkenlerin aktif olduklarını inceleyebilme imkanı aslında büyük bir kolaylıktır. Örnek olarak STOP komutunu IF-THEN yorumlayıcıların başına ve FOR-NEXT döngülerinin sonuna yerleştirmeniz mümkündür. Belli bir satırdan itibaren programı çalıştırdığınızda satır numarası ile STOP komutu arasında kalan kısım çalışır ve program STOP'la durduğunda direk modda bu değişkenleri PRINT komutunu kullanarak inceleyebilirsiniz. Burada nümerik ve yazı karakteri değişkenleri çok rahat izlenebilir. Yine direk moddan CONT yazarak programı bir sonraki STOP'a kadar değişkenleri inceleyebilirsiniz. Bazı durumlarda bütün program tek bir satır yüzünden çalışmaz hale gelebilir. Böyle belalı satırların başına REM komutunu ekleyerek etkisiz kılmak bazen size ipuçları verebilir veya ilgili problemleri açığa çıkarmada yararlı olabilir. Hatta o satırın hiç gerekli olmadığını bile keşfedebilirsiniz. C-128 ve C-64'te Simon's BASIC sahipleri için bilgisayarın program içinde belli bir anda çalıştırmakta olduğu satırı gösteren bir TRACE komutu bulunuyor. Bu komutla programın çalışırken nerelere atladığını ve problemlerin nerelerde oluştuğunu görebilmeniz mümkün oluyor. Şüphesiz programcıların hata düzeltmekte kullandıkları daha pek çok karmaşık teknikler var. Burada bahsedilenler programlamaya yeni adım atmış olanların karşılaşabilecekleri birçok (hepsi değil) hatanın üstesinden gelmede yardımcı olacaktır.