Amiga Dünyası sayı 13, sayfa 28

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 28

Gelelim HiSoft BASIC'in kullanıcıya kazandırdığı ekstra komutlara. CONST komutu yardımıyla, sabitleri daha rahat tanımlayabilirsiniz. Bu sayede de hafızadan tasarruf edebilirsiniz. Zira LET komutuyla tanımlanan değişkenler hafızadan 4 byte yerken CONST komutuyla tanımlanan sabitler hiç hafıza yemez. Aşağıda bu komutu kullanan bir örnek bulabilirsiniz:

CONST InterLace=4 CONST BitPlanes=3 SCREEN 1,640,512,BitPlanes,InterLace Hem bu yöntem kullanılarak bazı sayı- ların ne anlam taşıdığını da kolaylıkla gö- rebilirsiniz.

DECR ve INCR komutları yardımıyla bir değişkeni birer birer artırıp azaltabilirsiniz.

DECR x ===> x=x-1 INCR x ===> x=x+1 REDIM komutuyla, bir matris değişkenini tekrar tanımlayarak boyutunu rahatlıkla değiştirebilirsiniz. AmigaBASIC'te bunu yapmak için ilk önce ERASE komutunu kullanarak matrisi hafızadan silmeniz, ardından da DIM yardımıyla tekrar tanımlamanız gerekliydi. REDIM komutu yardımıyla boyutu değiştirilen bir matrisin içeriği tümüyle silinir. Fakat bunu da engelleyebilmek mümkün. REDIM APPEND kullanıldığında, matrisimizin hem boyutu değişmiş, hem de eski bilgiler silinmemiş olacak. Bu yöntem yardımıyla, örneğin bir kartoteks programında hafızanın otomatik olarak kart sırasına göre artması hızlı bir şekilde sağlanır.

AmigaBASIC'te bir dosyanın diskette olup olmadığını kontrol etmek için, normalde dosyayı açmaya çalışmamız gerekli. Eğer hata mesajı alırsak, bunu ON ERROR... komutuyla algılayıp gerekli işlemleri yapmamız lazım. Fakat bu işlemler uzun sürer ve tam da güvenilir olmaz. Hi-Soft BASIC'teki FEXISTS komutuyla tüm bu işlemler bir IF..THEN döngüsü içinde kolaylıkla kontrol edilebilir. Aşağıda bu komutu kullanan ufak bir rutini inceleyerek kullanımını rahatlıkla öğrenebilirsiniz:

IF NOT FEXISTSS("Dosya") THEN

PRINT "Dosya bulunamadı." END IF Parantezler arasındaki tırnaklar içine dosyanın directory'sini ve ardından da dosyanın ismini yazmak mümkün. Burada uyacağınız kural gayet basit; isim, ilk önce device ismi (DF0:, vs...), directory ismi, </> işareti ve file ismi gelecek şekilde yazılmalı.

Diskette directory yaratmak için MKDIR komutunu kullanabiliriz: MKDIR ("yenidirectory"). RMDIR ise, açılmış olan içi boş bir directory'i siler; kullanımı, MKDIR ile aynıdır.

Dosyalarla ilgili diğer bir komut RESET'tir. Bu komut hiçbir parametreye gerek duymadan kullanılır ve açık olan tüm dosyaları kapar.

BLOAD ve BSAVE komutları yardımıyla hafızanın istediğiniz belli bir bölümünü dosya olarak diskete kaydedebilirsiniz. PCOPY yardımıyla ekranın kopyasını grafik olarak yazıcıdan alabilirsiniz.

Eklenen komutlar arasında döngüleri kolaylıkla yapmamızı sağlayan bazı komut grupları mevcuttur. Fakat bunlara geçmeden önce WINDOW komutuna yapılan eklemeleri tanıtmak istiyorum. Bunların hepsi de pencere tipini (window type) belirlemeye yarar.

32: Pencere çerçevesiyle içeriği ayrı ayrı değerlendirilir. Bu şekilde sol üst köşe, artık pencerenin sol üst köşesi değil de, penceredeki kullanıma izin verilen alanın sol üst köşesi olur.

