Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>Sundawi Programming LanguageNew to Visual Studio Code? Get it now.
Sundawi Programming Language

Sundawi Programming Language

ehfcreative

|
3 installs
| (0) | Free
Bahasa pemrograman Sunda modern untuk web development
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Sundawi Programming Language - VSCode Extension

Sundawi Logo

Bahasa Pemrograman Sunda Modern untuk Web Development

Version Installs Rating License: MIT

Instalasi • Quick Start • Dokumentasi • Contoh • Lisensi


🌟 Tentang Sundawi

Sundawi adalah bahasa pemrograman modern yang menggunakan bahasa Sunda sebagai sintaks, dirancang untuk membuat coding lebih mudah dipahami oleh penutur bahasa Sunda. Sundawi di-transpile ke JavaScript, sehingga kompatibel dengan ekosistem JavaScript yang luas.


🚀 Quick Start

1. Buat File Sundawi Pertama

Cara A: Menggunakan Command Palette

  1. Tekan Ctrl+Shift+P / Cmd+Shift+P
  2. Ketik Sundawi: Gawe File Anyar
  3. Masukkan nama file: halo.sundawi

Cara B: Manual

  1. Buat file baru
  2. Simpan dengan ekstensi .sundawi atau .sw

2. Tulis Kode Pertama Anda

// Program pertama - Halo Dunya!
gawe main() {
    tulis('Wilujeng sumping di Sundawi! 🎉')
    tulis('Ieu program Sundawi munggaran abdi')
}

main()

3. Jalankan Program

# Transpile ke JavaScript
sundawi-compile halo.sundawi

# Jalankan hasil transpile
node halo.js

1. Variabel & Tipe Data

Deklarasi Variabel

// hayu - variabel yang bisa diubah (seperti let)
hayu ngaran = 'Asep'
hayu umur = 25
umur = 26  // bisa diubah

// tetep - konstanta (seperti const)
tetep PI = 3.14159
tetep KOTA = 'Bandung'
// PI = 3.14  // ERROR! tidak bisa diubah

// robah - variabel global/function scope (seperti var)
robah jumlah = 100

Tipe Data

// angka - Number
hayu harga = 50000
hayu diskon = 0.15
hayu negatif = -100

// téks - String
hayu salam = "Wilujeng enjing"
hayu alamat = 'Jl. Asia Afrika No. 8'
hayu template = `Nami abdi ${ngaran}, umur ${umur} taun`

// boole - Boolean
hayu sudahNikah = salah  // false
hayu aktif = bener       // true

// kosong - null
hayu data = kosong

// teu_ditetepkeun - undefined
hayu belumDiisi = teu_ditetepkeun

// daptar - Array
hayu buah = ['Mangga', 'Jambu', 'Nanas']

// objék - Object
hayu jalma = {
    ngaran: 'Ujang',
    umur: 30,
    kota: 'Bandung'
}

2. Operator

Operator Aritmatika

hayu a = 10
hayu b = 3

tulis(a + b)   // 13 - Tambah
tulis(a - b)   // 7  - Kurang
tulis(a * b)   // 30 - Kali
tulis(a / b)   // 3.333... - Bagi
tulis(a % b)   // 1  - Modulus (sisa bagi)
tulis(a ** b)  // 1000 - Pangkat

Operator Perbandingan

hayu x = 5
hayu y = 10

tulis(x == y)   // salah - sama dengan
tulis(x != y)   // bener - tidak sama dengan
tulis(x < y)    // bener - kurang dari
tulis(x > y)    // salah - lebih dari
tulis(x <= y)   // bener - kurang dari atau sama dengan
tulis(x >= y)   // salah - lebih dari atau sama dengan

Operator Logika

hayu benar1 = bener
hayu benar2 = bener
hayu salah1 = salah

// jeung - AND (&&)
tulis(benar1 jeung benar2)  // bener
tulis(benar1 jeung salah1)  // salah

