Amiga Dünyası sayı 13, sayfa 26

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 26

FRE komutu ile kullanılabilen -1, 0 ve 1 parametreleri, nedense hep aynı değerleri vermekte. Bunun sebebi, herhalde AC-BASIC'in programlanmasındaki bir hatadan kaynaklanmakta. Bu yüzden bu komutu kullanmanın pek anlamı yok. Aynı şekilde CLEAR komutu da çalışmakta. İstediğiniz değeri girin, AC-BASIC bunu CLEAR gibi algılayacaktır. Bu komutun zaten pek faydası yok; çünkü compile edilen programlar sistem rutinlerini kullandıklarından gerektiği kadar hafızayı otomatik olarak ayırırlar.

AC-BASIC'in bir diğer dezavantajı da matris değişkenlerinde ortaya çıkıyor. Bildiğiniz gibi, AmigaBASIC maksimum 255 matris değişkenine izin veriyor. AC-BASIC bu konuda çok daha cimri; izin verdiği matris değişkeni sayısı 7!

Alt-rutinlerde DIM SHARED komutu kullanılamaz; çünkü compiler hazırlanırken, piyasadaki AmigaBASIC de bu komutu alt-rutinlerde kullanamıyordu. Fakat compiler ile birlikte verilen SORTSUBS programı sayesinde bu tür hatalar engellenebilir.

AmigaBASIC matris değişkenlerinin hepsi dinamiktir. Bu, matrisin gerektiğinde ekstra komut kullanımı gerekmeden istenilen boyuta getirebileceği anlamına gelmekte. Fakat compiler bunun yanı sıra bir de statik matrislere izin vermekte. Bunları tanımlamak için matrisi DIM komutu ile yaratırken satırın sonuna STATIC kelimesini eklemek yeter. Bu durumda derleyici compile işlemi sırasında tüm statik matrisleri ve bunlara ait tüm adresgöstergeçleri (addresspointer) yaratarak bunları programa hafıza adresleri olarak girer. Bu sayede compile edilen program, sonuçta bir hayli hızlı çalışacaktır. Fakat bu hızın da bir (hatta daha çok) bedeli vardır:

1. ERASE komutu statik matrislerde kesinlikle kullanılamaz.

2. Statik bir matris değişkeninin boyutları, program akışı sırasında değiştirilemez, sabit kalmalıdır.

3. Matris değişkenlerinde grafik saklanacaksa (grafik için olan GET ve PUT komutlarıyla), bunların boyutunu iyi planlayarak hesabınızı yapmanız gerekmekte. Grafikler çok renkli ise, 3 boyutlu bir matris işinizi görecektir.

4. OPTION BASE komutunu, ilk matris tanımlamasından (gerek statik, gerek dinamik) ve ilk matris kullanımından önce kullanmalısınız.

DEF (DEFDBL, DEFINT, DEFLNG, DEFSNG, DEFSTR ve DEF FN) komutlarını kullanırken de bazı garipliklere rastladım. Bunun sebebi, komutu yanlış yerde kullanmam oldu. Bu komutlar DIM SHARED komutundan önce kullanılmalı. Ayrıca DEFINT'te de nedenini çözemediğim bir hata var. Bu yüzden bu komutu ya kullanmamanızı ya da çok dikkatli olmanızı tavsiye ederim.

Bu kadar hatanın ve dezavantajın üzerine AC-BASIC compiler'ın avantaj ve fazlalıklarına geçebiliriz. Bunlar arasında en yararlı bir tanesi var ki, bunun sayesinde kilometrelerce süren IF ... THEN ... ELSE ... IF ... dizimlerinden kurtulabiliriz. Sadece compiler'da bulunan bu güzel komut paketi, SELECT ... CASE ... END SELECT komut dizimidir. Bunlar sayesinde rahatlıkla iç içe döngüler gerçekleştirebilirsiniz. Aşağıda bu iki yeni komutu kullanan ufak bir program bulunmakta. Bu sayede, komutların kullanımını rahatlıkla öğrenebilirsiniz:

