iKoco, Koco'nun tarayıcıda çalışan sürümüdür: aynı Türkçe anahtar kelimeler, aynı kaplumbağa,
aynı Resim birimi. Ama masaüstü Koco bir Java/Swing uygulaması; bazı özellikleri
tarayıcıya henüz taşınmadı ya da taşınamaz. Kılavuzlarda turuncu masaüstü
rozeti taşıyan örnekler bu yüzden. Aşağıda her fark için ne yapılacağı yazıyor.
Masaüstünde yazılımcıklar bir yorumlayıcıda (REPL) art arda çalışır: bir örnekte tanımladığın dez n = … bir sonrakinde hatırlanır, yalın bir deyişin (1 + 2) değeri çıktı gözünde kendiliğinden görünür, çıktıyıSil ile çıktı temizlenir.
iKoco'da: her Çalıştır kodu baştan derler; önceki tanımlar hatırlanmaz, çıktı her seferinde temizlenir (çıktıyıSil() derlenir ama bir iş yapmaz -- gerek de yok). Bir değeri görmek için satıryaz(1 + 2) yaz. satıryaz(a, b) gibi çok girdili çağrılar (a,b) biçiminde tek sıralama olarak yazılır; yan yana istiyorsan satıryaz(s"$a $b").
#yükle ile dosya içe almakMasaüstünde // #yükle /samples/tr/oyku-tanimlari gibi bir yorum satırı başka bir betiği yazılımcığın başına ekler; büyük örnekler (Othello, Anagram, kılavuz öyküleri) böyle parçalara bölünmüştür.
iKoco'da: düzenleyicide tek dosya derlenir, #yükle yok. Parçaları tek betikte birleştir; ortak tanımları bir nesne içine koyup aynı dosyada tut. (Örnekler sayfasından açtığın betiklerde #yükle satırları sunucuda kendiliğinden açılır, o yüzden Othello ve Anagram gibi çok parçalı örnekler doğrudan çalışır.) Kaydettiğin betiğe verilen kalıcı adresi paylaşarak da yeniden kullanabilirsin.
ay, düğmeler, yazı girdileri)Masaüstünde ay.Düğme, ay.Yazıgirdisi, ay.Salındıraç, ay.Tanıt gibi Swing bileşenleri Resim.arayüz(…) ile tuvale konur; satıroku bir iletişim kutusu açar.
iKoco'da: Swing yok. Fare ve klavye olaylarıyla etkileşim kur: resim.fareyeTıklayınca { (x, y) => … }, fareyiSürükleyince, fareBasılınca; canlandır döngüsünde tuşBasılıMı(tuşlar.sol). Metin için Resim.yazı ve güncelle. satıroku tarayıcının soru kutusunu açar.
Masaüstünde notaÇal, müzikMp3üÇal, sesMp3üÇal, Mp3Çalar, vuruş/nota gibi komutlar JFugue/MP3 ile ses çalar.
iKoco'da: MP3 ve nota çalma var: sesMp3üÇal(Ses.vuruş), müzikMp3üÇal, müzikMp3üÇalDöngülü, müzikMp3üÇalıyorMu, ve Web Audio ile notaÇal(nota, süre) · notaÇalgısınıKur(Çalgı.…). Ses dosyaları Ses.… sabitlerinde. Mp3Çalar de var (yeniMp3Çalar ile kurulur, masaüstündeki gibi). Henüz olmayan tek şey JFugue partisyonu (MusicScore, müzikÇal); onun için parçayı tek tek notaÇal ile çal.
Story/Page)Masaüstünde Page(name = …, body = <body>…</body>) sayfalarından bir Story kurulur, stPlayStory ile sağ panelde HTML sayfalar hâlinde oynatılır; tıklanan kod örnekleri düzenleyiciye taşınır. Skala kılavuzu ve Kojo Belgeleri böyle öykülerdi.
iKoco'da: öykü anlatıcı yok. O iki öykü bu yardım sayfalarına dönüştürüldü: Skala ve Komutlar. Kod örnekleri "Editörde aç" bağlantısıyla (/?zrc=…) düzenleyicide açılır. Kendi öykünü anlatmak için şimdilik bir web sayfası yazıp örneklerine aynı biçimde bağlantı ver.
Masaüstünde Dosya, scala.io.Source, java.io ile diskten okuma/yazma; satıroku, sayıOku, kesirOku ile kullanıcıdan girdi alma vardır.
iKoco'da: tarayıcı diske erişemez; veriyi betiğin içine göm (bir Dizin ya da çok satırlı """…""" yazı olarak) ya da Resim.imge("https://…") gibi bir adresten yükle. satıroku tarayıcının soru kutusuyla çalışır; sayıOku/kesirOku yerine satıroku(…).sayıya.
Canlandırma, Geçiş)Masaüstünde Canlandırma, Geçiş, YumuşakGeçiş, canlandırmaDizisi, canlandırmaEşzamanlı ile bildirimsel (Transition) canlandırmalar kurulur.
iKoco'da: bu API yok. Aynı etkiyi canlandır { … } döngüsüyle elle kur: her karede konumu/açıyı biraz değiştir, resim.kondur(x, y), döndür, büyüt; durumu taşımak için canlandırmaDurumla(başlangıç) { d => … }. Bitince canlandırmayıDurdur().
ÇiniDünyası, BirSayfaKostüm)Masaüstünde Tiled ile çizilmiş haritalar ÇiniDünyası, ÇiniXY ve sprite sayfaları (BirSayfaKostüm) ile oyun sahnesine dönüşür; çarptıMı, sağdaÇiniVarMı gibi yardımcılar vardır.
iKoco'da: çini dünyası yok. Izgara tabanlı oyunlar için haritayı bir Dizin[Yazı] ya da Dizim ile tut, her hücreyi Resim.dikdörtgen/Resim.imge ile çiz; çarpışma için resim.çarpıştıMı(diğeri) ve sınırları.
Grafik2B, tuvalÇizim)Masaüstünde canlandırTuvalÇizimle ve Grafik2B (Java2D) ile doğrudan piksel düzeyinde çizim; Bellekteİmge, İmgeİşlemi ile imge işleme vardır.
iKoco'da: Java2D yok. Vektör çizim için Resim birimi (Resim.daire, Resim.çizgi, Resim.dikdörtgen, dönüştürücüler götür/döndürme/büyütme/kalemRengi/boyaRengi) ve kaplumbağa; çok sayıda nesne için resimleri Resim.diziDüzenli ile birleştir.
Masaüstünde ileri(100) kaplumbağa gerçekten yürüyene kadar betiği bekletir. Sonraki satır çalıştığında hareket bitmiştir; bu yüzden k1.ileri(100); k1.uzaklık(k2) masaüstünde hareketten sonraki uzaklığı verir.
iKoco'da: tarayıcı tek iş parçacıklıdır, bekletmek sayfayı dondururdu. Onun için kaplumbağa komutları bir sıraya girer ve betik akmaya devam eder. Sonuç aynıdır — çizim doğru sırayla olur — ama değer okuyan komutlar için fark eder: uzaklık o anki konumu okur, yani henüz işlenmemiş komutlardan önceki konumu. Yukarıdaki örnek iKoco'da hareketten önceki uzaklığı verir.
Doğru anı yakalamak için okumayı sıraya sokan komutlar var: konumuOku, yönüOku, dokunuyorMu. Bunlar bir işlev alır ve o işlev, kendisinden önce yazdığın bütün komutlar bittikten sonra çalışır:
yinele(4) { ileri(100); sağ() }
konumuOku { n => yaz(s"kare bitti, buradayım: ${n.x}, ${n.y}") }
Aynı sebeple çevir(öbürü) hedefin konumunu sıranın doğru noktasında okur, yani masaüstündeki gibi davranır.
Bu liste her sürümde kısalıyor: silipSakla, tuvalAlanı, durdur, yaklaş, durakla, gerekli, tuşaBasınca, fareKonumu, yazıyüzleri, Görünüş.*, Resim.düz, Resim.sil(), yeniKaplumbağa, kalemİnikMi, canlandırmaHızı, konumuDeğiştir, tuvaliKaydır/Döndür, yaklaşmayıSil, rastgeleÇanEğrisinden, eksenleri/ızgarayıGizle ve giysi komutları (giysiKur, giysileriKur, birsonrakiGiysi, giysiyiBüyült) artık masaüstündeki adlarıyla iKoco'da da çalışıyor. Kalanlar (tam liste kojojs-dev'de kilavuz/eksik-adlar.tsv):
| Masaüstü | iKoco |
|---|---|
BuAn() | var; alanları masaüstündeki gibi (saat, dakika, saniye, gün, ay, yıl) ama Takvim yerine tarayıcının saatinden |
ışınlarıAç/Kapat | adlar var ve betik derlenir, ama farlar henüz çizilmiyor |
kaplumbağa0 | kaplumbağa; çoğul kaplumbağa çalışıyor: dez k = yeniKaplumbağa(50, 50) |
Canlandırma, ÇiniDünyası, Grafik2B, İmge, Boya, Üçgen… | henüz yok; her biri başlı başına bir özellik (geçiş canlandırmaları, çini dünyası, Java2D çizim ve imge işleme) |
Java türleri: Takvim, Tarih, SaatDilimi, Boya, İmge, BKK… | tarayıcıda Java kütüphanesi yok (Yazıyüzü ve Mp3Çalar ise iKoco'da kendi karşılıklarıyla var) |
Hangi Türkçe adların iKoco'da bulunduğunu Koco Sözlüğü gösterir. Eksik bir komuta ihtiyacın olursa kojojs-dev'de bildir.