// atawa - OR (||)
tulis(benar1 atawa salah1)  // bener
tulis(salah1 atawa salah1)  // salah

// lain - NOT (!)
tulis(lain benar1)  // salah
tulis(lain salah1)  // bener

3. Kontrol Flow

Pernyataan Lamun (If)

hayu umur = 20

// lamun - if
lamun umur >= 17 {
    tulis('Anjeun geus dewasa')
}

// lamun...atawa - if...else
lamun umur >= 17 {
    tulis('Geus dewasa')
} atawa {
    tulis('Keneh budak')
}

// lamun...tapi_lamun...atawa - if...else if...else
lamun umur >= 60 {
    tulis('Sepuh')
} tapi_lamun umur >= 17 {
    tulis('Dewasa')
} tapi_lamun umur >= 13 {
    tulis('Rumaja')
} atawa {
    tulis('Budak')
}

Pilih (Switch)

hayu poé = 'Senén'

pilih poé {
    kasus 'Senén':
        tulis('Mimiti minggu')
        tepi
    
    kasus 'Jumaah':
        tulis('Poé terakhir gawé')
        tepi
    
    kasus 'Saptu':
    kasus 'Minggu':
        tulis('Libur!')
        tepi
    
    baku:
        tulis('Poé biasa')
}

Loop Bari (While)

hayu i = 1

// bari - while
bari i <= 5 {
    tulis(`Angka: ${i}`)
    i++
}

// ulang...bari - do...while
hayu j = 1
ulang {
    tulis(`Angka: ${j}`)
    j++
} bari j <= 5

Loop Pikeun (For)

// pikeun - for loop
pikeun hayu i = 1; i <= 5; i++ {
    tulis(`Iterasi ka-${i}`)
}

// pikeun...dina - for...in (iterasi object keys)
hayu jalma = { ngaran: 'Asep', umur: 25 }
pikeun hayu kunci dina jalma {
    tulis(`${kunci}: ${jalma[kunci]}`)
}

// unggal - forEach (iterasi array)
hayu buah = ['Mangga', 'Jambu', 'Nanas']
unggal buah jadi item {
    tulis(item)
}

// tepi - break
pikeun hayu i = 1; i <= 10; i++ {
    lamun i == 5 {
        tepi  // Stop loop
    }
    tulis(i)
}

// tuluyen - continue
pikeun hayu i = 1; i <= 5; i++ {
    lamun i == 3 {
        tuluyen  // Skip iterasi ini
    }
    tulis(i)
}

4. Fungsi

Fungsi Dasar

// gawe - function
gawe salam(ngaran) {
    tulis(`Wilujeng sumping, ${ngaran}!`)
}

salam('Asep')  // Output: Wilujeng sumping, Asep!

// mulangkeun - return
gawe tambah(a, b) {
    mulangkeun a + b
}

hayu hasil = tambah(5, 3)
tulis(hasil)  // Output: 8

Default Parameters

gawe sapa(ngaran = 'Dulur') {
    mulangkeun `Kumaha damang, ${ngaran}?`
}

tulis(sapa())        // Kumaha damang, Dulur?
tulis(sapa('Ujang')) // Kumaha damang, Ujang?

Arrow Function

// Arrow function
tetep kali = (a, b) => a * b
tulis(kali(4, 5))  // 20

// Dengan body
tetep cekGanjil = (angka) => {
    lamun angka % 2 == 1 {
        mulangkeun bener
    }
    mulangkeun salah
}

Rest Parameters

gawe jumlahkan(...angka) {
    hayu total = 0
    unggal angka jadi num {
        total += num
    }
    mulangkeun total
}

tulis(jumlahkan(1, 2, 3, 4, 5))  // 15

5. Array & Object

Array Methods

hayu angka = [1, 2, 3, 4, 5]

