iKoco ← Düzenleme penceresine dön

Koco Komutları

Kaplumbağanın anladığı komutlar, tuval, genel komutlar ve türler — masaüstü Koco belgelerinin tarayıcı sürümü.

1Kojo'ya hoşgeldin!

Kojo çok becerikli bir öğrenim ortamı. Kojo diye yazılıyor ama Koco diye okunuyor. iKoco ise onu tarayıcıda çalıştırır: kurulum yok, sol taraftaki düzenleyiciye yaz, Çalıştır'a bas, sağda ne olduğunu gör.

Bu kılavuz, masaüstü Koco'nun Yardım → Kojo Belgeleri öyküsünün tarayıcı sürümüdür. Kojo'nun kaplumbağacığı çok becerikli ve pek çok komuttan anlıyor. Komutların listesi bir sonraki bölümde. Her komutun yanında kısa bir açıklama ve örnekler var; komutlara tıklayınca düzenleyicide açılırlar, orada Çalıştır'a basman yeter. Hadi hemen dene.

Bölümler

#Bölümİçerik
2Kaplumbağanın anladığı komutlarYürüten, döndüren, çizdiren komutlar; A'dan Z'ye
3Çizim, boyama ve tuval komutlarıKalem, boya, tuval, hız, yazı, giysi; birden çok kaplumbağa
4Yinelemekte fayda varScala'ya Giriş kılavuzuna nasıl devam edilir
5Genel yazılım komutlarıyaz, satıryaz, satıroku, belirt, gerekli
6Her değerin bir Türü varTürkçe türler ve İngilizce karşılıkları
7İlerledikçe faydalı olacak türlerKuraldışılar, çizim türleri, ay, tuvalAlanı
8Son sözSevgiler, saygılar ve başarılar

Nereden devam edelim?

  • Hemen oynayarak öğrenmek için Kojo ile öğren sayfasındaki örneklere en baştan başlayarak bak. Masaüstü Koco'da ayrıca Araçlar menüsündeki Yeni Başlayanlar İçin Alıştırmalar, Komut Paleti ve Kaplumbağa Yöneticisi var.
  • Scala'ya Giriş kılavuzunu okuyarak da bilgini epey artırabilirsin. Skala diye oku, olur mu?
  • Daha sonra Benzetim savı sayfasındaki yazılımlara da göz at.
  • Kojo'yla bilgisayar programlamayı öğrenmeye İnternet'ten devam edebilirsin: Kojo Kılavuzu (İngilizce). Google tercümanla kolaylıkla Türkçe'ye çevirebilirsin.
Turuncu masaüstü rozeti taşıyan komutlar yalnız masaüstü Koco'da var; rozetin yanında varsa ikojo'daki karşılığı yazar. Ayrıntı için Farklar sayfasına bak. İkinci bir fark: masaüstünde konum gibi bilgi veren bir komutun değeri çıktı gözünde kendiliğinden görünür, tarayıcıda görmek için satıryaz(konum) yazmak gerekir.

2Kaplumbağanın anladığı komutlar

Kaplumbağamız yürürken çizgi çizip, boyama yapar. Onu yürüten ve yürürken çizim yaptıran komutları aşağıda A'dan Z'ye sıraladık. Her komut için kısa bir açıklama ve örnekler verdik. Tablodaki komutlara tıklayınca düzenleyicide açılırlar. Ama önce şu komutları bilmekte fayda var:

