Bu sayfadaki yazılar
Sayfanın metni
Sayfa 23
Komutun formatı, [GLOBAL (değişken listesi)] şeklindedir. Değişken listesindeki değişkenler genellenir ve hem ana programda hem de PROCEDURE'ın içinde kullanılabilirler.
A=1000:B=42 GLOBAL A,B TEST PROCEDURE TEST A=A+B:B=B+10 PRINTA,B END PROC Bu programda, A ve B değişkeni genel- leştirilerek PROCEDURE içinde kullanıl- mıştır. Böylece sonuç ana programdaki A ile B nin değerlerine bağlıdır. [GLOBAL] komutu kullanılmasaydı, sonuç 0 olacaktı.
[ON...PROC] [ON...PROC] komutunun kullanımı, [ON...GOSUB] ile aynıdır. [ON (değişken) PROC (proc1,proc2,proc3...)] olarak kullanılır. Değişkenin değerine karşılık gelen PROCEDURE'ü çalıştırır.
[POP PROC] [POP PROC] komutunun işlevi, [END PROC]'a gelmeden PROCEDURE'den çıkışı sağlar. Normalde PROCEDURE çağrıldığında, bilgisayar [END PROC]'u görmelidir, zira görmeden asıl programa dönmez. Eğer [END PROC] konulmamışsa, Amos Basic sizi PROCEDURE'ü kapatmadığınızı sanarak ikaz eder. Kısacası [POP PROC], [END PROC]'u devreden çıkarır ve PROCEDURE'dan daha erken çıkış olayını sağlar.
GENELLEME END PROCEDURE GENELLEME FOR I=1 TO 20 IFI=10 THEN POP PROC NEXT I PRINT "BU TEXT HİÇ ÇIKMAYA- CAK"
END PROC Programda, [PRINT] komutu hiç devreye giremeyecektir. Çünkü 10'a kadar saymadan sonra [POP PROC] ile PROCEDURE'dan çıkılacaktır.
[EVERY...PROC] Bu komut, çok güçlü bir interrupt sistemi sayesinde sabit müddetle istenilen procedure'yi çalıştırır. Yazılımı [EVERY (sabit) PROC (isim)] şeklindedir. Buradaki sabit, bir üstteki komut ile aynı işlevi görmektedir. Önceki komut ile aynı anda EVERY ON komutu da kullanılmalıdır; yoksa rutin sadece bir kere kullanılır. Bu nedenle ana programa END PROC ile dönülmeden önce EVERY ON komutu kullanılmalıdır. Örneğin;
EVERY 50 PROC ALIŞTIRMA DO PRINT "ANA PROGRAM" LOOP PROCEDURE ALIŞTIRMA SHARED X INC X:PRINT "ATLAMA SIRASI";X EVERY ON END PROC
programında, ana menü döngüsü içerisinde belirli süreler içerisinde procedure'e atlar ve bu atlamaları sayar.
[BREAK ON/OFF] Normal koşullarda, programın herhangi bir yerinde [Ctrl+C] tuşları ile programdan çıkıp editöre dönülebilir. Fakat [BREAK OFF] komutu ile bu işlem iptal edilir ve çıkış için programın sonunu beklemek gerekir. Eğer döngü sonsuza kadarsa, o zaman bilgisayarı kapatmanız gerekecektir. [BREAK ON] ile, program kırılabilir hale getirilir. Bu komut programınızı başkalarının incelemesine izin vermemek için konulmuştur. Kısacası bir koruma şeklidir.
[MOUSE KEY] Yukarıda bir örnekte kullandığımız bu değişken, Amos Basic'in özel değişkenlerindendir ve mouse düğmesinin durumunu verir. Değer 1 ise sol, değer 2 ise sağ mouse düğmesine basılmış demektir. Amiga özel mouse'lar kullanabilmektedir. Bunlardan biri de 3 düğmelidir. Amos Basic, bu 3. düğmeyi de tanır. Eğer MOUSE KEY değişkeninin değeri 3 ise, 3. düğmeye basılmış demektir.
FORI=lTO 10000 IF MOUSE KEY=1 THEN PRINT "SOL BUTTONA BASTINIZ"
IF MOUSE KEY=2 THEN PRINT"- SAĞ BUTTONA BASTINIZ"
NEXTI programı, mouse'un hangi düğmesine basıldığını ekrana yazar.
Bu aylık bu kadar, gelecek aya kadar hoşça kalın.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 22
label2'ye, 3 ise label3'e .... atlar.
PRINT "1-GELİŞ" PRINT "2-GİDİŞ" BURArINPUT "SECİMİNİZ";a ON a GOTO JUMP,SERDAR PRINT "KUSURA BAKMAYIN SA- DECE IKI SEÇENEK"
GOTO BURA JUMP:PRINT "1'i seçtiniz" END SERDAR:PRINT "2'yi seçtiniz" END Bu programda input komutuna 1 sayısı ile cevap verirseniz, program JUMP label'ına dallanır, eğer cevabınız 2 ise, program SERDAR label'ına dallanır. Seçiminiz bunlardan biri değilse, program sizi uyarır ve yeniden giriş yapmanızı ister.
[ON...GOSUB] [ON...GOSUB] komutunun kullanımı, [ON...GOTO] komutu ile aynıdır. [ON (değişken) GOSUB (label1, label2, label3...)] olarak kullanılır. İşlevi değişkenin değerine karşılık gelen label'a atlamaktır.
Diğer bir dallanma komutu da [EVERY..GOSUB]'tır. [EVERY (sabit) GOSUB (label)] olarak kullanılır. Buradaki sabitin değerine göre label'a atlar. Verilen sabit, bir saniyenin ellide biri süre içinde dallanılan program bölümünün uzunluğunu belirtir. Buradaki en önemli nokta, GOSUB işlemi ile dallanılan alt program bu periyod zamanından az sürmelidir; yoksa hata mesajı verir. Bu komut kullanıldıktan sonra sistem otomatik olarak kapanır, bu nedenle devamı akıcı olarak sağlayabilmek için EVERY ON komutu ile beraber kullanılmalıdır.
örneğin; EVERY 50 GOSUB ALIŞTIRMA DO PRINT "ANA PROGRAM" LOOP ALIŞTIRMA: INC X:PRINT "ATLAMA SIRASI";X EVERY ON :RETURN
Not:EVERY ON komutu Amiga Basic'teki ON TIMER komutuna benzer. [EVERY ON/OFF]
[EVERY ON], sistemin [EVERY] komutu ile kullandığı interrupt'ı (kesintiyi) yeniden başlatır. Bu komut, dallanmadan sonra işleme geri dönmeden konmalıdır. Böylece olayın akıcılığını sağlamış oluruz.
[EVERY OFF] komutu ile dallanma olanağı tamamen kapatılır. Bu komut sistemin interrupt'ını kapatır.
[PROCEDURE] Eğer büyük programlar yazmaya kalkarsanız, Amos Basic size programın karışmaması ve anlaşılır olması için birçok komut sağlamıştır. Bunlardan en çok kullanılanı [PROCEDURE]'dur. Büyük programlar iç içe birçok küçük programların birleşmesinden oluşur. Bu küçük programları ayrı ayrı adlar altında toparlamazsanız, daha sonra siz bile işin içinden çıkamazsınız. İşte [PROCEDURE] küçük programları bir başlık altında toplama ve istenilen yerde doğrudan kullanma olanağı sağlar. [PROCEDURE İSİM (değişkenler)] olarak kullanılır. PROCEDURE OSMAN [a$] gibi. Bu komutla, program içinde yeni komutlar yaratılabilir.
PROCEDURE YAZ[a$] PRINT a$ END PROC Bu PROCEDURE çağrıldığında, a$ değişkenini ekrana yazacaktır. PROCEDURE'u çağırmak için sadece adını ve eğer varsa değişkeninin değerini yazmak yeterlidir. Yukarıdaki PROCEDURE'u çağırmak için [YAZ "OSMAN"] yazmamız yeterli olacaktır ve ekrana OSMAN yazısı çıkacaktır. PROCEDURE'u [GOSUB] komutunun yaptığı işleve benzetebiliriz. Fakat ikisi hiçbir zaman aynı değildir. Bir PROCEDURE'un bittiğini belirtmek için, komutların sonuna [END PROC] komutu konularak ana programa dönüş sağlanır.
PROCEDURE'ler, alt program olduklarından değişken tanımlamalarında çoğu zaman hata yapılmaktadır. Bunun için ilk önce değişkenleri iyice tanımamız gerekir.
YEREL VE GENEL
DEĞİŞKENLER Bir PROCEDURE'de kullanılan değişkenler, ana programda kullanılan değişkenlerden ayrıdır ve aralarında bağ yoktur. PROCEDURE'lerde kullanılan değişkenlere yerel değişkenler denir.
A=1333:B=13 TEST PRINT A,B PROCEDURE TEST PRINT A,B END PROC programı çalıştırıldığında, bu iki değişke- nin PROCEDURE'ın içinde ayrı, ana programda ayrı olduğunu göreceksiniz.
PROCEDURE'lerin dışındaki ana program değişkenlerine genel değişken denir. PROCEDURE'un dışında kullanılan değişkenler, içerisinden çağrılamaz.
FOR KAPI=1 TO 20 ANAHTAR NEXT KAPI END PROCEDURE ANAHTAR IF KAPI=10 THEN PRINT "BURASI" END PROC programında, PROCEDURE'un içindeki BURASI yazısı hiçbir zaman çıkmayacaktır. Normalde çoğu insan KAPI değişkeninin PROCEDURE içinde değişmediğini düşünür. Fakat PROCEDURE içindeki KAPI değişkeninin bu işlemler sırasında değeri 0'dır. Sadece ana programda 1'den 20'ye kadar değişmektedir.
[SHARED] Bu komut, PROCEDURE içinde kullanılır. Kullanımı [SHARED (değişken listesi)] şeklindedir. Bu komut içinde virgüller ile ayrılarak sıralanan değişkenler, genel değişkenler olarak değerlendirilir, böylece procedure içerisinde kullanılan değişkenleri ana program içerisinde kullanma olanağına sahip oluruz. Ya da ana program içerisindeki değişkenleri procedure'ler içerisinde kullanabilme imkanı sağlar.
Örneğin; X=387085:Y=1990 DENEME PRINT X,Y PROCEDURE DENEME SHARED X,Y X=X+Y:Y=Y+1000 END PROC Bu test programında x ve y değişkenlerini SHARED ile tanımlamak suretiyle procedure içerisinde işleme tabi tutabiliyoruz. Procedure dışarısında tanımlanan x ve y değerleri, procedure içerisinde SHARED komutu vasıtasıyla tekrar okutulup üzerlerine yeni değerler yazılıyor.
[GLOBAL] Büyük bir program yazarken birçok değişkeni PROCEDURE'lerin içinde kullanmak isteyebilir ya da zorunda kalabilirsiniz. Her PROCEDURE'de ayrı ayrı [SHARED] komutunu kullanmak hem zor olur, hem de zaman bakımından çok sıkıntı çekersiniz. Bunun kolay yolu, PROCEDURE içinde kullanılacak değişkenlerin [GLOBAL] komutu ile ana programın başında belirtilmesidir. [GLOBAL], gerçekten çok yararlı bir komuttur. Şimdi olmasa bile, ileride oldukça çok kullanacaksınız.