// peta - map
hayu ganda = angka.peta(x => x * 2)
tulis(ganda)  // [2, 4, 6, 8, 10]

// saring - filter
hayu genap = angka.saring(x => x % 2 == 0)
tulis(genap)  // [2, 4]

// kurangi - reduce
hayu jumlah = angka.kurangi((acc, val) => acc + val, 0)
tulis(jumlah)  // 15

// panjangna - length
tulis(angka.panjangna)  // 5

// push & pop
angka.push(6)        // Tambah di akhir
hayu terakhir = angka.pop()  // Hapus dari akhir

// shift & unshift
angka.unshift(0)     // Tambah di awal
hayu pertama = angka.shift() // Hapus dari awal

Object Manipulation

hayu jalma = {
    ngaran: 'Asep Sunandar',
    umur: 25,
    kota: 'Bandung',
    hobi: ['maca', 'nulis', 'ngoding']
}

// Akses property
tulis(jalma.ngaran)     // Asep Sunandar
tulis(jalma['umur'])    // 25

// Tambah property
jalma.email = 'asep@example.com'

// Hapus property
hapus jalma.hobi

// Object destructuring
hayu { ngaran, umur } = jalma
tulis(ngaran)  // Asep Sunandar

// Object.keys(), Object.values(), Object.entries()
tulis(Object.keys(jalma))    // ['ngaran', 'umur', 'kota', 'email']
tulis(Object.values(jalma))  // ['Asep Sunandar', 25, 'Bandung', ...]

6. Class & OOP

Membuat Class

// kelas - class
kelas Jalma {
    // Constructor
    gawe constructor(ngaran, umur) {
        ieu.ngaran = ngaran  // ieu - this
        ieu.umur = umur
    }
    
    // Method
    gawe kenalkeun() {
        tulis(`Nami abdi ${ieu.ngaran}, umur ${ieu.umur} taun`)
    }
    
    // Getter
    get info() {
        mulangkeun `${ieu.ngaran} (${ieu.umur})`
    }
    
    // Setter
    set umuranjeun(nilai) {
        lamun nilai > 0 {
            ieu.umur = nilai
        }
    }
    
    // Static method
    gawe statik buatRandom() {
        mulangkeun anyar Jalma('Random', 20)
    }
}

// anyar - new
hayu jalma1 = anyar Jalma('Asep', 25)
jalma1.kenalkeun()  // Nami abdi Asep, umur 25 taun

tulis(jalma1.info)  // Asep (25)
jalma1.umuranjeun = 26

hayu jalmaRandom = Jalma.buatRandom()

Inheritance (Warisan)

// warisan - extends
kelas Mahasiswa warisan Jalma {
    gawe constructor(ngaran, umur, npm) {
        indung(ngaran, umur)  // indung - super
        ieu.npm = npm
    }
    
    // Override method
    gawe kenalkeun() {
        indung.kenalkeun()  // Panggil method parent
        tulis(`NPM: ${ieu.npm}`)
    }
    
    gawe belajar() {
        tulis(`${ieu.ngaran} keur diajar`)
    }
}

hayu mhs = anyar Mahasiswa('Ujang', 20, '1234567890')
mhs.kenalkeun()
// Output:
// Nami abdi Ujang, umur 20 taun
// NPM: 1234567890

mhs.belajar()  // Ujang keur diajar

Access Modifiers

kelas Akun {
    // umum - public (default)
    umum ngaran
    
    // pribadi - private
    pribadi sandi
    
    // ditangtayungan - protected
    ditangtayungan saldo
    
    gawe constructor(ngaran, sandi) {
        ieu.ngaran = ngaran
        ieu.sandi = sandi
        ieu.saldo = 0
    }
    
    gawe pribadi cekSandi(input) {
        mulangkeun input == ieu.sandi
    }
    
    gawe login(sandi) {
        lamun ieu.cekSandi(sandi) {
            tulis('Login sukses!')
            mulangkeun bener
        }
        tulis('Sandi salah!')
        mulangkeun salah
    }
}

