naskah

Untuk guru dan pengembang

Naskah dibuat untuk anak-anak yang belum bisa bahasa Inggris, jadi murid tidak perlu melihat JavaScript sama sekali. Di balik layar, program Naskah diterjemahkan ke JavaScript supaya bisa langsung berjalan di peramban. Halaman ini untuk Anda yang ingin tahu bagaimana caranya.

Cara kerjanya

  • Naskah dibaca oleh penerjemah yang ditulis dengan Rust (diubah menjadi WebAssembly), lalu diubah menjadi JavaScript yang rapi, satu pernyataan per baris. Hasilnya dijalankan di web worker yang bisa dihentikan, sehingga ulangan tanpa akhir tidak membekukan halaman. Program yang berjalan lebih dari 2 detik dihentikan.
  • Murid tidak pernah melihat JavaScript. Kesalahan ditulis dalam Bahasa Indonesia dengan nomor baris Naskah, bukan nomor baris JavaScript. Untuk melihat hasil terjemahannya, buka Tempat Coba dengan JavaScript: kode dan hasil terjemahannya tampil berdampingan.
  • Angka desimal ditulis dengan koma di Naskah (1,5) dan menjadi 1.5 di JavaScript. Di Keluaran, angka tampil dengan koma lagi.
  • Beberapa fungsi bantu dibuat oleh Tempat Coba dan dipanggil dari JavaScript hasil terjemahan: __tambah (tanda + yang bisa menyambung teks dengan angka berkoma), __teks (nilai di dalam teks) dan __pesan (pesan sebuah kesalahan, dijelaskan dalam Bahasa Indonesia). Jadi JavaScript hasil terjemahan tidak berdiri sendiri.
  • Nama yang di JavaScript berarti sesuatu, seperti delete atau class, boleh dipakai di Naskah. Di JavaScript namanya diberi tanda $ di belakang, misalnya delete$.
  • Fungsi yang memakai tunggu otomatis menjadi async, dan fungsi tanpa nama menjadi arrow function supaya .nama tetap menunjuk benda yang sama.

Penjelasan lengkap tentang bahasanya ada di SYNTAX.md.

Padanan JavaScript

Dasar
NaskahJavaScript
misallet
konstanconst
benar / salah / kosongtrue / false / null
dan / atau / bukan&& / || / !
tulis(x)console.log(x)
tanya(x)prompt(x)
bilangan(x)__bilangan(x)
"Halo, {nama}"`Halo, ${nama}`
Alur
NaskahJavaScript
jika / lainif / else
pilih / kalau / lainif / else if / else
selamawhile
ulangwhile (true)
untuk i dari 1 sampai 9for (i = 1; i <= 9; i++)
untuk setiap x dalam xsfor (x of xs)
berhenti / lanjutbreak / continue
Fungsi
NaskahJavaScript
fungsi nama(x)function nama(x)
fungsi (x)(x) => { }
hasilkanreturn
{ hasilkan x }(() => { return x })()
fungsi berisi tungguasync function
tungguawait
tunda(ms)new Promise(... setTimeout ...)
Kelas
NaskahJavaScript
Hewan(x) { }class Hewan { constructor(x) { } }
Kucing(x) turunan Hewan(y)class Kucing extends Hewan { constructor(x) { super(y) } }
Kucing(x)new Kucing(x)
.namathis.nama
..suara()super.suara()
Galat
NaskahJavaScript
coba / tangkap / akhirnyatry / catch / finally
lemparthrow
Galat(x)new Error(x)
e.pesane.message
Daftar
NaskahJavaScript
xs.panjangxs.length
xs.tambah(x)xs.push(x)
xs.gabung(", ")xs.join(", ")
xs.balik()xs.reverse()
xs.peta(f)xs.map(f)
xs.saring(f)xs.filter(f)
xs.cari(f)xs.find(f)
xs.urut()xs.sort()