LOGO öğreniyoruz (2)
Hata yapmaktan korkmayalım. Dizimizin bu seferki ana fikri bu. LOGO'nun yaratıcılarının ta başından beri vurgulamaya çalıştıkları da bu: “Bizler hata yaparak öğreniriz.” LOGO hata yapılabileceğini kabul eden bir dildir. Yine bu düşünceden yola çıkarak LOGO, hatalar konusunda size elinden geldiğince yardımcı olabilecek biçimde hazırlanmıştır. Tabi hatalarımızdan öğrenebilmemiz, ancak onların üzerine çözümleyici bir şekilde yaklaşmamızla mümkün olabilir. Şimdi yukarıda anlattıklarımızı örnekleyelim: Önce LOGO'nun anlamsız bir sözcük karşısındaki tavrını görelim. Aşağıdaki satırı girelim:
?2ANLAMSIZ
THERE IS NO PROCEDURE NAMED ANLAMSIZ
(anlamsız diye bir işlem yok)
Görüldüğü gibi LOGO tanımlanmamış sözcükleri bu şekilde belirtmektedir. Bu durum ya tanımlanmamış bir işleme atıfta bulunduğumuzda veya yazım hatası yaptığımızda karşımıza çıkabilir. Şimdilik, LOGO'nun İngilizce versiyonunu kullananların hata mesajlarını anlayabilmeleri bu dili bilmelerini gerektiriyor. Ancak gelecek sayımızda LOGO hata mesajlarının Türkçe karşılıklarıyla ayrıntılı açıklamalarını vereceğimizi söyleyebiliriz. Yine de bu sayıda LOGO'da çok sık yapılan hatalardan birinden söz etmek istiyorum. Geçen sayıdan hatırlarsanız, bir nesnenin adıyla ona atanan değeri karıştırmamamız gerektiğini belirtmiştik. Nesnenin adını “önekiyle, değerini de : önekiyle yazmamız gerekir. Buna göre, HARÇLIK nesnesinin adı “HARÇLIK, değeri :HARÇLIK olarak gösterilir. Bunları bir işlemde kullanalım:
?MAKE “HARÇLIK 10
?MAKE “HARÇLIK :HARÇLIK * 20
2PRIİNT :HARÇLIK
Birinci satırda HARÇLIK nesnesine 10 değeri atanıyor. Bu atamanın hangi nesneye olduğunu onun adını vererek yanıtlarız ('HARÇLIK). İkinci satırda ise nesnenin değeri 20 artırılıyor yani nesnenin önceki değerine 20 ekleniyor. Bu arada nesnenin önceki değeri (:HARÇLIK) olarak gösteriliyor. Üçüncü satırda nesnenin değerini yazdırmak için kullanılıyor. Yani bir nesneden söz edileceği zaman, ona atfedilen değeri mi yoksa kendisini mi (adını) kullanacağımız sorusunu yanıtlarsak bu konuda hata yapmayız. Ancak yine de bu konuda ters kullanımlar en sık rastlanılan hatalardan olmaktadır. Şimdi hataları bir yana bırakıp daha neşeli şeylerden söz edelim. Bu ay öğreneceğimiz şeylerden biri “LOGO'da Joystick Kullanımı”. Bu konuda örnek bir çizim programını Program Döküm Eki'nde açıklamalarıyla bulabilirsiniz. LOGO birinci joystick girişini 0, ikincisini ise 1 değeri ile tanır. Yani birinci joystick'in konumunu JOYSTICK 0, ötekisini JOYSTICK 1 sözcüğü ile bulabiliriz. Bu işlemin vereceği değer, konumlarına göre şöyledir.
Joystick'in düğmesine basılıp basılmadığını da JOYBUTTON 0 veya JOYBUTTON 1 sözcükleriyle öğrenebiliriz. Bu işlemler TRUE (doğru) veya FALSE (yanlış) sonuçlarını verir.
TO JOYSTİCK. OKUMA PRINT JOYSTİCK 0 : JOYS-
TİCK KONUMUNU YAZAR
PRINT JOYBUTTON 0 : DÜĞMESİ BASILIYSA
“TRUF' DEĞİLSE *“FALSE' YAZAR
JOYSTİCK. OKUMA : TEKRAR KENDİNİ ÇAĞIRIR
END
Şimdi joystick konumlarını gerçek açısal değerlere nasıl çevirebileceğimizi görelim.
TO AÇIYA. ÇEVİR
MAKE “DEĞER JOYSTICK 0
IF: DEĞER > -1 THEN MAKE “AÇI: DEĞER * 45
ELSE MAKE “AÇI |ORTADAJ
PRINT : AÇI
AÇIYA. ÇEVİR
END
Bu işlemde BASIC kullananların pek de yabancı olmadığı IF... THEN... ELSE sözcükleri dikkatinizi çekecektir. Bu yapı, belirtilen koşulların doğru ya da yanlış olup olmadığını değerlendirmek için kullanılır. Formatı aşağıdaki gibidir: IF (koşul) THEN (işlem1) ELSE (işlem2) Anlamı: EĞER (koşul) DOĞRUYSA (işlem1)'i YAP, YANLIŞSA (işlem 2)'yi YAP. Burada joystick ortada iken değerinin -1 olacağını göz önüne alarak bunu değerlendirme dışı bırakabilmek için IF :DEĞER > -1 koşulunu kullandık, yani :DEĞER'in büyük olduğu durumlarda bu :DEĞER joystick'in açı dilimi olan 45 derece ile çarpılarak çekildiği yön bulunmaktadır. Yukarı konumun 0 derece olduğuna dikkat edin (kaplumbağamız başlangıçta yukarı bakmaktadır). Joystick bir yöne çekilmemişse (ELSE...) bunun ortada durduğunu açı değerine atamaktadır. Burada bir nesneye hem sayısal hem de yazısal değerler atanabileceğini, LOGO'nun her ikisini de aynı biçimde değerlendirdiğini hatırlayalım. Sıra geldi joystick düğmesinin değerlendirilmesine:
TO JOSTİCK. DÜĞMESİ
IF JOYBUTTON 0 THEN
ELSE PRINT BASILI DEĞİL)
JOYSTİCK. DÜĞMESİ
END
Bu arada JOYBUTTON 0 sözcüğü zaten TRUE (doğru) veya FALSE (yanlış) diye sonuç vereceğinden doğrudan değerlendirmeye sokulmuştur. IF... işlemi, sonucu TRUE (doğru) veya FALSE (yanlış) olan işlemleri değerlendirir. Örneğin, “X = 10” terimi X nesnesinin değerine bağlı olarak doğru veya yanlış diye sonuç verecektir.
Değerlendirme sözcükleri dağarcığımıza birkaç tane daha katalım: TEST (koşul) ----- Belirtilen koşulu değerlendirir, IFTRUE (işlem 1)---TEST'te belirtilen koşul doğruysa işlem1'i yapar, IFFALSE (işlem2) ----TEST'te belirtilen koşul yanlışsa işlem2'yi yapar. Buna göre JOYSTICK DÜĞMESİ işlemini yeniden tanımlayalım:
TO JOYSTİC. DÜĞMESİ
TEST JOYBUTTON 0
IFTRUE PRINT (DÜĞME BASILI)
IFFALSE PRINT BASILI DEĞİL)
JOYSTİCK DÜĞMESİ
END
Şimdiye kadar öğrendiklerimizi uygulamasını dergimizin Program Döküm Eki'nde LOGO ÇİZİM programında açıklamalarıyla bulabilirsiniz. Bu program kasıtlı olarak basit tutulmuştur. Geliştirmesi sizden. Hoşça kalın.