7. Async/Await

Promise Dasar

// jangjian - promise
gawe ambilData() {
    mulangkeun anyar Jangjian((resolve, reject) => {
        // Simulasi API call
        setTimeout(() => {
            hayu sukses = bener
            lamun sukses {
                resolve({ data: 'Hasil API' })
            } atawa {
                reject('Gagal ambil data')
            }
        }, 1000)
    })
}

// Pakai .then() dan .catch()
ambilData()
    .then(hasil => {
        tulis('Sukses:', hasil.data)
    })
    .catch(kasalahan => {
        tulis('Error:', kasalahan)
    })

Async/Await

// async - async function
gawe async ambilPamaké(id) {
    coba {
        // antosan - await
        hayu respon = antosan ambil(`https://api.example.com/users/${id}`)
        hayu data = antosan respon.json()
        mulangkeun data
    } cekel (kasalahan) {
        tulis('Kasalahan:', kasalahan)
        buang kasalahan
    }
}

// Pakai async function
gawe async main() {
    hayu pamaé = antosan ambilPamaé(1)
    tulis(pamaé)
}

main()

Multiple Promises

gawe async ambilBanyakData() {
    coba {
        // Promise.all - tunggu semua selesai
        hayu [users, posts, comments] = antosan Jangjian.kabeh([
            ambil('/api/users'),
            ambil('/api/posts'),
            ambil('/api/comments')
        ])
        
        tulis('Sadaya data rengse!')
        
    } cekel (kasalahan) {
        tulis('Aya nu gagal:', kasalahan)
    }
}

// Promise.race - ambil yang pertama selesai
gawe async lomba() {
    hayu winner = antosan Jangjian.lomba([
        ambil('/api/server1'),
        ambil('/api/server2'),
        ambil('/api/server3')
    ])
    tulis('Meunang:', winner)
}

8. Module System

Export & Import

file: utils.sundawi

// Export individual
ékspor gawe tambah(a, b) {
    mulangkeun a + b
}

ékspor gawe kurang(a, b) {
    mulangkeun a - b
}

ékspor tetep PI = 3.14159

// Export default
gawe kali(a, b) {
    mulangkeun a * b
}

ékspor baku kali

file: main.sundawi

// Import named exports
asupkeun { tambah, kurang, PI } ti './utils.sundawi'

tulis(tambah(5, 3))  // 8
tulis(PI)            // 3.14159

// Import default
asupkeun kali ti './utils.sundawi'
tulis(kali(4, 5))    // 20

// Import semua
asupkeun * jadi Utils ti './utils.sundawi'
tulis(Utils.tambah(10, 5))  // 15

// Import dengan alias
asupkeun { tambah jadi add } ti './utils.sundawi'
tulis(add(2, 3))  // 5

Export Object & Class

file: models.sundawi

ékspor kelas Pamaé {
    gawe constructor(ngaran) {
        ieu.ngaran = ngaran
    }
}

ékspor kelas Produk {
    gawe constructor(ngaran, harga) {
        ieu.ngaran = ngaran
        ieu.harga = harga
    }
}

file: app.sundawi

asupkeun { Pamaé, Produk } ti './models.sundawi'

hayu user = anyar Pamaé('Asep')
hayu item = anyar Produk('Laptop', 5000000)

9. Error Handling

Try-Catch-Finally

gawe bagi(a, b) {
    // coba - try
    coba {
        lamun b == 0 {
            // buang - throw
            buang anyar Kasalahan('Teu bisa bagi ku nol!')
        }
        mulangkeun a / b
        
    // cekel - catch
    } cekel (kasalahan) {
        tulis('Error:', kasalahan.message)
        mulangkeun kosong
        
    // pamustunganana - finally
    } pamustunganana {
        tulis('Operasi rengse')
    }
}

