Bu sayfadaki yazılar
Sayfanın metni
Sayfa 16
Yapılandırılmış Değil,
Sadeleştirilmiş
“Yapılandırılmış programlama” terimini ilk duyduğumda, pek de matah bir şeye benzemediğine karar vermiştim. Yapılandırılmış terimi aklıma kurallar, karmaşık matematik kavramları ve Boole mantığı üzerine akademik çalışmalar getiriyordu. Cehaletimin paniği her zamanki gibi yersiz çıktı. Tamam, Comal üst düzey bir yapılandırılmış dil, fakat üst düzey yalnızca tek bir anahtar sözcükle pek çok iş görebileceğiniz anlamına geliyor; yapılandırılmışsa sadeleştirilmiş demek. Comal elinizdeki işi çok sayıda küçük küçük işe, PROC'lara ayırmanıza olanak vererek işinizi sadeleştiriyor. PROC'ları büyük işin gerçekleş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 renkleri değiştirmek isteyince çağırabilirsiniz:
proc renk'değiştir
#4 çerçeve 7 // sarı çerçeve arkaplan 14 // açık yeşil ekran ((pencolor?)) // siyah cursor 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 Peek'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 deniyor. Bu bir yapı. Başı ve sonu var. Ayrıca, dikkat ettiyseniz, başla son arasındaki satırları bir hane içeriden yazılmış. Bu da netlik için ve Comal bunu kendiliğinden yapıyor. Comal dönüşlü (recursive) bir dil. Yani kısacası PROC'lar kendi kendilerini çağırabiliyorlar.
Programcılara
Tatlı Hayat
Comal 0.14 cin gibi. Sizi alan o ufak tefek işlerden büyük ölçüde kurtarıp, kodun mantığı üzerinde yoğunlaşmanıza imkân sağlıyor. Basic'te olmayıp da yüzlerce Basic uzantısıyla getirilen basit şeyler Comal'in iç yapısında yer almış. Satırların otomatik olarak numaralandırılması, 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 (editing) imkânı, satırların değiştirilmesini kolaylaştırıyor. Daha önce de söylediğim gibi, Comal girdiğiniz her kod satırını kontrol eder. Eğer sentaks hatası çıkarsa, ertesi satırda ekranda İngilizce hatası ibaresi belirir. Cursor'u hatalı anahtar sözcüğün tam üzerine gelir, gerekli düzeltmeyi yaparsınız. Düzeltme yapılınca da, hata mesajı silinir ve üzerinde belirmiş olduğu metin tekrar ortaya çıkar. Yapı sorunları (atlanmış bir ENDPROC, ENDCASE vb.) programı çalıştırdığınızda ortaya çıkar. Bu da ikinci kontroldür. Comal, program çalıştığı sırada da performansını denetlemeyi sürdürür ve mesela “selfmodification” ya da “out of range” bir değer gibi bir hata buldukça haber verir.
Karakter sayısı 78'e kadar çıkabilen, 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ğinden, bu uzun isimler hafızada gereksiz yer de kaplamazlar. Döküntüleri toplamak, Comal'le birlikte tarihe karışmıştır. Tüm değişkenler, array'ler ve karakter dizileri, korunan tablolarda 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ırılmaları yerinde olacaktır. Diziler, değişkenler ve array'ler genel (yani tüm PROC'lar için geçerli) olabileceği gibi, mevzi, 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$ dizisinde “Jim” harflerinin bulunup bulunmadığı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 karmaşık olan ve bir sürü kod byte'ı gerektiren bu iki işlem, Comal'de tek bir anahtar sözcükle gerçekleştirilebilmektedir. Benchmarklar gösteriyor ki, Comal dizi arama işleminde Basic'ten 79 kat daha hızlı. Comal 0.14, yerine getirmekte olduğu işleve bağlı olarak, Basic'le makine dili arasında bir hızla işlemekte. Comal 2.0'sa tüm operasyonlarda makine diline çok yakın bir hız gösteriyor. Çevresel gereçlerle uğraşmak Basic'in en tatsız işlerindendir. Comal bunun zorluklarını da büyük ölçüde azaltıyor. Disk sürücünün rehberini görmek için, CAT anahtar sözcüğüne başvuruyorsunuz. Rehber ekranda yavaş yavaş geçerken, hafızadaki program silinmiyor. Programları printer'da yazdırmak da kolay:
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 17
select “1p:” // printer'a CMD kanalı aç liste Kanallar otomatik olarak açılıp' kapanıyor.
List ve Edit
Comal programını ekranda dökümlediğinizde, satır numaraları görünür ve yapılar otomatik olarak içeriden yazılır. Edit anahtar sözcüğünde de durum buna benzer; fakat burada, satırları daha kolay düzeltebilmeniz için, yapılar içeriden yazılmamaktadır. Ekrandaki dökümleme işlemine ara vermek içinse, boşluk çubuğuna basmanız gerekir. List komutuyla her türlü cihaza program gönderebilirsiniz. Fakat diskte dökümlenmiş bir program çok yararlı olabilecektir. Sentaks Save komutundaki gibidir:
List “benim'programım,
Sonra da, Enter anahtar sözcüğünün aracılığıyla, BENİM'PROGRAMIM.L istendiğinde merge edilebilecek sıralı bir dosya olarak diske kaydedilir. Aynı şekilde, PROC'lar da dökümlenip gerektiğinde Enter edilebilmektedir. Bu da program geliştirme süresini kısaltır. Sık kullanılan PROC ya da FUNC'ları bir diskte depolayıp, sonra gerekenleri merge ederek bir program oluşturabilirsiniz. İstenirse, PROC'lar anahtar sözcük işlevi de görebilir. Comal 0.14, VAL ve STR$ dışında, yaygın olarak kullanılan bütün komutları içermektedir. Bu iki komut için de, onların yerine geçebilecek PROC'lar yazılmıştır ve gerekirse programa Merge edilmeleri mümkündür.
Comal'de programcı döngülerin içindeki değişken koşulları çeşitli yollardan test edebilir. Döngünün sonu Repeat-Until'le test edilir. IF-THEN-ELIF-ELSE-ENDIF ise çoklu koşulları test eder, fakat IF'le ENDIF arasında istediğiniz sayıda kod satırına yer verebilirsiniz. Case yapısı Basic'in ONX-GOTO'su gibidir. Yalnız, burada satır numaraları kullanılmaz ve sınırsız sayıda PROC çağrılabilir:
repeat cevap$ anahtar$ //bir tuşa bas until cevap$ “ax'de // a veya x'e
basıldığında geç case cevap$ when “a” // “a”ya basıldı start'program check'results
end when “x” // “x”e basıldı print “Program Sonu” end endcase
Case tuşların değerlendirilmesini kolaylaştırmaktadır. Doğru tuşa basılmadıkça, Repeat-Until döngüsü durmayacaktır. Comal'de, mantık testleri yapmanıza olanak veren iki de sistem sabiti, Doğru ve Yanlış (True and False) yer alır. Comal fonksiyonu da tıpkı bir PROC gibi ele alır. Ne var ki, burada her FUNC (Basic'teki FN) çok satırlı bir denklem olabilir ve parametreler FUNC'a geçirilebilir. FUNC, değerleri çağıran satıra gönderir.
Krema: Ekran Cinleri ve Kaplumbağa
Apple, Osborne ve CP/M Comal kullananlar, işin tadını tam çıkaramıyorlar. Çünkü onların ekran cinleri yok. Biz Commodore'cularsa bu açıdan da şanslıyız ve C-64 Comal bu olanağı sonuna kadar değerlendiriyor. Ekran cinlerini hep kullanmak istiyor, fakat Basic'i bu konuda yetersiz buluyorduysanız, Comal'e bayılacaksınız. On yeni anahtar sözcük, ekran cinlerinin tanım ve hareketlerini her bakımdan kontrol etmenize olanak tanıyor. POKE'lara son! Comal'in hafızasında ekran cinlerine 56 görüntülük yer ayırılmış. Aynı anda sekiz cini ekrana çıkarabilir, Basic'tekinin birkaç katı hızla hareket ettirebilir, çarpıştıklarını görür, istediğimiz gibi açıp kapatabilir ve boyutlarını değiştirebilirsiniz. Basic programcısının öğrendiği son konulardan olan ekran cinleri sizin Comal'e giriş noktanızı oluşturabilir. Comal'in kaplumbağası, kendinden hi-res ekran üzerine oturtulan küçük bir ışık üçgeninden ibaret ve Logo'nun komutlarına aynen, ya da çok az bir farkla tekabül eden anahtar sözcüklerle hareket ettiriliyor. Comal'in kaplumbağası kâh gizleyip kâh gösterebileceğiniz bir ekran cini. Logo programcıları Comal'de hiç yabancılık çekmeyecekler. Yalnız, Comal'in kaplumbağası Logo'nunkinden bir hayli hızlı ve ekran cinleriyle bir arada kullanılabiliyor. Comal'in hi-res ekranı her an çizime hazır. Tek bir anahtar sözcük, SETGRAPHIC, Logo'nun, 64 Superexpander'in ve Simon Basic'inin bütün grafik fonksiyonlarını bir anda önünüze seriyor. Comal'e yeni başlayan biri kaplumbağayla ve X-Y grafikleriyle oynayarak bile öğrenebilir bu dili.
Tamam, Çok Güzel de...
Comal 0.14'ün kusursuz üst düzey dil olduğunu sanmayın, tabii. Bazı yetersizlikleri de yok değil. Bütün programlar gibi bu dil de C-64'e diskten yükleniyor, fakat yükleme süresi neredeyse 2 dakikayı buluyor. Ayrıca, Comal'de SID chip'ini denetleyecek anahtar sözcükler de yok. Daha önce de belirttiğim gibi, Comal VAL ve STR$ içermiyor. Fakat bu komutlar kolayca uyarlanabilir. Programcıya yalnızca 9902 byte ayrılmış; ne var ki, Comal çok daha güçlü olduğundan, bence bu 9902 byte Basic'te 18K'ya eşdeğer.
Comal Nereye Gidiyor?
0.14 versiyonu başından beri bir öğrenme dili olarak tasarlanmıştı. Güçlü bir geliştirme sistemi olmak gibi bir iddiası yoktu. 64K'lık kartuş versiyonu 2.0'ınsa süper güçlü bir program geliştirme sistemi olduğunu rahatlıkla söyleyebilirim. İzninizle, bu yazıda da cüretkâr bir tahminde bulunayım: Comal kartuşu Basic'i silip süpürecek!