Bu sayfadaki yazılar
Sayfanın metni
Sayfa 9
sen de bir dil düşün
bilgisayarla
yapılmasını istediğimiz işin niteliği kadar, çalışma tarzımız da dil seçiminde etkili oluyor.
dil belirlemeyi tercih ediyorum. Ayrıca, Pascal'daki tipler zorunluluğunun sıkılığı kimi zaman gerçekten eziyetli oluyor. Sonuç olarak bir sayının INTEGER mi (tam sayı) yoksa REAL mi (ondalık sayı) olduğunu bazen bizzat bilgisayar belirlemelidir. Hem zaten o bunu benden daha iyi yapabilir. Tiplerin örneğimizdeki gibi güzelce bildirilmiş olmasına gelince, eğer bu bana bir avantaj sağlamıyor-
İşte buldum! Rekürsif bir sarmal çizeceğim.
sa ne yararı vardır bu bildirimin? Çünkü belirlenen sınırlar dışında bilgisayara veri aktarılması gene de mümkündür ve Pascal hiçbir hatayı bildirmemektedir. Yalnızca Pascal derleyicisi (Compiler) bu konuda bir avantaj sağlayabiliyor; çünkü bu sayede kendi depo alanı düzene sokulabilmektedir.
LOGO'NUN BÜYÜK GÜCÜ: RECURSION Bir keresinde bizim yazı kurulumuzda -başlangıçta çocuklar için geliştirilmiş- LOGO programlama diliyle ilgili olarak şiddetli bir tartışma çıkmıştı. Taraflardan biri LOGO'nun bütünüyle BASIC'le ya da Pascal'la kıyaslanabileceğini, dolayısıyla da LOGO ile yararlı programlar yapılabileceğini öne sürüyordu. Öbür grup ise hâlâ “çocuksu” olduğunu ve bu yolla -güzel grafik çizimler dışında- aklı başında hiçbir şey yapılamayacağını iddia ediyordu. Bu tartışmada herhangi bir çözüme ulaşılamadı. Biz de örnek programımızı LOGO dilinde yazmaktan kaçındık. Giriş/Çıkış rutinlerini ve veri yönetimlerini programlamak çok zahmetli bir işti. Çünkü bu dilin gücü, ona kız kardeşi LISP'ten (“yapay zekâ” için öngörülen programlama dili) miras kalan bir özellik olan “recursion”dan kaynaklanmaktaydı. (Recursion Pascal'da da vardır.) Bir ağaç resmi çizmek istediğinizi düşünün. Önce 10 cm. uzunluğunda bir cetvel alın ve bir çizgi çekin. Daha sonra cetveli, diyelim yarı yarıya, kısa tutun, biraz döndürün ve işleme baştan başlayın. Bu işlem, bizim herhangi bir yerde bir sona ulaşıncaya değin gitgide küçülen değerlerle sürekli olarak tekrarlanmalıdır. (Çizimin nerede son bulacağını tabii sizin yerleştirmeniz gerekiyor programa.) Gerçi şimdiden recursion'un özüne değin (aynı olayın sürekli tekrarlanması) bir fikir sahibi olduğunuz söylenebilir, ama tek başına bu kadar bilgi elbette yeterli değildir. BASIC'deki her FOR-NEXT de bunu pekâlâ yapabilir. Recursion'un önemli bir özelliği şudur ki, bilgisayara iletilen bir komut hemen uygulanamamakta, aynı şemaya göre bir dizi alt-komutun çözülmüş olması gerekmektedir. Bunu somutlaştırmak için şöyle bir durumu gözünüzün önüne getirin: Bir dostunuz size geliyor ve bir bilgisayar edinmek istediğini bildiriyor. Ama amatör telsizci olan dostunuz bu hobisinden dolayı mutlaka özel bir program arzu ettiğini de sözlerine ekliyor ve size bu konuda kendisine bir tavsiyede bulunup bulunamayacağınızı soruyor. Siz herhangi bir tavsiyede bulunamıyorsunuz. Bununla birlikte, sizin de bilgisayar ticareti yapan bir tanıdığınız vardır ve bu kişiye amatör telsizciler için özel programı olan bir bilgisayar bilip bilmediğini soruyorsunuz. Ama o da yardımcı olamıyor bu konuda, ancak onun da danışacağı yetkili birisi vardır... vb. En sonunda bu konuda bilgi sahibi olan birini bulmak mümkün oluyor. Bu kişi doğrudan kendisine
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 8
bölümleri içersin: Soyadı, Adı, Doğum tarihi, Posta kodu, Yer, Sokak, ilgilinin devamlı mı, geçici mi çalıştığı ve devamlı statüde ise, ücreti.
Böylece bilgisayarın başına geçtiğimi ve programı yazdığımı düşünün. Programı yazma, yanlış aramalarla ve düzeltimlerle birlikte, yaklaşık iki saatimi alıyor. Daha önceden hiçbir taslak yapmıyorum ama böyle bir lüksü ancak küçük programlarda ve zamandan tasarruf etmek amacıyla kendime tanıyabilirim. İşte şimdiden BASIC'in temel özelliklerinden biriyle tanışmış oluyoruz: Bu sevimli çevirici-dilde olduğu gibi, bu kadar kısa bir süre içinde hatasız ve kendi gereksinmelerine uyarlanmış küçük bir program herhalde başka hiçbir programlama diliyle yazılamaz. Öte yandan, programın kuruluşunun bir ba-
ayatta hiçbir
şeyin ideali olmadığı gibi, bilgisayar dillerinin de ideali yok. Seçilecek dil, yapılacak işe, beklentilere, hattâ zevke bağlı.
kışta kavranamamasından doğan tehlikenin bu denli büyük olduğu bir başka programlama dili de yoktur. Bu noktada ona en çok yaklaşan diller Assembler ve Forth ve C gibi, Assembler benzeri dillerdir.
Pascal hayranı olan bir mesai arkadaşım bu programı önce Pascal diliyle yazdı. Her iki mini-programı karşılaştırdığınızda, iki şey hemen gözünüze çarpacaktır kuşkusuz: Pascal versiyonu 1) çok daha uzundur, 2) bir bakışta çok daha kolay kavranabilir.
Pascal'ı güçlü kılan özelliklerden biri -ki bunu herhalde bilirsiniz- onun “yapısallaştırma” yetisidir. Bu program-yapısı daha dökümde, yani programın simgesel ifadesinde apaçık görülür. Bu sayede, daha sonra yapılan düzeltimlere ve katkılara kolaylık sağlanmış olmaktadır. Böylece, karmaşık tarzda programlar da okunabilirliklerini korumuş olurlar. Ayrıca, Pascal'ın pedagojik etkisini de küçümsememek gerekir: Pascal, dakikliğiyle ve her değişkenin kullanımdan önce tam olarak açıklanmasını şart koşmasıyla, programcıyı disipline ve özene zorlar. Peki “yapısallaştırma” uygulamada ne anlama gelmektedir? Bir gün şöyle bir deney yapmak zahmetine katlanmıştım: İçlerinde belli bir değerin hesaplandığı program satırlarını, yabancısı olduğum bir BASIC programında aramaya çalışıyordum. Bir süre geçtikten sonra üzülerek gördüm ki, satırlar programın tümüne dağılmışlardı. Buna GOTO ve GOSUB komutları yol açmıştı. Gerçi GOTO komutu Pascal'da da var, ama orada pek makbul sayılmıyor ve birçok durumda da zaten gereksiz. Bunlar orada bloklar halinde çalışırlar ve bloklar içindeyse gerçekten birbirlerine ait olanlar bir araya getirilmişlerdir. Bu tür bloklar ya yordamlar (procedure) ve fonksiyonlardır (bunları “adları olan alt-programlar” olarak tanımlamak mümkündür), ya da bir “begin” komutuyla başlayan ve bir “end” komutuyla sona eren başka program birimleridir. Profesyonel bir Pascal-programının oldukça tuhaf bir görünümü vardır. Programın ilk %90'ı sadece tanımlar içerir; değişkene, yordamlara ve fonksiyonlara ilişkin tanımlar... Asıl program ise, içlerinde bu yordamların harekete geçirildiği birkaç satırdan oluşmaktadır. Böylelikle, programın okunmasına yüksek bir düzeyden -ana program düzeyinden-
Sonuç bu kadar büyük olmalı...
başlanabilmektedir. Daha sonra da ve ancak tedrici olarak programın diğer bölümlerine nüfuz edilebilmektedir. Tabii bunun tersi bir yöntem de geçerlidir: Programlamada ilkin programın kaba bir taslağıyla işe başlanmakta ve programa yavaş yavaş incelik kazandırılmaktadır. Buna “Top-Down” yöntemi denilmektedir. Adından da anlaşılacağı üzere, bu yukardan aşağıya doğru uygulanan bir yöntemdir. Ama “yapısallaştırma” sadece program yapısıyla sınırlı olmayıp bütün veri tiplerine yayılabilir. Böylece Pascal, BASIC'de bulunan verilerin ötesine geçmenin sözkonusu olduğu her yerde uygun bir programlama dili olarak sunar kendini bize. Örneğin doğum tarihi için bunu söyleyebiliriz: BASIC'de doğum tarihini ya üç sayıya ayırmak, ya da bu tarihi sözkonusu üç sayının kendisinden güçlükle çıkarıldığı bir karakter zinciri olarak işlemek zorunluğu vardır. Pascal'da ise üç rakamdan oluşan “Tarih” adlı yeni bir veri tipini tanımlamaktan başka bir şey yapmaya gerek yoktur. Bu arada, anılan üç rakamdan her birinin belli sınırlamalara tâbii olduğunu belirtmek gerekir. Böylece, doğum tarihi daha anlaşılır olmakta ve daha kolay okunabilmektedir. Bu sayede ayrıca, programdaki bazı işlemler daha kısalmakta ve hızlanmaktadır. Ele aldığımız örnekteki veri yığını da böylelikle temel veri tiplerinin bir araya getirilmesiyle oluşmuş bulunuyor: Tam sayılar, ondalık sayılar (REAL), karakterler (CHAR), karakter zincirleri (STRING) ve mantıksal değişkenler (BOOLEAN). Bunların dışında başka her şeyi kendi gereksinmelerinize göre ve kendi kendinize oluşturmanız mümkündür. Ama ben BASIC-sever bir kişi olarak Pascal'ın yolaçtığı güçlükleri düşünmeden edemiyorum. Bu dil pek çok alanda fazla muğlak geliyor bana. Kendi BASIC programlarımı zengin ve anlaşılır açıklamalar sayesinde her zaman okuyabiliyorum. Nasıl bir disiplin uygulanması gerektiğini de, bana dikte ettirilmesindense, kendi