hayu hasil = bagi(10, 0)
// Output:
// Error: Teu bisa bagi ku nol!
// Operasi rengse

Custom Error Class

kelas KasalahanValidasi warisan Kasalahan {
    gawe constructor(pesen) {
        indung(pesen)
        ieu.ngaran = 'KasalahanValidasi'
    }
}

gawe validasiUmur(umur) {
    coba {
        lamun umur < 0 {
            buang anyar KasalahanValidasi('Umur teu tiasa negatif!')
        }
        lamun umur > 150 {
            buang anyar KasalahanValidasi('Umur teu wajar!')
        }
        tulis('Umur valid:', umur)
        
    } cekel (err) {
        lamun err.ngaran == 'KasalahanValidasi' {
            tulis('Validasi gagal:', err.message)
        } atawa {
            tulis('Error teu dipikawanoh:', err)
        }
    }
}

validasiUmur(-5)   // Validasi gagal: Umur teu tiasa negatif!
validasiUmur(200)  // Validasi gagal: Umur teu wajar!
validasiUmur(25)   // Umur valid: 25

10. DOM Manipulation

Selecting Elements

// pilih - querySelector
hayu judul = pilih('#judul')
hayu tombol = pilih('.tombol-utama')

// pilihSadaya - querySelectorAll
hayu paragraf = pilihSadaya('p')
hayu items = pilihSadaya('.item')

// Akses element properties
tulis(judul.textContent)
tulis(tombol.innerHTML)

Event Listeners

// dengekeun - addEventListener
hayu tombol = pilih('#tombol-klik')

tombol.dengekeun('klik', (e) => {
    tulis('Tombol diklik!')
    tulis('Event:', e)
})

// Multiple events
hayu input = pilih('#input-ngaran')

input.dengekeun('focus', () => {
    tulis('Input di-focus')
})

input.dengekeun('blur', () => {
    tulis('Input blur')
})

input.dengekeun('input', (e) => {
    tulis('Nilai:', e.target.value)
})

Manipulating Elements

// Mengubah konten
hayu kotak = pilih('.kotak')
kotak.textContent = 'Teks anyar'
kotak.innerHTML = '<strong>Teks bold</strong>'

// Mengubah style
kotak.style.backgroundColor = 'blue'
kotak.style.color = 'white'
kotak.style.padding = '20px'

// Mengubah class
kotak.classList.add('aktif')
kotak.classList.remove('nonaktif')
kotak.classList.toggle('highlight')

lamun kotak.classList.contains('aktif') {
    tulis('Kotak aktif')
}

// Mengubah attributes
hayu gambar = pilih('img')
gambar.setAttribute('src', 'foto-baru.jpg')
gambar.setAttribute('alt', 'Deskripsi gambar')

hayu src = gambar.getAttribute('src')

Creating & Removing Elements

// Membuat element baru
hayu divBaru = document.createElement('div')
divBaru.textContent = 'Elemen anyar'
divBaru.classList.add('kotak', 'anyar')

// Menambahkan ke DOM
hayu container = pilih('.container')
container.appendChild(divBaru)

// Insert at specific position
container.insertBefore(divBaru, container.firstChild)

// Menghapus element
hayu elementHapus = pilih('.hapus-ieu')
elementHapus.remove()

// Atau dengan parent
elementHapus.parentElement.removeChild(elementHapus)

🎨 Fitur Extension

1. Syntax Highlighting

Kode Sundawi akan ditampilkan dengan warna yang indah dan mudah dibaca:

  • Keywords (gawe, lamun, pikeun) - Ungu
  • Functions (tulis, ambil) - Kuning
  • Strings - Oranye
  • Numbers - Hijau muda
  • Comments - Hijau tua

2. IntelliSense & Autocomplete

Ketik beberapa huruf dan dapatkan saran kode otomatis:

  • Keyword suggestions
  • Function names
  • Variable names
  • Object properties
  • Import suggestions

