kendalscript
v1.0.0
Published
Bahasa pemrograman multilingual transpile ke JavaScript ๐ฎ๐ฉ | Multilingual programming language transpiled to JavaScript | Indonesia + English + Jawa Kendal-Semarang
Maintainers
Readme
๐ฎ๐ฉ KendalScript v1.0
Bahasa pemrograman multilingual yang ditranspile ke JavaScript. A multilingual programming language that transpiles to JavaScript.
Dari Kendal dengan cinta โค๏ธ โ Made in Kendal, Central Java
๐ค Apa itu KendalScript? / What is KendalScript?
KendalScript adalah bahasa pemrograman yang syntax-nya mirip JavaScript tapi bisa ditulis dalam 3 bahasa:
KendalScript is a programming language with JavaScript-like syntax but can be written in 3 languages:
| ๐ฌ๐ง English | ๐ฎ๐ฉ Indonesia | โ Jawa Kendal-Semarang |
|-------------|---------------|------------------------|
| function | fungsi | fungsi |
| if | jika / kalau | nek / yen |
| return | kembalikan | bali / wangsul |
| true | benar | bener |
| false | salah | salah |
| null | kosong | kosong |
| while | selama | nganti |
| for | untuk | kanggo |
| try | coba | nyoba |
| catch | tangkap | topo |
| class | kelas | wujud |
| new | baru | anyar |
| break | berenti | mandeg |
| continue | lanjut | lanjut |
| throw | lempar | uncal |
| async | ajejek | ajejek |
| await | nunggu | nunggu |
Bebas campur! Bisa pakai English + Indonesia + Jawa dalam satu file. Mix freely! You can mix all 3 languages in one file.
๐ฆ Instalasi / Installation
Syarat / Requirements
- Node.js versi 18 atau lebih tinggi / version 18 or higher
- Node.js bisa diunduh di: https://nodejs.org
Cara Install
# 1. Clone repository ini
git clone <url-repo-kendalscript>
cd kendalscript
# 2. Install dependencies
npm install
# 3. Install global (opsional, biar bisa pakai 'kdl' dari mana saja)
npm linkVerifikasi Install / Verify Installation
node src/cli.js version
# Output: KendalScript v1.0.0๐ Cara Pakai / How to Use
1. Buat file .kdl / Create a .kdl file
Buat file bernama hello.kdl dengan isi:
Create a file named hello.kdl with this content:
// hello.kdl - Program pertama KendalScript!
// First KendalScript program!
print("Halo, Dunia!")
print("Hello, World!")
print("Halo, Kendal!")2. Jalankan / Run
node src/cli.js run hello.kdlOutput:
Halo, Dunia!
Hello, World!
Halo, Kendal!3. Build ke JavaScript (opsional) / Build to JavaScript (optional)
node src/cli.js build hello.kdl
# Output: hello.kdl -> hello.js๐ Perintah CLI / CLI Commands
| Perintah / Command | Fungsi / Function |
|-------------------|-------------------|
| kdl run <file.kdl> | Jalankan file / Run file |
| kdl build <file.kdl> | Transpile ke .js / Transpile to .js |
| kdl ast <file.kdl> | Lihat AST (untuk debug) / View AST (for debug) |
| kdl tokens <file.kdl> | Lihat token (untuk debug) / View tokens (for debug) |
| kdl repl | REPL interaktif / Interactive REPL |
| kdl help | Tampilkan bantuan / Show help |
| kdl version | Lihat versi / Show version |
Tips: Kalau sudah npm link, cukup pakai kdl langsung:
Tip: After npm link, just use kdl directly:
kdl run hello.kdl
kdl repl๐ Panduan Lengkap / Complete Guide
๐ Variabel / Variables
// Pakai let, const, atau var (sama seperti JavaScript)
let nama = "Dika" // bisa diubah / changeable
const KOTA = "Kendal" // tidak bisa diubah / not changeable
var umur = 17 // bisa diubah / changeable
print(nama) // Output: Dika
print(KOTA) // Output: Kendal
print(umur) // Output: 17๐ง Fungsi / Functions
// Cara 1: fn (pendek / short)
fn tambah(a, b) {
return a + b
}
// Cara 2: function (panjang / long, seperti JavaScript)
function sapa(nama) {
return "Halo, " + nama + "!"
}
// Cara 3: fungsi (Indonesia)
fungsi kalikan(x, y) {
return x * y
}
// Default parameter
function sapaLagi(nama = "Dunia") {
return "Halo, " + nama + "!"
}
// Rest parameter (...angka)
function jumlahSemua(...angka) {
let total = 0
for (let n of angka) total = total + n
return total
}
print(tambah(2, 3)) // Output: 5
print(sapa("Kendal")) // Output: Halo, Kendal!
print(kalikan(4, 5)) // Output: 20
print(sapaLagi()) // Output: Halo, Dunia!
print(jumlahSemua(1, 2, 3)) // Output: 6โก๏ธ Arrow Functions
// Panah: => (sama seperti JavaScript)
let kuadrat = x => x * x
print(kuadrat(5)) // Output: 25
let kali = (a, b) => { return a * b }
print(kali(4, 3)) // Output: 12
// Arrow sebagai callback / Arrow as callback
let angka = [1, 2, 3, 4, 5]
let duaKali = angka.map(x => x * 2)
print(duaKali) // Output: [ 2, 4, 6, 8, 10 ]๐ Percabangan / Conditionals
let nilai = 85
// if / else (English)
if (nilai >= 70) {
print("Lulus!")
} else {
print("Tidak lulus")
}
// jika (Indonesia)
if (nilai >= 90) {
print("Nilai A")
} else if (nilai >= 80) {
print("Nilai B") // Output: Nilai B
} else {
print("Nilai C")
}
// nek / yen (Jawa Kendal)
if (bener) {
print("Benar!")
}
// Ternary operator
let hasil = nilai >= 70 ? "Lulus" : "Tidak Lulus"
print(hasil) // Output: Lulus๐ Perulangan / Loops
// For klasik / Classic for
for (let i = 0; i < 5; i = i + 1) {
print(i)
}
// For...of (iterasi array / iterate array)
let buah = ["Mangga", "Durian", "Rambutan"]
for (let b of buah) {
print(b)
}
// For...in (iterasi object / iterate object)
let kota = { nama: "Kendal", prov: "Jawa Tengah" }
for (let key in kota) {
print(key + ": " + kota[key])
}
// While
let x = 0
while (x < 5) {
print(x)
x = x + 1
}
// Do...While
let y = 0
do {
print(y)
y = y + 1
} while (y < 5)
// Break & Continue
for (let i = 0; i < 10; i = i + 1) {
if (i == 3) continue // skip 3
if (i == 7) break // stop di 7
print(i)
}๐๏ธ Class (OOP)
class Mahasiswa {
constructor(nama, nilai) {
this.nama = nama
this.nilai = nilai
}
getNama() {
return this.nama
}
lulus() {
return this.nilai >= 70
}
// Getter
get grade() {
if (this.nilai >= 90) return "A"
if (this.nilai >= 80) return "B"
if (this.nilai >= 70) return "C"
return "D"
}
}
let mhs = new Mahasiswa("Dika", 85)
print(mhs.getNama()) // Output: Dika
print(mhs.lulus()) // Output: true
print(mhs.grade) // Output: B
// Pewarisan / Inheritance
class Robot extends Mahasiswa {
constructor(nama, nilai, tipe) {
super(nama, nilai)
this.tipe = tipe
}
info() {
return this.nama + " (" + this.tipe + ")"
}
}
let robot = new Robot("KendalBot", 100, "AI")
print(robot.info()) // Output: KendalBot (AI)
// Static method
class MathUtil {
static max(a, b) {
return a > b ? a : b
}
}
print(MathUtil.max(5, 3)) // Output: 5๐ก๏ธ Error Handling (Try/Catch)
try {
print("Coba sesuatu...")
throw "Ada error!"
} catch (err) {
print("Error: " + err)
} finally {
print("Selesai!")
}
// Coba (Indonesia), nyoba (Jawa)
coba {
print("OK")
} catch (e) {
print("Error: " + e)
} finally {
print("Done")
}๐ฆ Destructuring
// Array destructuring
let [a, b, c] = [10, 20, 30]
print(a) // Output: 10
print(b) // Output: 20
print(c) // Output: 30
// Object shorthand (nama properti = nama variabel)
let nama = "Budi"
let umur = 18
let orang = { nama, umur }
print(orang) // Output: { nama: 'Budi', umur: 18 }โจ Spread & Rest Operators
// Spread array
let arr1 = [1, 2, 3]
let arr2 = [...arr1, 4, 5]
print(arr2) // Output: [ 1, 2, 3, 4, 5 ]
// Spread object
let obj1 = { a: 1, b: 2 }
let obj2 = { ...obj1, c: 3 }
print(obj2) // Output: { a: 1, b: 2, c: 3 }
// Rest parameter
function jumlah(...angka) {
let total = 0
for (let n of angka) total = total + n
return total
}
print(jumlah(1, 2, 3, 4)) // Output: 10๐ Optional Chaining & Nullish Coalescing
let user = { profile: { name: "Dika" } }
// Optional chaining (?.)
print(user.profile?.name) // Output: Dika
print(user.address?.city) // Output: undefined (tidak error!)
// Nullish coalescing (??)
print(null ?? "default") // Output: default
print(42 ?? "default") // Output: 42๐ Template Literals
let nama = "Kendal"
let umur = 17
// Pakai backtick ` dan ${...}
print(`Halo, ${nama}!`)
print(`Umur saya ${umur} tahun`)
print(`5 + 3 = ${5 + 3}`)๐ข Tipe Data / Data Types
// Number
let angka = 42
let desimal = 3.14
// String
let teks = "Halo"
let teks2 = 'Juga bisa'
// Boolean
let benar = true
let salah = false
// Null
let kosong = null
// Undefined
let tak_ndefine = undefined
// Array
let buah = ["Apel", "Mangga", "Durian"]
// Object
let orang = { nama: "Dika", umur: 17 }
// typeof
print(typeof 42) // Output: number
print(typeof "halo") // Output: string
print(typeof true) // Output: boolean
print(typeof null) // Output: object (ini bug JavaScript, bukan bug kita)
print(typeof undefined) // Output: undefined๐จ๏ธ Print / Cetak
// 4 cara yang sama / 4 equivalent ways:
print("Halo!") // English
cetak("Halo!") // Indonesia
tulis("Halo!") // Indonesia (lain)
weneh("Halo!") // Jawa Kendal
// Print banyak nilai / Print multiple values
print("Nama:", "Dika", "Umur:", 17)
// Output: Nama: Dika Umur: 17โณ Async / Await
// task = async function (khas KendalScript)
task ambilData() {
await tunggu(1000) // tunggu = await
return "Data sudah siap!"
}
// async function (JavaScript style)
async function proses() {
let hasil = await ambilData()
print(hasil)
}
proses()๐ค Subagent (Jalankan File Lain)
// Subagent: jalankan file .kdl lain dalam proses terpisah
// Subagent: run another .kdl file in a separate process
let hasil = subagent("worker.kdl")
print("Hasil dari worker:", hasil)๐ฆ Modul / Modules
// Import
import fs from "fs"
import { readFile } from "fs"
import * as path from "path"
// Export
export function hello() { return "Hi!" }
export default class MyBot { }
// Use (khas KendalScript)
use http๐ข Operator Lengkap / Full Operators
Aritmatika: + - * / % **
Perbandingan: == != === !== < > <= >=
Logika: && || !
Bitwise: & | ^ ~ << >> >>>
Assignment: = += -= *= /= %=
Lain-lain: ? : ?? ?. ... typeof instanceof delete
Increment: ++ --๐ 3 Bahasa dalam 1 File / 3 Languages in 1 File
// Contoh: campuran 3 bahasa
// Example: mix of 3 languages
fn main() {
// English
let name = "Dika"
if (name.length > 0) {
print("Hello, " + name)
}
// Indonesia
jikalau (benar) {
print("Ini benar!")
}
// Jawa Kendal-Semarang
yen (bener) {
print("Iki bener!")
}
// Semua bekerja! / All works!
}๐ Contoh Program / Example Programs
Lihat folder examples/ untuk contoh program:
See the examples/ folder for example programs:
| File | Deskripsi / Description |
|------|------------------------|
| hello.kdl | Program pertama / First program |
| calculator.kdl | Kalkulator sederhana / Simple calculator |
| fibonacci.kdl | Bilangan Fibonacci / Fibonacci numbers |
| async.kdl | Async/Await example |
| telegram-bot.kdl | Bot Telegram (butuh telegraf + BOT_TOKEN) |
| web-server.kdl | Web server (butuh express) |
| test-all-features.kdl | Test semua fitur / Test all features |
| test-v10.kdl | Test lengkap v1.0 / Full v1.0 test |
| test-subagent.kdl | Test subagent |
| my-bot.kdl | Contoh bot / Bot example |
โ FAQ
Q: Apakah harus pakai titik koma (;)?
A: Tidak harus! Titik koma opsional seperti Python. Tapi kalau mau pakai juga boleh.
Q: Bedanya fn sama function?
A: Sama saja! fn lebih pendek, function lebih formal seperti JavaScript. Pilih mana yang suka.
Q: Bedanya task sama async function?
A: Sama saja! task lebih pendek dan khas KendalScript. async function standar JavaScript.
Q: Bisa pakai library npm?
A: Bisa! Karena hasilnya JavaScript, semua library npm bisa dipakai.
Q: Kenapa namanya "KendalScript"?
A: Karena dibuat di Kabupaten Kendal, Jawa Tengah, Indonesia ๐ฎ๐ฉ
Q: Untuk siapa bahasa ini?
A: Untuk semua orang! Terutama pelajar SMP-SMK yang mau belajar coding dengan bahasa ibu.
Q: Apakah 100% compatible dengan JavaScript?
A: Ya! Semua fitur JavaScript bisa dipakai. KendalScript hanya menambah keyword multilingual di atasnya.
๐ ๏ธ Pengembangan / Development
# Jalankan test / Run tests
node src/cli.js run examples/test-all-features.kdl
# Jalankan test lengkap v1.0 / Run full v1.0 test
node src/cli.js run examples/test-v10.kdl
# Lihat AST (untuk debug) / View AST (for debug)
node src/cli.js ast examples/hello.kdl
# Lihat token (untuk debug) / View tokens (for debug)
node src/cli.js tokens examples/hello.kdl
# REPL interaktif / Interactive REPL
node src/cli.js repl๐ Lisensi / License
MIT License - Gratis dipakai untuk apa saja.
๐ฌ Kontak / Contact
Dibuat dengan โค๏ธ di Kendal, Jawa Tengah, Indonesia
Made with โค๏ธ in Kendal, Central Java, Indonesia
๐ฎ๐ฉ KendalScript v1.0
Dari Kendal dengan cinta!
From Kendal with love!
Saka Kendal kanthi tresna!