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 |
|---|---|---|
| 2 | Kaplumbağanın anladığı komutlar | Yü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 |
| 4 | Yinelemekte fayda var | Scala'ya Giriş kılavuzuna nasıl devam edilir |
| 5 | Genel yazılım komutları | yaz, satıryaz, satıroku, belirt, gerekli |
| 6 | Her değerin bir Türü var | Türkçe türler ve İngilizce karşılıkları |
| 7 | İlerledikçe faydalı olacak türler | Kuraldışılar, çizim türleri, ay, tuvalAlanı |
| 8 | Son söz | Sevgiler, 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.
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:
| Komut | Açıklama | Örnekler |
|---|---|---|
gizle | Kaplumbağayı gizle. Kaplumbağacık görünmese de çizim yapmaya devam eder. | (aşağıdaki ilk örnek) |
göster | Kaplumbağayı göster | |
kalemiİndir | Kalemi indir ve çizim yapmaya devam et. Örnek aşağıda. | |
kalemiKaldır | Kalemi kaldır ki bundan sonra hareket ederken çizim yapma. | (aşağıdaki ikinci örnek) |
sil | Tuvali temizler ve kaplumbağayı başlangıç noktasına döndürür | |
silipSakla | Tuvali 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.
| Komut | Açıklama | Örnekler |
|---|---|---|
dön(120, 100) | Yarıçapı 100 olan bir yay çizerek saat yönünün tersine 120 derece döner | |
ev | Eve yani x=0, y=0 noktasına dön ve doğrultuyu kuzeye çevir | eksenleriGöster eksenleriGizle |
geri(50) | 50 adım geriye gider | geri ileri(20) |
ileri(100) | 100 adım ilerler | ileri 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ı):
| Komut | Açıklama | Örnekler |
|---|---|---|
atla(200, 100) | Çizim yapmadan x=200, y=100 konumuna atla | atla(0, 0) atla(-100, -200) |
açıyaDön(210) | Doğrultunu 210 açısına çevir | kuzey açıyaDön(-45) |
batı | Doğrultunu batıya çevir. Benzer komutlar yanda | doğu güney kuzey |
doğu | Doğrultunu doğuya çevir. Benzer komutlar yanda | batı 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üney | Doğrultunu güneye çevir. Benzer komutlar yanda | batı doğu kuzey |
konumuDeğiştir(40, 30) | Doğrultuyu değiştirmeden 40 sağa, 30 yukarı git | konumuDeğ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ükle | Bellekteki 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. | |
kuzey | Doğrultunu kuzeye çevir. Benzer komutlar yanda | batı 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öner | sağ(10) sağ(45) |
sol | Sola döner. Yani saat yönünün tersinde 90 derece döner | |
sol(65) | Sola doğru 65 derece dön | sol(10) sol(45) |
zıpla() | 25 adım öteye zıpla | |
zıpla(100) | 100 adım öteye zıpla |
Basit çizim komutları:
| Komut | Açı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 çiz | kare() |
nokta(30) | 30 kalınlığında bir kalemle bir nokta çiz | zı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:
| Komut | Açıklama | Örnekler |
|---|---|---|
biçimleriBelleğeYaz | Kurulu 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ükle | Bir ö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 çiz | boyamaRenginiKur(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
| Komut | Açı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ı çizer | gridiGö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ıKapat | Işınları söndür | |
tuvaleYaz("merhaba dünya!") | Yazı komutunun uzun adı. Oradaki örneğe de bak | yazı(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üzleri | Sistemdeki 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}")// 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...")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.
| Komut | Açı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ı olabilir | kalemiİ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.
| Komut | Açıklama | Örnekler |
|---|---|---|
birsonrakiGiysi | Kurulu 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ünmez | gizle komutuyla eş: kaplumbağayı gizler | |
görünür | gö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!).
| Komut | Açıklama | Örnekler |
|---|---|---|
kaplumbağa | Kaplumbağ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.
| Komut | Açıklama |
|---|---|
döndür | Resmi saat yönünün tersine verilen açı kadar döndürür. |
büyüt | Resmi verilen oranda büyütür. 1'den küçük oran küçültür. |
götür | Resmi verilen kadar öteler (taşır). |
kalemRengi | Resmin çizgi rengini kurar. |
kalemBoyu | Resmin çizgi kalınlığını kurar. |
saydamlık | Resmi yarı saydam yapar: 0 görünmez, 1 tümüyle donuk. |
soluk | Resmi ü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. |
boyaRengi | Resmin içini verilen renkle boyar. |
Resim.dikdörtgen | Verilen en ve boyda bir dikdörtgen resmi. |
Resim.daire | Verilen yarıçapta bir çember resmi. |
Resim.elips | Verilen yarıçaplarda bir elips resmi. |
Resim.yatay | Verilen uzunlukta yatay bir çizgi resmi. |
Resim.dikey | Verilen uzunlukta dikey bir çizgi resmi. |
Resim.yazı | Yazıdan bir resim yapar. |
Resim.diziYatay | Resimleri yan yana dizer. |
Resim.diziDikey | Resimleri alt alta dizer. |
Resim.dizi | Resimleri üst üste bindirir. |
Resim.yatayBoşluk | Yan yana dizilen resimlerin arasına boşluk koyar. |
Resim.dikeyBoşluk | Alt 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ürMerkezli | Resmi verilen nokta çevresinde döndürür. Hem dönüştürücü hem yöntem olarak kullanılır. |
çizMerkezde | Resmi 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.
| Komut | Örnekler | ||
|---|---|---|---|
yaz | yaz("Selam!") | yaz('a') | yaz(kaplumbağa) |
satıryaz | satıryaz("Merhaba!") | ||
satıroku | (aşağıdaki ilk örnek) | ||
belirt(belit, mesaj) | (ikinci örnek) | ||
gerekli(koşul, mesaj) | (üçüncü örnek) |
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:
| Türkçe | İngilizce |
|---|---|
yaz(nesne) | print(object) |
satıryaz(nesne) | println(object) |
satıroku(istem) | readln(prompt) |
belirt(belit, mesaj) | assert(assumption, message) |
gerekli(koşul, mesaj) | require(condition, message) |
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 | Örnek | Açıklama |
|---|---|---|---|
Nesne | Object | (aşağıdaki ilk örnek) | Herşey bir Nesne olabilir mi? Evet! Java nesnelerinin temel türü |
Birim | Unit | (ikinci örnek) | İşlevsel bir çıktısı olmayan yöntemler ve komutların çıktı türü |
Her | Any | dez h: Her = 1 | Her Scala nesnesinin temel türü. Kendi temeli de Nesne. Yönlü tür çizgesinin başlama noktası |
HerDeğer | AnyVal | dez h: HerDeğer = 2 | Her Scala değerinin temel türü. Kendi temeli de Her. |
HerGönder | AnyRef | dez 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ç | Nothing | dez 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. |
Yok | Null | dez y: Yok = yok | Java'dan kalma. Hiç kullanma! |
İkil | Boolean | (üçüncü örnek) | En sade ve basit türlerden biri. Sadece iki değeri var. Ama çok da faydalı |
Seçim | Boolean | (dördüncü örnek) | O kadar temel bir tür ki Türkçeye çevirirken iki isim verdik ona! |
Lokma | Byte | (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ısa | Short | satıryaz(Kısa.Enİrisi) | Eğer küçük sayılarlaysa işimiz, o zaman bu tür yeter bize |
Sayı | Int | satıryaz(Sayı.Enİrisi) | Genelde kullandığımız sayma sayılarının türü budur |
Uzun | Long | satı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ı |
Kesir | Double | satıryaz(Kesir.Enİrisi) | Kesirli sayıların türü. Epey büyüktür en irileri. İki lokma bellek tutar her kesir sayı |
UfakKesir | Float | satıryaz(UfakKesir.Enİrisi) | Kesirli sayıların tek lokma yer tutanı |
İriKesir | BigDecimal | (yedinci örnek) | Kesirli sayıların en hassası (ama çok lokma yer tutar!) |
Harf | Char | (sekizinci örnek) | Char ve Character diye iki tür var. Bizim Harf ikisini de kapsıyor |
Yazı | String | satı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 etkidez ç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 | İngilizce | Açıklama |
|---|---|---|
Belki | Option | |
Biri | Some | |
Hiçbiri | None | Aslında aynı adlı yegane bir değişmez değerin türü |
Aralık | Range | |
Diz | collection.Seq | |
Dizi | Seq | |
Dizik | Array | |
Dizim | Array | Bu Dizik'in eskisi |
EsnekDizim | ArrayBuffer | eskisi. collection.mutable'dan |
EsnekDizik | ArrayBuffer | collection.mutable'dan |
Dizin | List | |
SıralıDizi | IndexedSeq | |
Eşlek | Map | collection.immutable.Map |
Eşlem | Map | collection.mutable.Map |
Küme | Set | |
MiskinDizin | LazyList | |
Kuyruk | Queue | collection.mutable |
İkiUçluKuyruk | ArrayDeque | iki ucundan da koyulup alınır (C++ deque) |
ÖncelikSırası | PriorityQueue | collection.mutable |
ÖncelikKuyruğu | PriorityQueue | ÖncelikSırası ile aynı tür |
Yığın | Stack | collection.mutable |
Yöney | Vector | collection.immutable |
Yineleyici | Iterator | |
Gelecek | Future | scala.concurrent |
İşletimBağlamı | ExecutionContext | scala.concurrent |
Sayılar | Vector[Int] | (aşağıdaki örnek) |
Boya | Paint | java.awt'den |
Renk | Color | java.awt'den |
Yazıyüzü | Font | java.awt |
Hız | Speed | net.kogics.kojo.core'dan |
Nokta | Point | net.kogics.kojo.core'dan |
Dikdörtgen | Rectangle | net.kogics.kojo.core'dan |
Üçgen masaüstü | Triangle2D | io.github.jdiemke.triangulation'dan |
Yöney2B | Vector2D | net.kogics.kojo.util'den |
Resim | Picture | |
BuAn | Now | Now 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ü | Calendar | java.util |
Tarih masaüstü | Date | java.util |
SaatDilimi masaüstü | TimeZone | java.util |
Bölümselİşlev | PartialFunction | |
İşlev1 | Function1 | |
İşlev2 | Function2 | |
İşlev3 | Function3 |
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 | İngilizce | Açıklama |
|---|---|---|
KuralDışı | Exception | |
ÇalışmaSırasıKuralDışı | RuntimeException | |
BaskınYazıyaYöntemiyle | bir tür özelliği (Nesneler ve Sınıflar bölümüne bak) | |
Eşsizlik | bir tür özelliği | |
UzunlukBirimi masaüstü | UnitLen | net.kogics.kojo.core'dan |
Biçim masaüstü | Shape | java.awt'den |
GeoYol | GeneralPath | java.awt.geom'dan |
GeoNokta | VertexShape | net.kogics.kojo.core'dan |
Grafik2B masaüstü | Graphics2D | scala.swing'den |
İmge masaüstü | Image | java.awt.Image |
İmgeİşlemi masaüstü | ImageOp | net.kogics.kojo.picture.ImageOp |
Bellekteİmge masaüstü | BufferedImage | java.awt.image'dan |
Bellekteİmgeİşlemi masaüstü | BufferedImageOp | java.awt.image'dan |
ÇiniDünyası masaüstü | tiles | net.kogics.kojo.tiles |
ÇiniXY masaüstü | TileXY | tiles'dan |
BirSayfaKostüm masaüstü | SpriteSheet | tiles'dan |
Mp3Çalar | KMp3 | net.kogics.kojo.music'den |
Canlandırma masaüstü | Animation | net.kogics.kojo'dan |
BKK masaüstü | URL | Birö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
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 | İngilizce | Açıklama |
|---|---|---|
ay | UI | arayü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ı | canvasBounds | tuval 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).çizdez 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.