3. Code Snippets

Ketik prefix dan tekan Tab untuk expand:

  • gawe → Template function
  • lamun → Template if statement
  • kelas → Template class
  • pikeun → Template for loop
  • gasync → Template async function

4. Error Detection

Deteksi kesalahan real-time:

  • Syntax errors
  • Undefined variables
  • Type mismatches
  • Missing semicolons (opsional)

5. Hover Documentation

Hover mouse di atas keyword untuk melihat dokumentasi instant dengan contoh penggunaan.

6. Code Formatting

Tekan Shift+Alt+F untuk format kode otomatis:

  • Indentasi konsisten
  • Spacing yang benar
  • Bracket alignment

⚙️ Settings

Customize extension di VSCode Settings:

{
  "sundawi.formatting.indentSize": 4,
  "sundawi.formatting.useTabs": false,
  "sundawi.formatting.semicolons": "optional",
  "sundawi.linting.enabled": true,
  "sundawi.linting.strictMode": false,
  "sundawi.intellisense.autoImport": true,
  "sundawi.intellisense.suggestions": true,
  "sundawi.transpiler.target": "ES2020",
  "sundawi.transpiler.module": "ESM"
}

📋 Command Palette

Tekan Ctrl+Shift+P / Cmd+Shift+P dan ketik:

  • Sundawi: Gawe File Anyar - Buat file .sundawi baru
  • Sundawi: Jalankeun File - Run file saat ini
  • Sundawi: Format Dokumén - Format kode
  • Sundawi: Ngarobah ka JavaScript - Transpile ke JS
  • Sundawi: Buka Dokumentasi - Buka docs
  • Sundawi: Cék Vérsi - Cek versi extension

🎯 Contoh Project

Todo List App

kelas TodoApp {
    gawe constructor() {
        ieu.todos = []
        ieu.render()
    }
    
    gawe tambahTodo(teks) {
        hayu todo = {
            id: Date.now(),
            teks: teks,
            rengse: salah
        }
        ieu.todos.push(todo)
        ieu.render()
    }
    
    gawe hapusTodo(id) {
        ieu.todos = ieu.todos.saring(t => t.id != id)
        ieu.render()
    }
    
    gawe toggleTodo(id) {
        hayu todo = ieu.todos.find(t => t.id == id)
        lamun todo {
            todo.rengse = lain todo.rengse
            ieu.render()
        }
    }
    
    gawe render() {
        hayu list = pilih('#todo-list')
        list.innerHTML = ''
        
        unggal ieu.todos jadi todo {
            hayu item = document.createElement('li')
            item.className = todo.rengse ? 'rengse' : ''
            item.innerHTML = `
                <span>${todo.teks}</span>
                <button data-id="${todo.id}" class="hapus">Hapus</button>
            `
            list.appendChild(item)
        }
    }
}

// Inisialisasi
hayu app = anyar TodoApp()

// Event listeners
hayu form = pilih('#todo-form')
form.dengekeun('submit', (e) => {
    e.preventDefault()
    hayu input = pilih('#todo-input')
    app.tambahTodo(input.value)
    input.value = ''
})

hayu list = pilih('#todo-list')
list.dengekeun('click', (e) => {
    lamun e.target.classList.contains('hapus') {
        hayu id = tos(e.target.dataset.id)
        app.hapusTodo(id)
    }
})

API Fetching Example

