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 menjadi1.5di 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
deleteatauclass, boleh dipakai di Naskah. Di JavaScript namanya diberi tanda$di belakang, misalnyadelete$. -
Fungsi yang memakai
tungguotomatis menjadiasync, dan fungsi tanpa nama menjadi arrow function supaya.namatetap menunjuk benda yang sama.
Penjelasan lengkap tentang bahasanya ada di SYNTAX.md.
Padanan JavaScript
| Naskah | JavaScript |
|---|---|
misal | let |
konstan | const |
benar / salah / kosong | true / false / null |
dan / atau / bukan | && / || / ! |
tulis(x) | console.log(x) |
tanya(x) | prompt(x) |
bilangan(x) | __bilangan(x) |
"Halo, {nama}" | `Halo, ${nama}` |
| Naskah | JavaScript |
|---|---|
jika / lain | if / else |
pilih / kalau / lain | if / else if / else |
selama | while |
ulang | while (true) |
untuk i dari 1 sampai 9 | for (i = 1; i <= 9; i++) |
untuk setiap x dalam xs | for (x of xs) |
berhenti / lanjut | break / continue |
| Naskah | JavaScript |
|---|---|
fungsi nama(x) | function nama(x) |
fungsi (x) | (x) => { } |
hasilkan | return |
{ hasilkan x } | (() => { return x })() |
fungsi berisi tunggu | async function |
tunggu | await |
tunda(ms) | new Promise(... setTimeout ...) |
| Naskah | JavaScript |
|---|---|
Hewan(x) { } | class Hewan { constructor(x) { } } |
Kucing(x) turunan Hewan(y) | class Kucing extends Hewan { constructor(x) { super(y) } } |
Kucing(x) | new Kucing(x) |
.nama | this.nama |
..suara() | super.suara() |
| Naskah | JavaScript |
|---|---|
coba / tangkap / akhirnya | try / catch / finally |
lempar | throw |
Galat(x) | new Error(x) |
e.pesan | e.message |
| Naskah | JavaScript |
|---|---|
xs.panjang | xs.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() |