cüklerin ayrı ayrı satırlar halinde alt alta dizilmesi, programın akışını izle- memizi mümkün kılıyor. Bir Comal programını iyi bir kitap gibi okuyabi- lirsiniz. Farkettiyseniz, anahtar söz- cükleri de İngilizce ve Türkçe'den faz- la farklı değil. Daha ileri gitmeden itiraf edeim: Si- zi kandırdım. Yukarıdaki Comal programında select “1p:” ile select ““ds:”'den başka anahtar sözcük (ko- mut) yok. Bunlar Comal'in anladığı standart anahtar sözcükler. Geri ka- lanlar (sayfa, asıl'menü, vb.) prog- ramcının işlevini tanımlayacak şekil- de isimlendirdiği ve yalnızca bir satı- ra almak yoluyla işleme soktuğu pro- sedürlerden ibaret. Prosedürler (PROC) subroutine'lerin aynısı. Satır numarası yerine isimle çağrılıyorlar ve işleri bitince program, PROC çağrı- sının bir altındaki anahtar sözcüğe at- liyor. Basic, subroutine'lere ve GOTO'- lara yapılan atlamalara referans ola- rak satır numaralarını kullanır. Co- mal'se atlamalar ve dallar için isimli PROC'lardan ve işlevlerden (FUNC”'- lar) yararlanıyor. Comal'de satır nu- maraları bu sırayla işleme konulacak anahtar sözcükler ve PROC'lar liste- sini düzenlemekte kullanılıyor. Fakat Comal'ın satır numaralarına gönder- me yapmak mümkün değil. Bu yüz- den, Comal program lİistelerinde sa- tır numaraları belirtilmez. Programın nasıl işlediğini anlamamız açısından gerekli de değildir zaten. Bu, aynı za- manda GOTO gereğini de ortadan kaldırmakta. Programınızın nereye gittiğini anlamak isterseniz PROC'la- ra bir göz atmanız yetiyor. Yapılandırılmış Değil, Sadeleştirilmiş “Yapılandırılmış programlama” te- rimini ilk duyduğumda, pek de matah bir şeye benzemediğine karar vermiş- tim. Yapılandırılmış terimi aklıma ku- rallar, karmaşık matematik kavram- ları ve Boole mantığı üzerine akade- mik çalışmalar getiriyordu. Cehaleti- min paniği her zamanki gibi yersiz çık- tı. Tamam, Comal üst düzey bir yapı- landırılmış dil, fakat üst düzey yalnız- ca tek bir anahtar sözcükle pek çok iş görebileceğiniz anlamına geliyor; yapılandırılmışsa sadeleştirilmiş de- mek. Comal elinizdeki işi çok sayıda küçük küçük işe, PROC'lara ayırma- nıza olanak vererek işinizi sadeleşti- riyor. PROC'ları büyük işin gerçek- leştirilmesi için gereken sırada çağırı- yorsunuz. Comal'in yapılandırılmış programlaması bundan ibaret. PROC'ların oluşumunu daha iyi anlamak için, bir örneğe bakalım. Bu PROC'u ekran, çerçeve veya (cursor?) renklerini değiştirmek isteyince çağı- rabilirsiniz: proc renk'değiştir // çerçeve 7 // -sarı çerçeve arkaplan 14 // açık yeşil ekran ((pencolor?)) // siyah cursor T4 endproc renk'değiştir REM'leri sırf netlik sağlamak için ekledim; programı yavaşlatmaları söz- konusu değil. PROC renk'değiştir'i her çağırdığınızda o üç renk değişiyor, sonra program devam ediyor. Basic'- teyse şöyle bir şey olacaktı: 6000 POKE53280,7:POKE53281,14: PRINT “|black)”,:RETURN Comal, Basic programcısının uğraş- mak zorunda kaldığı Poke'ler ve Pe- ek'lerin çoğunu elimine etmekte. Her prosedür, PROC anahtar sözcüğü ve kendi ismiyle başlıyor. PROC'un son satırında da ENDPROC isim de- niyor. Bu bir yapı. Başı ve sonu var. Ayrıca, dikkat ettiyseniz, başla son arasındaki satırları bir hane içerden yazılmış. Bu da netlik için ve Comal bunu kendiliğinden yapıyor. Comal dönüşlü (recursive) bir dil. Yani kısa- cası PROC'lar kendi kendilerini çağı- rabiliyorlar. Programcılara Tatlı Hayat Comal 0.14 cin gibi. Sizi :zaman alan o ufak tefek işlerden büyük öl- çüde kurtarıp, kodun mantığı üzerin- de yoğunlaşmanıza imkân sağlıyor. Basic'te olmayıp da yüzlerce Basic uzantısıyla getirilen basit şeyler Co- mal'ın iç yapısında yeralmış. Satırla- rın otomatik olarak numaralandırıl- ması, klavye hatası ihtimalini hatırı sayılır ölçüde azaltıyor; satırlar tek tek ya da dizi halinde çıkarılabiliyor ve Basic usulü tam ekran düzeltme (edi- ting) imkânı, satırların değiştirilmesini kolaylaştırıyor. Daha önce de söylediğim gibi, Co- mal girdiğiniz her kod'u satırını kont- rol eder. Eğer sentaks hatası çıkarsa, ertesi satırda ekranda İngilizce hatası ibaresi belirir. Cursor'u hatalı anah- tar sözcüğün tam üzerine gelir, gerekli düzeltmeyi yaparsınız. Düzeltme ya- pılınca da, hata mesajı silinir ve üze- rinde belirmiş olduğu metin tekrar or- taya çıkar. Yapı sorunları (atlanmış bir END- PROC, ENDCASE vb.) programı ça- lıştırdığınızda ortaya çıkar. Bu da ikinci kontroldür. Comal, program çalıştığı sırada da performansını de- netlemeyi sürdürür ve mesela “self- modification'' ya da ““out of range” bir değer gibi bir hata buldukça ha- ber verir. Karakter sayısı 78'e kadar çıkabi- len, her bir hanesi anlamlı uzun de- ğişken isimleri, programın anlaşılır kalmasını sağlamaktadır. Tüm değiş- kenler tek bir byte'da simgelendiğin- den, bu uzun isimler hafızada gerek- siz yer de kaplamazlar. Döküntüleri toplamak, Comal'le birlikte tarihe ka- rışmıştır. Tüm değişkenler, “array'- *ler ve karakter dizileri, korunan tab- lolarda depolanırlar. Fakat, bunun için, her diziyi kullanmadan önce DIM etmeniz ve ne uzunlukta olaca- ğını önceden belirtmeniz gereklidir. Mesela şöyle: dim filename$ of 16 Gerçek ve tam sayı değişkenlerde bu işlem gerekli değildir. Bir diziyi programın herhangi bir yerinde DIM edebilirsiniz; fakat, netlik açısından, başlangıçta gruplandırilmaları yerin- de olacaktır. Diziler, değişkenler ve *“sarray”'ler genel (yani tüm PROC'- lar için geçerli) olabileceği gibi, mev- zi, yani yalnızca kapalı PROC'lar için geçerli de olabilir. Dizileri güçlü anahtar sözcük In'le arayabilirsiniz. Örneğin, name$ dizi- sinde “Jim” harflerinin bulunup bu- lunmadığını kontrol eder, bulunca da yalnızca dizinin bir bölümünün üstü- ne yazmak yoluyla onun yerine Jan'ı geçirebilirsiniz. Basic'te bir hayli kar- maşık olan ve bir sürü kod byte'ı ge- rektiren bu iki işlem, Comal'de tek bir anahtar sözcükle gerçekleştirilebil- mektedir. Benchmarklar gösteriyor ki, Comal 16 Commodore F