64: Pencere, daima mevcut pencerelerin en arkasında kalır.

128: Pencerenin kenarları olmaz. 256: Verilen koordinatlar, pencerenin çerçevesi dahil ekranda kaplayacağı alanı belirler.

Son olarak da değişik şekillerde döngü kurmaya yarayan komut paketlerini vereceğime söz vermiştim. Bu komutlardan ilki DO ... LOOP. Döngüye başlamak için verilebilecek komutlar şunlar:

DO DO WHILE n=1 DO UNTIL n=1 Döngünün sonunda da aşağıdaki komutlardan birini kullanabilirsiniz:

LOOP LOOP WHILE LOOP UNTIL

Sadece DO kullanılan yerde ya LOOP UNTIL ya da LOOP WHILE komutu, son komut olarak kullanılmalı. Aynı şekilde ilk komut olarak DO WHILE ya da DO UNTIL kullanılan döngüde de son komut olarak sadece LOOP kullanılabilir. Ayrıca döngünün ortasından da çıkabilirsiniz. Bunun için ya EXIT LOOP ya da EXIT DO komutlarını kullanmalısınız.

Size bu komutu daha iyi anlayabilmeniz için DO komutunun kullanıldığı kısa bir örnek vermek istiyorum:

i=0 f=l DO INCR i f=f*i UNTIL i=5 Bu döngü, <i> değişkeni 5 değerine ula- şıncaya kadar tekrarlanır.

Son olarak da HiSoft BASIC'de uygulayabileceğiniz kısa bir rekursif program vermek istiyorum. Bu sayede de rekursif programlamayı daha iyi kavrayabilirsiniz.

DEF FN fa(n) IF n<=l THEN FNfa=l ELSE FNfa=n*FNfa(n-l) END IF END SUB Bu şartlı döngü, <n> değişkeninin değe- ri 1 'e eşit ya da 1 'den küçük olana kadar kendini çağıracaktır. Tabii bu rutin bazen kendi kendini çok kez çağırarak daha de- rin döngülerin otomatik olarak oluşmasını sağlayacaktır. Her döngü aşamasının de- ğerlerini kaybetmemek için, bu değerler belleğe yazılır. Fakat belleğin de yeterli boyutta olmasına dikkat edin. Bu bellek dolduğu anda eski bilgiler silinebilir.

Rekursif rutinlerin sadece bir dezavantajı vardır. Her seferinde değerler belleğe aktarılıp saklanacağından rutininiz biraz yavaşlayabilir. Bu yüzden programınızda sadece gerektiğinde rekursif programlamayı kullanmaya çalışın. Unutmayın, rekursif rutinleri biraz fazla çaba göstererek iç içe FOR...NEXT döngüleriyle yapmak mümkün.

HiSoft BASIC'in kullanıcıya compile sırasında sağladığı birçok yardımcı fonksiyon mevcut. Bunlar yardımıyla isterseniz single-file compiling, isterseniz de library compiling şeklinde programınızı makine diline çevirebilirsiniz. Bunlardan ilki AC-BASIC gibi uzun bir dosya yaratır; fakat sonuçta, elinizde tek dosya olur. Fakat ikincisini seçtiğinizde, sonuç program dosyası kısa olacak; buna karşın sizden libs directory'sinde kendi library'sini isteyecektir. Diğer compile fonksiyonları ise, global hata mesajları ve kontrollerini sınırlandırmaya yarar. Global hata mesajları ve kontrolleri arasında Break Check (<CTRL>+<C> durdurma tuşlarının kullanımına izin verir), Error Checks (hata anında programı ya durdurur, ya da devam ettirir) ve Variable checks (değişkenlerin doğruluğu kontrol edilir) gibi fonksiyonları açıp kapatabilirsiniz.

Gelecek ay GFA Basic 3.0'ı inceleyeceğiz. Hoşça kalın.

Klavyeyle gezinmek için ← ve → tuşları.