kelas UserService {
    gawe constructor() {
        ieu.baseUrl = 'https://jsonplaceholder.typicode.com'
    }
    
    gawe async ambilSadayaPamaé() {
        coba {
            hayu respon = antosan ambil(`${ieu.baseUrl}/users`)
            hayu users = antosan respon.json()
            mulangkeun users
        } cekel (err) {
            tulis('Gagal ambil data:', err)
            buang err
        }
    }
    
    gawe async ambilPamaeById(id) {
        coba {
            hayu respon = antosan ambil(`${ieu.baseUrl}/users/${id}`)
            hayu user = antosan respon.json()
            mulangkeun user
        } cekel (err) {
            tulis('Gagal ambil user:', err)
            mulangkeun kosong
        }
    }
    
    gawe async buatPamaé(data) {
        coba {
            hayu respon = antosan ambil(`${ieu.baseUrl}/users`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(data)
            })
            mulangkeun antosan respon.json()
        } cekel (err) {
            tulis('Gagal buat user:', err)
            buang err
        }
    }
}

// Penggunaan
gawe async main() {
    hayu service = anyar UserService()
    
    // Ambil semua users
    hayu users = antosan service.ambilSadayaPamaé()
    tulis('Total users:', users.panjangna)
    
    // Ambil user tertentu
    hayu user = antosan service.ambilPamaeById(1)
    tulis('User 1:', user.name)
    
    // Buat user baru
    hayu userBaru = {
        name: 'Asep Sunandar',
        email: 'asep@example.com',
        username: 'asepdev'
    }
    hayu hasil = antosan service.buatPamaé(userBaru)
    tulis('User baru dibuat:', hasil)
}

main()

Calculator App

kelas Kalkulator {
    gawe constructor() {
        ieu.display = pilih('#display')
        ieu.nilaiSaiki = '0'
        ieu.operatorSaiki = kosong
        ieu.nilaiSebelumna = kosong
        ieu.setupEventListeners()
    }
    
    gawe setupEventListeners() {
        // Number buttons
        hayu numberButtons = pilihSadaya('.number')
        unggal numberButtons jadi btn {
            btn.dengekeun('klik', () => ieu.inputNumber(btn.textContent))
        }
        
        // Operator buttons
        hayu operatorButtons = pilihSadaya('.operator')
        unggal operatorButtons jadi btn {
            btn.dengekeun('klik', () => ieu.setOperator(btn.dataset.operator))
        }
        
        // Equal button
        pilih('#equals').dengekeun('klik', () => ieu.calculate())
        
        // Clear button
        pilih('#clear').dengekeun('klik', () => ieu.clear())
        
        // Decimal button
        pilih('#decimal').dengekeun('klik', () => ieu.addDecimal())
    }
    
    gawe inputNumber(num) {
        lamun ieu.nilaiSaiki == '0' {
            ieu.nilaiSaiki = num
        } atawa {
            ieu.nilaiSaiki += num
        }
        ieu.updateDisplay()
    }
    
    gawe setOperator(op) {
        lamun ieu.operatorSaiki != kosong jeung ieu.nilaiSebelumna != kosong {
            ieu.calculate()
        }
        ieu.operatorSaiki = op
        ieu.nilaiSebelumna = kajadianGedé(ieu.nilaiSaiki)
        ieu.nilaiSaiki = '0'
    }
    
    gawe calculate() {
        lamun ieu.operatorSaiki == kosong atawa ieu.nilaiSebelumna == kosong {
            mulangkeun
        }
        
        hayu a = ieu.nilaiSebelumna
        hayu b = kajadianGedé(ieu.nilaiSaiki)
        hayu hasil
        
        pilih ieu.operatorSaiki {
            kasus '+':
                hasil = a + b
                tepi
            kasus '-':
                hasil = a - b
                tepi
            kasus '*':
                hasil = a * b
                tepi
            kasus '/':
                hasil = b != 0 ? a / b : 'Error'
                tepi
            baku:
                mulangkeun
        }
        
        ieu.nilaiSaiki = hasil.toString()
        ieu.operatorSaiki = kosong
        ieu.nilaiSebelumna = kosong
        ieu.updateDisplay()
    }
    
    gawe addDecimal() {
        lamun lain ieu.nilaiSaiki.includes('.') {
            ieu.nilaiSaiki += '.'
            ieu.updateDisplay()
        }
    }
    
    gawe clear() {
        ieu.nilaiSaiki = '0'
        ieu.operatorSaiki = kosong
        ieu.nilaiSebelumna = kosong
        ieu.updateDisplay()
    }
    
    gawe updateDisplay() {
        ieu.display.textContent = ieu.nilaiSaiki
    }
}