KomutAçıklamaÖrnekler
gizleKaplumbağayı gizle. Kaplumbağacık görünmese de çizim yapmaya devam eder.(aşağıdaki ilk örnek)
gösterKaplumbağayı göster
kalemiİndirKalemi indir ve çizim yapmaya devam et. Örnek aşağıda.
kalemiKaldırKalemi kaldır ki bundan sonra hareket ederken çizim yapma.(aşağıdaki ikinci örnek)
silTuvali temizler ve kaplumbağayı başlangıç noktasına döndürür
silipSaklaTuvali temizler, kaplumbağayı başlangıç noktasına döndürür ve gizler. Diğer adı 'silVeSakla' (ikojo'da bu ad var)silVeSakla
yinele(3) {
    gizle()
    ileri(100)
    göster()
    dön(120)
    ileri(100)
}
ileri
kalemiKaldır()
ileri
kalemiİndir()
ileri

Başlangıçta kalem inik. Onun için yürürken çizim yapacak. Üstteki ve alttaki komutları istediğin sırada çalıştırabilirsin. Tıklaman yeter.

KomutAçıklamaÖrnekler
dön(120, 100)Yarıçapı 100 olan bir yay çizerek saat yönünün tersine 120 derece döner
evEve yani x=0, y=0 noktasına dön ve doğrultuyu kuzeye çevireksenleriGöster eksenleriGizle
geri(50)50 adım geriye gidergeri ileri(20)
ileri(100)100 adım ilerlerileri geri(20)
ilerle(-200, -100)Tuvalde x=-200, y=-100 noktasına ilerleızgarayıGöster ızgarayıGizle
sağ(60, 100)Sağa doğru 60 derecelik bir yay çiz. Yarıçapı 100 uzunluğunda olan bir çemberin yayı olsun
sol(120, 50)Sola doğru 120 derecelik bir yay çiz. Yarıçapı 50 uzunluğunda olan bir çemberin yayı olsun
yay(100, -135)dön komutu gibi ama önce yarıçapı giriyoruz sonra yayın açısını

Yönünü belirleyen ve yerini değiştiren ama çizim yapmayan komutlar (A'dan Z'ye sıralı):

KomutAçıklamaÖrnekler
atla(200, 100)Çizim yapmadan x=200, y=100 konumuna atlaatla(0, 0) atla(-100, -200)
açıyaDön(210)Doğrultunu 210 açısına çevirkuzey açıyaDön(-45)
batıDoğrultunu batıya çevir. Benzer komutlar yandadoğu güney kuzey
doğuDoğrultunu doğuya çevir. Benzer komutlar yandabatı güney kuzey
dön(30)Saat yönünün tersine doğru 30 derece döner. Eksi girersen saat yönünde döner
güneyDoğrultunu güneye çevir. Benzer komutlar yandabatı doğu kuzey
konumuDeğiştir(40, 30)Doğrultuyu değiştirmeden 40 sağa, 30 yukarı gitkonumuDeğiştir(-50, -50)
konumuKur(150, 100)Doğrultuyu değiştirmeden x=150, y=100 konumuna git
konumVeYönüBelleğeYazŞu anda bulunduğu konumu ve doğrultuyu belleğe yaz
konumVeYönüGeriYükleBellekteki konuma git ve yine bellekteki doğrultuya dön. Eğer belleğe konum ve yön yazılı değilse hata verir: 'java.lang.IllegalStateException: No saved Position and Heading to restore.' Yani bellekte bilgi yok henüz diyor.
kuzeyDoğrultunu kuzeye çevir. Benzer komutlar yandabatı doğu güney
noktayaDön(40, 60)Doğrultunu koordinatları verilen (x, y) noktasına çevir
noktayaGit(0, -100)Doğrultunu x=0, y=-100 konumuna çevir ve o noktaya kadar ilerle
noktayaGit(Nokta(40, 30))Yukarıdaki komutu böyle de çağırabiliriz. Programlama yaparken faydalı olur
sağSağa döner. Yani saat yönünde 90 derece döner
sağ(60)Sağa doğru 60 derece dönersağ(10) sağ(45)
solSola döner. Yani saat yönünün tersinde 90 derece döner
sol(65)Sola doğru 65 derece dönsol(10) sol(45)
zıpla()25 adım öteye zıpla
zıpla(100)100 adım öteye zıpla

Basit çizim komutları:

KomutAçıklamaÖrnekler
daire(20)Yarıçapı 20 olan bir daire çiz.üçgen(100) kare(100) nokta(100)
kare(30)Kenar uzunluğu 30 olan bir kare çizkare()
nokta(30)30 kalınlığında bir kalemle bir nokta çizzıpla; nokta(10) ileri(100); nokta
üçgen(30)Kenar uzunluğu 30 olan bir üçgen çiz

Şimdilik son bir örnek daha görelim. Biraz daha uzun. Ama sakın irkilme. Bunun çoğu bölümün başındaki ilk örnekle aynı. yinele(3) döngüsünü aldık ve iki döngü içinde tekrar kullandık:

sil
canlandırmaHızınıKur(0) // anında çiz: kare kare canlandırma yok
// daha önce kullandığımız hızıKur(hız) komutuna benziyor,
// ama daha hassas ayar yapmamıza yarıyor. Sayı büyüdükçe yavaşlıyor, yani
// bu iki komut ters çalışıyor. Girdi 100 ADIMLIK yolun süresi; bekleme
// uzaklıkla ölçekleniyor, yani ileri(50) yarısını, ileri(200) iki katını
// bekliyor. Hız tarifleri ve 100 adımın karşılık gelen süreleri şöyle:
//   çokHızlı: 0  <- SIFIR. Canlandırma büsbütün kapanır, çizim anında biter
//   hızlı:    10
//   orta:     100
//   yavaş:    1000 (varsayılan -- hiç hız vermezsen kaplumbağa böyle gider)
// 0 ile 1 arasındaki fark büyük: 0 canlandırmayı kapatıyor, 1 ise hâlâ
// canlandırıyor -- ve canlandırılan her hareket en az bir ekran karesi
// (~16 ms) yiyor. Aşağıdaki çizimde 840 ileri komutu var ve hepsi kısa
// (20 ya da 100 adım), yani 1, 2 ve 10 hesaplanan beklemeyi bir karenin
// altında bırakıyor: üçü de ~15 saniye sürüyor, 0 ile ~1 saniye.
// Eksi (sıfırdan küçük) değer VERME: kabul edilmiyor, hata alırsın.
yaklaş(0.2)
kalemKalınlığınıKur(20)
yinele(12) {
    sağ(30)
    yinele(10) {
        ileri(20)
        yinele(3) {  // gerisi ilk örnekle aynı
            ileri(100)
            dön(120)
            ileri(100)
        }
    }
}

ikojo'da yaklaş(0.2) yerine yaklaşXY(0.2, 0.2, 0, 0) yaz.

3Çizim, boyama ve tuval komutları

Bazı komutlar kaplumbağanın nasıl çizim ve boyama yapacağını belirliyor. Örneğin:

KomutAçıklamaÖrnekler
biçimleriBelleğeYazKurulu biçim ayarlarını belleğe yaz: kalem rengi, kalınlığı ve yazısı, inik mi, kalkık mı ve boyama rengi(aşağıdaki ilk örnek)
biçimleriGeriYükleBir önceki komutla kaydedilen biçim ayarlarını geri yükler
kalemKalınlığınıKur(5)Başlangıçta 2 kalınlığıyla çizer.(ikinci örnek)
kalemRenginiKur(mavi)Kırmızı yerine mavi kalemle çizboyamaRenginiKur(yeşil); üçgen()
boyamaRenginiKur(mavi)Şekilleri maviye boya. Kenarların rengi kalemRenginiKur komutuyla değişir.(üçüncü örnek ve devamı)
silVeSakla
yaklaş(3)
ileri; sağ
biçimleriBelleğeYaz()
kalemKalınlığınıKur(10)
kalemRenginiKur(mavi)
ileri; sağ
biçimleriGeriYükle()
ileri; sağ
sil()
kalemKalınlığınıKur(10)
üçgen()
kalemKalınlığınıKur(1)
ileri
üçgen()
silVeSakla
boyamaRenginiKur(mavi)
kare(40)
ileri(40)
boyamaRenginiKur(yeşil)
kare(40)

Türkçe'ye çevirdiğimiz temel renkler doğrudan adlarıyla kullanılabilir; beyazla renksiz'in farkına dikkat!

silVeSakla
hızıKur(hızlı)
yaklaş(0.5, 240, 160)
artalanıKur(Renk(107, 4, 189))
kalemRenginiKur(renksiz)
dez renkDizisi = Dizi(
  sarı, yeşil, pembe, kahverengi,
  siyah, gri, koyuGri, açıkGri,
  renksiz, beyaz, kırmızı, turuncu,
  mavi, mor, morumsu, camgöbeği
)
//beyazla renksiz'in farkına dikkat!

yineleDizinli(renkDizisi.boyu) { i =>
  boyamaRenginiKur(renkDizisi(i-1))
  kare(100); ileri(100)
  eğer(i % 4 == 0)
     konumuKur(100 * i / 4, 0)
}

Türkçe'ye çevirdiğimiz renklerin hepsini Renkler altında topladık. Henüz Türkçeleştiremediğimiz renkler de var; onlar İngilizce adlarıyla renkler altında:

yineleİçin(Dizin(
    Renkler.açıkAltınbaşakSarısı,
    Renkler.koyuDenizYeşili,
    Renkler.gökMavisi,
    Renkler.haki)
) { renk =>
    boyamaRenginiKur(renk)
    kare(100); ileri(100)
}
konumuKur(500, 0)
// Henüz Türkçeleştiremediğimiz
// renkler de var.
// İşte birkaç örnek:
yineleİçin(Dizin(
    renkler.aliceBlue,
    renkler.hotpink,
    renkler.darkTurquoise,
    renkler.yellowGreen)
) { renk =>
    boyamaRenginiKur(renk)
    kare(100); ileri(100)
}

Masaüstü düzenleyicisinde diğer renkleri görmek istersen boş bir satıra Renkler. yazdıktan sonra Kontrol tuşunu basılı tutup boşluk tuşuna basıver; adı a harfiyle başlayan renkleri bulmak için Renkler.a yazıp Kontrol-Boşluk. İngilizce renkler de renkler. altında. Tam liste için Koco Sözlüğü'ne bak.

Tuvalle ilgili komutlar

KomutAçıklamaÖrnekler
canlandırmaHızınıKur(10)100 adımı atması 10 milisaniye alsın. Başlangıçta 1000 milisaniye aldığı için 100 kat hızlanır!
eksenleriGizle()X ve Y eksenlerini saklar
eksenleriGöster()X ve Y eksenlerini gösterir
ızgarayıGizle()Izgarayı gizler. Bir başka adı da grid.gridiGizle()
ızgarayıGöster()Izgarayı çizergridiGöster()
hızıKur(hızlı)canlandırmaHızınıKur komutunun basit hali(aşağıdaki hız örneği)
ışınlarıAçDört yöne ışın tut. Öne doğru olan uzun olsun
ışınlarıKapatIşınları söndür
tuvaleYaz("merhaba dünya!")Yazı komutunun uzun adı. Oradaki örneğe de bakyazı(Dizi(1, 2, 3).yazıya)
tuvaliKaydır(100, 50)Tuvali kaydırırüçgen(); tuvaliKaydır(-100, -50)
tuvaliDöndür(45)Tuvali döndürürüçgen(); tuvaliDöndür(-45)
yaklaş(3.0)Tuvale verilen oranda yaklaşarak çizimleri daha büyük göster. ikojo'da: yaklaşXY(3, 3, 0, 0)sil(); üçgen(); yaklaş(2, 100, 50) yaklaş(0.4)
yaklaş(2.0, 200, 50)x=200, y=50 konumunu merkez alarak yaklaş ya da uzaklaşyaklaşmayıSil yaklaş(1.0, 0, 0)
yaklaşmayaİzinVerme()Fareyle yaklaşıp uzaklaşmayı kapatır
yaklaşmayıSil()Yaklaşmayı sıfırlar
yazı(Aralık(1, 200, 7).yazıya)tuvaleYaz komutunun kısa adı. Durduğu konumun hemen sağına verilen yazıyı yazar. Masaüstünde girdi yazı değilse yazıya çevrilir; ikojo'da .yazıya gerekir.(aşağıdaki yazıyüzü örnekleri)
yazıBoyunuKur(24)Başlangıçta 18 boyunda yazar.(aşağıdaki yazı boyu örneği)
yazıyüzleriSistemdeki yazıyüzlerinin listesi
yazıYüzünüKur(yazıyüzü("Times New Roman", 36))Kaplumbağanın yazısının görünüşünü değiştirir

Hız örneği:

sil
konumuKur(100, 0)
hızıKur(yavaş)
daire(); durakla(0.5)
hızıKur(orta)
daire(50); durakla(0.5)
hızıKur(hızlı)
daire(100); durakla(0.5)
hızıKur(çokHızlı)
yinele(50) {
    daire(200)
    kalemRenginiKur(rastgeleRenk)
    konumuDeğiştir(3, 0)
}

Yazı boyu örneği:

silVeSakla
eksenleriGöster
ızgarayıGöster
zıpla(4)
yazı("1234")
sol; zıpla(50); sağ
// biraz küçültelim:
yazıBoyunuKur(10)
yazı("1234")
yaklaş(4.0, 0, 0)

Yazıyüzleri (yalnız masaüstünde; tarayıcıda sistem yazıyüzlerine erişim yok):

silVeSakla()
kalemRenginiKur(koyuGri)
canlandırmaHızınıKur(10)
kalemiKaldır()
noktayaGit(-300, -200)
açıyaDön(90)
kalemiİndir()
yazı(s"${yazıyüzleri.boyu} tane yazıyüzü var")
yazıyüzleri.ikileSırayla.herbiriİçin {
    durum(adı, sırası) =>
        zıpla()
        yazıYüzünüKur(yazıyüzü(adı, 18))
        yazı(f"$sırası%-3d: \t $adı")
}
yazıyüzleri.ikileSırayla.herbiriİçin(satıryaz)
satıryaz("Kaplumbağa bütün yazıyüzlerini" ++
    " yazabilmek için\nkuzeye" ++
    s" doğru epey yol aldı: y=${konum.y}")
Editörde aç →masaüstüikojo'da yok: (masaüstü)
// buna her tıklayışında
// tuval bir sayfa yukarı kayar
tuvaliKaydır(0, tuvalAlanı.boyu)
//bu da aşağı dönmek için:
// tuvaliKaydır(0, -tuvalAlanı.boyu)
dez yy = yazıyüzleri(127)
satıryaz(s"Sistemde ${yazıyüzleri.boyu} tane yazı yüzü var. Birinin adı: $yy.")
satıryaz("Onunla tuvale birşeyler yazalım:")
silVeSakla
kalemRenginiKur(mor)
yazıYüzünüKur(yazıyüzü(yy,18))
yazı("Yazma denemesi yapalım...")
Editörde aç →masaüstüikojo'da yok: (masaüstü)

Bilgi veren komutlar

Bu komutların değerini masaüstünde çıktı gözü kendiliğinden gösterir; tarayıcıda satıryaz içine al.

KomutAçıklamaÖrnekler
satıryaz(canlandırmaHızı)Kaplumbağanın 100 adım atması kaç milisaniye alır? Onu bildir. Başlangıçta 1000 milisaniye sürer. Örnekte de gördüğümüz gibi hızlandırılabilir.(aşağıdaki süre örneği)
satıryaz(doğrultu)Şu anda baktığımız doğrultuyu açı olarak çıktıyla bildirir. 180 sola bakıyor demek. 270 de aşağıya
satıryaz(kalemİnikMi)Bu bilgi programlama yaparken faydalı olabilirkalemiİndir kalemiKaldır
satıryaz(konum)Şu anki konumu bildir
sil
canlandırmaHızınıKur(100)
kalemKalınlığınıKur(10)
boyamaRenginiKur(mavi)
den say = 1
dez başlangıçAnı = buAn
yinele(8) {
    ileri(100)
    eğer(say%4 == 0) ileri(100)
    yoksa sağ
    say = say + 1
}
yinele(2) {
    sol
    ileri(100)
}
dez süre = yuvarla(
  (buAn - başlangıçAnı) / 1000.0,
1)
satıryaz(s"Çizim $süre saniye sürdü")

ikojo'da buAn yerine buSaniye var (saniye cinsinden; / 1000.0 bölmesini kaldır).

Kaplumbağanın görünüşünü değiştiren komutlar

Bu komutlar (giysiler, Görünüş) yalnız masaüstü Koco'da var.

KomutAçıklamaÖrnekler
birsonrakiGiysiKurulu giysilerden bir sonrakini giy. Sonuncuyu giymişse en baştakine döner. Tek giysi varsa hiç birşey yapmaz(aşağıdaki ilk giysi örneği)
giysiKur(Görünüş.araba)Kaplumbağamızı tamamen değiştirmek de mümkün.
giysileriKur(Görünüş.yarasa1, Görünüş.yarasa2)Kaplumbağanın bir dizi giysisi olsun ki giysisini kolaylıkla değiştirebilelim.(ikinci giysi örneği)
giysiyiBüyült(2.0)Küçültmek için de 0.5 dene.
görünmezgizle komutuyla eş: kaplumbağayı gizler
görünürgöster komutuyla eş: gizliyse, kaplumbağayı gösterir
sil
durakla(0.5)
giysileriKur(Görünüş.araba,
  Görünüş.yarasa1,
  Görünüş.yarasa2)
durakla(0.5)
birsonrakiGiysi()
durakla(0.5)
birsonrakiGiysi()
durakla(0.5)
birsonrakiGiysi()
durakla(0.5)
silVeSakla
kalemRenginiKur(renksiz)
göster
giysileriKur(
  Görünüş.yarasa1,
  Görünüş.yarasa2)
yinele(20) {
    durakla(0.1)
    atla(konum.x + 10,
         konum.y + 5)
    birsonrakiGiysi()
}

Birden çok kaplumbağa

Kaplumbağamız bir yazılım nesnesi olduğu için komutlarını bir nesnenin yöntemi olarak da çağırabiliriz. Ama hangi nesne? Aşağıdaki ilk satıra bak.

Scala ve Kojo'daki herşey bir yazılım nesnesi ve bunlara bizim kaplumbağamız da dahil! Adı aşağıda. Hatta bir kaplumbağa ile yetinmek zorunda değiliz. Birkaç tane kaplumbağa olsa daha da çok çizim yapabilir, hatta birbirleriyle etkileşime sokabiliriz. Yeni kaplumbağalar oluşturmak ve onlara çizim yaptırmak için aşağıdaki komutlara bakıver (masaüstünde Örnekler menüsünün Çoğul Kaplumbağa adlı alt menüsündeki örnek yazılımcıklara bakmayı da unutma!).

KomutAçıklamaÖrnekler
kaplumbağaKaplumbağamızın nesne adı bu.kaplumbağa.ileri(100) kaplumbağa.ev
yeniKaplumbağa(100, 100)x=100 y=100 noktasında yeni bir kaplumbağa canlandırır.dez k = yeniKaplumbağa(50, 50) k.ileri(50)
sil
dez yk2 = yeniKaplumbağa(0, 100)
yk2.giysiKur(Görünüş.araba)
yk2.geri(180)
// iki kat hızlandıralım:
yk2.canlandırmaHızınıKur(500)
yk2.sağ()
yk2.ileri(300)
// ilki hala yavaş
sağ; ileri(300)

Resim komutları

Kaplumbağa çizerek ilerler; resimler ise önce kurulur, sonra çizilir. Dönüştürücüler * ile zincirlenir, -> ile resme uygulanır. Aşağıdaki komutların her birine tıklayınca düzenleyicide çalışan bir gösteri açılır.

KomutAçıklama
döndürResmi saat yönünün tersine verilen açı kadar döndürür.
büyütResmi verilen oranda büyütür. 1'den küçük oran küçültür.
götürResmi verilen kadar öteler (taşır).
kalemRengiResmin çizgi rengini kurar.
kalemBoyuResmin çizgi kalınlığını kurar.
saydamlıkResmi yarı saydam yapar: 0 görünmez, 1 tümüyle donuk.
solukResmi üstten aşağı verilen piksel boyunca söndürür, altını çizmez. saydamlık tümünü eşit soldurur; bu ise geçiş verir.
boyaRengiResmin içini verilen renkle boyar.
Resim.dikdörtgenVerilen en ve boyda bir dikdörtgen resmi.
Resim.daireVerilen yarıçapta bir çember resmi.
Resim.elipsVerilen yarıçaplarda bir elips resmi.
Resim.yatayVerilen uzunlukta yatay bir çizgi resmi.
Resim.dikeyVerilen uzunlukta dikey bir çizgi resmi.
Resim.yazıYazıdan bir resim yapar.
Resim.diziYatayResimleri yan yana dizer.
Resim.diziDikeyResimleri alt alta dizer.
Resim.diziResimleri üst üste bindirir.
Resim.yatayBoşlukYan yana dizilen resimlerin arasına boşluk koyar.
Resim.dikeyBoşlukAlt alta dizilen resimlerin arasına boşluk koyar.
kaydırÇizilmiş bir resmi bulunduğu yerden verilen kadar kaydırır.
yansıtXÇizilmiş resmi X ekseninde yansıtır (baş aşağı çevirir).
yansıtYÇizilmiş resmi Y ekseninde yansıtır (aynadaki gibi).
döndürMerkezliResmi verilen nokta çevresinde döndürür. Hem dönüştürücü hem yöntem olarak kullanılır.
çizMerkezdeResmi tuvalin ortasına çizer.
çizMerkezdeYazıTuvalin ortasına yazı yazar.
resimleriSilÇizilmiş bütün resimleri siler.
uzaklıkİki kaplumbağa arasındaki uzaklığı verir.

ikojo'da yok: bulanık eksenler çizVeSakla merkezeTaşı büyütXY Bunlar masaüstü Koco'da var; tarayıcı sürümüne henüz eklenmediler.

4Yinelemekte fayda var

Scala'ya Giriş kılavuzuna da bir bak. Orada pek çok küçücük örnek var. Onları olduğu gibi çalıştırmak, sonra istediğin gibi değiştirip tekrar çalıştırmak çok kolay.

Yalnız kılavuz epey uzun. Giriş dahil 19 bölümden oluşuyor. Ama hepsini sırayla okuman gerekmez. İlk iki bölümü okuduktan sonra sona yakın olan Çizim ve Oyun bölümüne bak. Onlardan çok şey öğreneceksin.

Ondan sonra sırayla hepsini oku. Bu sayede sonradan anlayacaksın ki bilgisayar programlamayı epey öğrenivermişsin. Ondan sonrası sana ve hevesine kalmış.

Bu kılavuzun kalan bölümlerinde de sık kullanılan genel komutlar ve Koco'nun Türkçe türleri var. İngilizce adları merak ettiğinde Koco Sözlüğü hep yanında.

5Genel yazılım komutları

Bazı basit komutlar çok faydalıdır. Sık kullanılanları burada görelim.

dez gülerYüz: Yazı = "☺"
dez girdi = satıroku("Adınız nedir? ")
satıryaz("Merhaba " + girdi + s" $gülerYüz!" + " Ne var ne yok?")
belirt(1 < 2, "bir genelde ikiden küçük olmalı")
// 1 yerine 3 yazıp tekrar çalıştır ki belirtmek istediğimiz durum yanlış olunca ne olduğunu görelim
durum sınıf Kişi(ad: Yazı, yaş: Sayı) {
    gerekli(yaş > 0 && yaş < 1000, "kişinin yaşı yanlış girildi")
    satıryaz(s"$ad $yaş yaşında")
}
dez k1 = Kişi("Mustafa Kemal", 143)
 // bir de 1 yerine -1 girip çalıştır
dez k2 = Kişi("Garip Durum", 1)

gerekli ikojo'da yok; yerine Scala'nın kendi require komutu aynı işi görür. Masaüstünde bu örnek çıktıyıSil ile de başlıyordu; ikojo her çalıştırmada çıktıyı zaten temizler.

İngilizce karşılıkları da burada:

Daha çok komut var, inşallah bir ara hepsini ekleriz buraya. ☺

6Her değerin bir Türü var

Burada ilk sütunda Türkçe türleri sıraladık. İkinci sütunda İngilizce karşılıkları var. Scala'daki her yazılım parçacığı bir nesne. Her nesnenin de bir türü var. Türlerin hepsi de birbirine bağlı. Bunu bir çizimle görmekte fayda var. İngilizcesini şu İnternet sayfasında görebilirsin: Yönlü tür çizgesi (directed graph of Scala types). Türlerin birliği önemli bir konu. Hakkında daha çok bilgi: Scala turundan sayfa.

Temel türler

TürkçeİngilizceÖrnekAçıklama
NesneObject(aşağıdaki ilk örnek)Herşey bir Nesne olabilir mi? Evet! Java nesnelerinin temel türü
BirimUnit(ikinci örnek)İşlevsel bir çıktısı olmayan yöntemler ve komutların çıktı türü
HerAnydez h: Her = 1Her Scala nesnesinin temel türü. Kendi temeli de Nesne. Yönlü tür çizgesinin başlama noktası
HerDeğerAnyValdez h: HerDeğer = 2Her Scala değerinin temel türü. Kendi temeli de Her.
HerGönderAnyRefdez h: HerGönder = Diz(1, 2, 3)İşlevlerin, karmaşık ve çoğul içeriği olan türlerin temeli. Ref yani İngilizce 'Reference' sözcüğünü gönderge olarak çevirdik. Gösteren de diyebiliriz. İngilizce 'pointer' sözcüğü de benzer bir kavramdır.
HiçNothingdez y: Hiç = ???En özel ve hiç nesnesi olmayan tek tür. Onun için de bu örneği çalıştırınca hata verir. Yönlü tür çizgesinin bitiş noktası yani en özel tür bu nesnesiz tek türdür.
YokNulldez y: Yok = yokJava'dan kalma. Hiç kullanma!
İkilBoolean(üçüncü örnek)En sade ve basit türlerden biri. Sadece iki değeri var. Ama çok da faydalı
SeçimBoolean(dördüncü örnek)O kadar temel bir tür ki Türkçeye çevirirken iki isim verdik ona!
LokmaByte(beşinci örnek)Bir Lokma aslında sekiz parçadan oluşuyor. O küçük parçaların İngilizce adı 'Bit.' Her parça aslında bir İkil ya da bir Seçim
KısaShortsatıryaz(Kısa.Enİrisi)Eğer küçük sayılarlaysa işimiz, o zaman bu tür yeter bize
SayıIntsatıryaz(Sayı.Enİrisi)Genelde kullandığımız sayma sayılarının türü budur
UzunLongsatıryaz(Uzun.Enİrisi)Eğer epey büyük sayılar gerekiyorsa, Sayı türü yerine bunu kullanırız
İriSayıBigInt(altıncı örnek)Sayıların sınırı olmasın dersek, bu türü kullanabiliriz. Ama hem daha çok bellek tutar hem de daha uzun sürer çalışması
KesirDoublesatıryaz(Kesir.Enİrisi)Kesirli sayıların türü. Epey büyüktür en irileri. İki lokma bellek tutar her kesir sayı
UfakKesirFloatsatıryaz(UfakKesir.Enİrisi)Kesirli sayıların tek lokma yer tutanı
İriKesirBigDecimal(yedinci örnek)Kesirli sayıların en hassası (ama çok lokma yer tutar!)
HarfChar(sekizinci örnek)Char ve Character diye iki tür var. Bizim Harf ikisini de kapsıyor
YazıStringsatıryaz("*-*" * 5)Çok işe yarar bu tür. Scala'ya Giriş kılavuzunda kendi bölümü ve pek çok örneği var
EsnekYazıStringBuilder(dokuzuncu örnek)Bu da biraz daha esnek olanı. Şuradan: collection.mutable
dez n: Nesne = yeni Nesne()
satıryaz(n.aynıMı(n))
// ekrana yazmak bir yan etki
// Yani işlevsel bir çıktı değil
tanım söyle(adın: Yazı): Birim =
    yaz(s"merhaba $adın")

tanım satırBaşı(): Birim =
    satıryaz("")

söyle("Ayşe")
satırBaşı
söyle("Ali")

// Bu da faydasız bir değişmez
dez b: Birim = ()
b // birim etki yok etki
dez çatal1: İkil = (doğru || yanlış)
dez çatal2: Seçim = (doğru && yanlış)
satıryaz(çatal1, çatal2)
için(s <- Diz(doğru, yanlış, doğru))
    yaz(eğer(s) "Doğru "
    yoksa "Yanlış ")
dez b1: Lokma = 1 << 6
yaz(Lokma.EnUfağı, Lokma.Enİrisi)
// Hata verir "type mismatch":
// dez b2: Lokma = 1 << 7
satıryaz(Uzun.Enİrisi + 2)
dez i = İriSayı(Uzun.Enİrisi)
satıryaz(i * i * i)
dez ufak = 1.000001
dez payda = 10000000.0
satıryaz(ufak / payda)
dez x = İriKesir(ufak)
satıryaz(x / payda)
dez h = '☺'
dez j = (h + 1).harfe
yaz((h - 1).harfe, h, j)
dez ey = yeni EsnekYazı("Merhaba ")
dez ad = satıroku("Adın ne?")
ey.ekle(ad)
ey.ekle("! Ne var ne yok?")
satıryaz(ey)

Koleksiyonlar ve diğerleri

TürkçeİngilizceAçıklama
BelkiOption
BiriSome
HiçbiriNoneAslında aynı adlı yegane bir değişmez değerin türü
AralıkRange
Dizcollection.Seq
DiziSeq
DizikArray
DizimArrayBu Dizik'in eskisi
EsnekDizimArrayBuffereskisi. collection.mutable'dan
EsnekDizikArrayBuffercollection.mutable'dan
DizinList
SıralıDiziIndexedSeq
EşlekMapcollection.immutable.Map
EşlemMapcollection.mutable.Map
KümeSet
MiskinDizinLazyList
KuyrukQueuecollection.mutable
İkiUçluKuyrukArrayDequeiki ucundan da koyulup alınır (C++ deque)
ÖncelikSırasıPriorityQueuecollection.mutable
ÖncelikKuyruğuPriorityQueueÖncelikSırası ile aynı tür
YığınStackcollection.mutable
YöneyVectorcollection.immutable
YineleyiciIterator
GelecekFuturescala.concurrent
İşletimBağlamıExecutionContextscala.concurrent
SayılarVector[Int](aşağıdaki örnek)
BoyaPaintjava.awt'den
RenkColorjava.awt'den
YazıyüzüFontjava.awt
HızSpeednet.kogics.kojo.core'dan
NoktaPointnet.kogics.kojo.core'dan
DikdörtgenRectanglenet.kogics.kojo.core'dan
Üçgen masaüstüTriangle2Dio.github.jdiemke.triangulation'dan
Yöney2BVector2Dnet.kogics.kojo.util'den
ResimPicture
BuAnNowNow adında bir tür yok, ama BuAn adında bir durum sınıfımız yani türümüz var: BuAn().yazıya. ikojo'da buSaniye
Takvim masaüstüCalendarjava.util
Tarih masaüstüDatejava.util
SaatDilimi masaüstüTimeZonejava.util
BölümselİşlevPartialFunction
İşlev1Function1
İşlev2Function2
İşlev3Function3
Sayılar(0, 1, 2, 3)
    .işle(s => 10 * s * s)
    .herbiriİçin(yaz)

Bu tablolardaki türlerin hangilerinin ikojo'da bulunduğunu görmek için Koco Sözlüğü'ne bak; tarayıcıda Java kütüphaneleri (java.awt, java.util) olmadığı için o türlerin bir kısmı yalnız masaüstünde var.

7İlerledikçe faydalı olacak türler

TürkçeİngilizceAçıklama
KuralDışıException
ÇalışmaSırasıKuralDışıRuntimeException
BaskınYazıyaYöntemiylebir tür özelliği (Nesneler ve Sınıflar bölümüne bak)
Eşsizlikbir tür özelliği
UzunlukBirimi masaüstüUnitLennet.kogics.kojo.core'dan
Biçim masaüstüShapejava.awt'den
GeoYolGeneralPathjava.awt.geom'dan
GeoNoktaVertexShapenet.kogics.kojo.core'dan
Grafik2B masaüstüGraphics2Dscala.swing'den
İmge masaüstüImagejava.awt.Image
İmgeİşlemi masaüstüImageOpnet.kogics.kojo.picture.ImageOp
Bellekteİmge masaüstüBufferedImagejava.awt.image'dan
Bellekteİmgeİşlemi masaüstüBufferedImageOpjava.awt.image'dan
ÇiniDünyası masaüstütilesnet.kogics.kojo.tiles
ÇiniXY masaüstüTileXYtiles'dan
BirSayfaKostüm masaüstüSpriteSheettiles'dan
Mp3ÇalarKMp3net.kogics.kojo.music'den
Canlandırma masaüstüAnimationnet.kogics.kojo'dan
BKK masaüstüURLBirörnek Kaynak Konumlayıcısı: java.net.URL'den (aşağıdaki örnek)
dez bkk = BKK(
  "https://upload.wikimedia.org/",
  "wikipedia/commons/thumb/a/a5/",
  "Flower_poster_2.jpg/",
  "330px-Flower_poster_2.jpg")
Resim.imge(bkk).veBüyüt(0.3).çiz
Editörde aç →masaüstüikojo'da yok: BKK

ikojo'da bir imgeyi adresinden doğrudan çizebilirsin: Resim.imge("https://.../330px-Flower_poster_2.jpg")Kojo ile öğren sayfasındaki resim örneklerine bak.

Kuraldışı durumlar ve hatalar

belirt(
  5 < 7,
  "ilk girdi ikinciden küçük olmalı")
// 5 yerine 8 yazıp tekrar çalıştır
durum sınıf Kişi(ad: Yazı, yaş: Sayı) {
  gerekli(yaş > 0 && yaş < 1000,
    "kişinin yaşı yanlış")
  satıryaz(s"$ad $yaş yaşında")
}
dez k1 = Kişi("Mustafa Kemal", 143)
 // bir de 1 yerine -1 girip çalıştır
dez k2 = Kişi("Garip Durum", 1)
// bazen ne istediğimizi biliriz
// ama nasıl olacağını bilemeyiz ya,
// o zaman böyle boş bir tanım
// yazmak faydalı olabilir
tanım deney1(girdi: Sayı) = ???
// bunu doğru yapıp tekrar çalıştır:
dez hazırsa = yanlış
eğer(hazırsa) deney1(42)

Tür eşi olmayan nesneler

Tür eşi olmayan nesneler de var. Onların yöntemleri çok işimize yarar:

TürkçeİngilizceAçıklama
ayUIarayüz'ün kısaltması: Swing düğmeleri, yazı girdileri, salındıraçlar. Yalnız masaüstünde; tarayıcıda karşılığı henüz yok. (aşağıdaki ilk örnek)
tuvalAlanıcanvasBoundstuval alanı hakkında faydalı bilgiler. ikojo'da adı tuvalSınırları. (ikinci örnek)
silVeSakla
dez ay_uzunluk = ay.Yazıgirdisi(60)
dez ay_renkler = ay.Salındıraç("mavi", "yeşil", "sarı")
Resim.arayüz(ay.Tanıt("Sayı ve Renk Seç:")).veGötür(-100,120).çiz
Resim.arayüz(ay_uzunluk).veGötür(-100, 100).çiz
Resim.arayüz(ay_renkler).veGötür(-100, 80).çiz
Resim.arayüz(ay.Düğme("Sayı ve Renk Seçimlerini Yaz"){
  satıryaz("=" * 10)
  satıryaz(s"Sayı: ${ay_uzunluk.değeri}")
  satıryaz(s"Renk: ${ay_renkler.değeri}")}
).veGötür(-100, 60).çiz
Editörde aç →masaüstüikojo'da yok: Düğme, Salındıraç, Tanıt, Yazıgirdisi, arayüz, ay, Resim.arayüz
dez solAltKöşe = Nokta(tuvalAlanı.x, tuvalAlanı.y)
dez sağAltKöşe = Nokta(tuvalAlanı.x + tuvalAlanı.eni, tuvalAlanı.y)
dez solÜstKöşe = Nokta(tuvalAlanı.x, tuvalAlanı.Y)
dez sağÜstKöşe = Nokta(tuvalAlanı.x + tuvalAlanı.eni, tuvalAlanı.Y)
dez hepsi = yeni Dikdörtgen(solAltKöşe, sağÜstKöşe)
yaz(hepsi)

ikojo'da aynı bilgi tuvalSınırları ile alınır:

dez ta = tuvalSınırları
satıryaz(s"sol alt: (${ta.x}, ${ta.y})  en: ${ta.width}  boy: ${ta.height}")

Şimdilik bu kadar. Devamı yarın.

8Son söz

Sevgiler, saygılar ve başarılar.

Şimdilik hoşçakal! Devam etmek için Scala'ya Giriş kılavuzuna, Kojo ile öğren örneklerine ya da Koco Sözlüğü'ne geçebilirsin. Masaüstü ile tarayıcı sürümü arasındaki farklar Farklar sayfasında.

Bu kılavuzun kaynağı masaüstü Koco'daki samples/tr/kojo-documentation.kojo öyküsüdür. Yeni bir sayfa eklemek masaüstünde de kolaydı: Page(name = ..., body = tPage(...)) ile bir sayfa tanımlayıp Story(...) listesine eklemek yetiyordu. Burada ise kilavuz/komutlar/ dizinine bir Markdown dosyası ekleyip python3 kilavuz/uret.py koşturmak yeter; nasıl yapıldığı kojojs-dev deposundaki README'de anlatılıyor.