INPUT a,b PRINT "a değişkenini" SELECT CASE a CASE-1,>0 PRINT "ya -1 ya da pozitif bir değerdir." CASE 7 TO 11 PRINT "6'dan büyük ve 12'den küçük bir değerdir."

CASE <b PRINT "b değişkeninin değerinden kü- çük bir değerdir."

CASE ELSE PRINT "şartlarda belirtilenlerden farklı bir değerdir."

END SELECT

CASE komutunda kullanılabilecek şart operatörleri; =, <>, >, <, <=, >= ve == olarak sıralanabilir. CASE ELSE'deki işlem, ancak belirtilen bütün şartlar yerine gelmezse gerçekleştirilir. Bu yeni komutları AmigaBASIC anlayamayacağından programınızı test etmek zorlaşacaktır. Zira CASE komut dizimine eş düşen IF komut dizimi, bir hayli karışıktır.

AC-BASIC'in başka bir iyi yanı ise, alt-rutinlerin rekursif olabilmesidir. Bu, alt-rutinin kendi kendini direkt olarak ya da başka alt-rutinler yardımıyla dolaylı olarak istediği kadar çağırabilmesi anlamına gelmekte. Bu sayede, yapay zeka programları gayet rahat bir şekilde yapılabilir. Fakat AmigaBASIC'te böyle bir şey yapmak bir hayli zordur ve genelde karşınıza bir sürü anlamsız hatalar çıkabilir.

AC-BASIC'in tanıtımı için bu kadar bilgi yeter herhalde. Bu arada bu compiler hakkında daha detaylı bilgi edinmek isteyenlere, gelecek sayılarda açıklanacağını müjdeleyebilirim.

* HI-SOFT BASIC: Kaliteli ve hızlı bir editörle, yine kaliteli ve hızlı bir compiler'ı birleştirirseniz ne olur? Gayet basit, elinizde Hi-Soft Basic olur! Editörü üzerinde olan ve compile işleminin menüler üzerinden yapıldığı bir derleyici, sanırım herkesin hoşuna gider. Kullanıcıya bir sürü yeni komut sağlayan bu compiler hakkında, mümkün olduğunca detaylı bilgi vereceğiz. Gerekli yerlerde AmigaBASIC ile karşılaştırma yaparak anlatacağımdan, bu güzel compiler'ı anlamakta zorlanmayacağınızı umuyorum.

İlk ele alacağımız komut, sistem library'lerindeki alt-rutinlerin kullanımına izin veren LIBRARY komutudur. Bu komut, Hi-Soft'ta iki şekilde kullanılabilir:

LIBRARY "libs/dos.library" DECLARE FUNCTION CreateDir& LIBRARY

... (programın devamı) END İkinci varyasyon: GOSUB IncludeLibs ... (programın devamı) IncludeLibs: LIBRARY "libs/dos.library" DECLARE FUNCTION CreateDir& LIBRARY RETURN

Bu iki yöntem de, normal çalıştırmada hatasız çalışırlar. Fakat compile işleminden sonra, ikinci varyasyonumuz bazen hatalar çıkarabilir. Bu hatalar, genelde görüntüde oluşabilecek bazı bozukluklar şeklindedir. Fakat, Exec ve Dos library'leri kullanıldığında alet kilitlenebilir.

AmigaBASIC'te SUB ile tanımlanan alt-rutinler, programın istenen yerinde olabilir. Fakat compiler'ımız bu alt-rutinleri illa programın sonunda istemekte.

Compiler'ın program yazımında koyduğu bazı kurallar var. Bu kurallar, programlama stili ile alakalıdır ve düzgün stilde yapılmayan programlar devamlı hata verir. Aşağıda iki örnek görebilirsiniz. Bunlardan ilki, normalde AmigaBASIC'te çalışabilir, fakat compiler'da çalıştırılmaya kalktığınızda, güzel bir hata mesajı alabilirsiniz. Aynı programın değişik bir stilde yazılmışı (ikinci program) ise hem AmigaBASIC'te, hem de compiler'da hatasız olarak çalışabilir.

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