// Jalankan aplikasi
hayu calc = anyar Kalkulator()

🔧 Troubleshooting

Extension tidak berfungsi?

  1. Restart VSCode - Tekan Ctrl+Shift+P > "Developer: Reload Window"
  2. Cek versi VSCode - Minimal versi 1.75.0
  3. Reinstall extension - Uninstall lalu install kembali
  4. Cek output panel - View > Output > Pilih "Sundawi"

Syntax highlighting tidak muncul?

  1. Pastikan file berekstensi .sundawi atau .sw
  2. Tekan Ctrl+Shift+P > "Change Language Mode" > Pilih "Sundawi"
  3. Reload window

IntelliSense tidak bekerja?

  1. Buka Settings > sundawi.intellisense.suggestions harus true
  2. Pastikan Language Server Protocol aktif
  3. Restart VSCode

Error saat transpile?

  1. Cek syntax error di file Sundawi
  2. Pastikan semua import path benar
  3. Lihat error message di terminal

Contribution Guidelines

  • Gunakan bahasa Sunda untuk keyword/function names
  • Tulis test untuk fitur baru
  • Update dokumentasi jika perlu
  • Follow code style yang ada
  • Commit message dalam bahasa Indonesia/Inggris


🎓 Learning Path

Level 1: Pemula (1-2 minggu)

  1. Instalasi VSCode dan Extension
  2. Variabel dan Tipe Data
  3. Operator dan Kontrol Flow
  4. Fungsi Dasar
  5. Array dan Object

Level 2: Menengah (2-4 minggu)

  1. Class dan OOP
  2. Async/Await
  3. Module System
  4. Error Handling
  5. DOM Manipulation

Level 3: Advanced (4-8 minggu)

  1. Design Patterns
  2. API Integration
  3. State Management
  4. Testing
  5. Build & Deploy

📝 Changelog

Version 1.0.0 (2024-01-15)

  • 🎉 Initial release
  • ✨ Syntax highlighting
  • 🔍 IntelliSense & autocomplete
  • 📦 50+ code snippets
  • 🐛 Error detection
  • 📖 Hover documentation

Version 1.1.0 (Coming Soon)

  • 🚀 Performance improvements
  • 🎨 New color themes
  • 📚 More snippets
  • 🔧 Better error messages
  • 🌐 Multi-language support (EN/ID)

📄 License

MIT License

Copyright (c) 2024 EHFCreative

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


👨‍💻 Creator

EHFCreative

Sundawi Programming Language dan VSCode Extension ini dikembangkan dengan ❤️ oleh EHFCreative untuk memajukan komunitas developer Sunda dan Indonesia.


Social Media

Follow untuk update terbaru:

  • Twitter: @sundawiLang
  • Instagram: @sundawi.lang
  • Facebook: Sundawi Programming

📮 Contact & Support

Technical Support

  • 📧 Email: info@ehfcreative.xyz

  • 🐛 Bug Reports: GitHub Issues

  • 📧 Email: info@ehfcreative.com

Media & Press

  • 📧 Email: press@ehfcreative.com

🔐 Security

Found a security vulnerability? Please report it to:

  • 📧 security@sundawi-lang.com
  • Do NOT open public GitHub issues for security vulnerabilities

We take security seriously and will respond within 48 hours.


Made with ❤️ by EHFCreative

Sundawi Programming Language © 2024

Website • Docs • GitHub •

⭐ Jangan lupa star repository jika bermanfaat! ⭐


"Ngahaturkeun nuhun parantos ngangge Sundawi Programming Language"

"Thank you for using Sundawi Programming Language"

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft