SwaziLang Example Programs
This file contains a variety of practical, idiomatic SwaziLang examples for learners and developers.
You'll find complete mini-projects, function usage patterns, class-based designs, database-like modeling, event buses, and more.
Copy, adapt, and use these as building blocks in your own SwaziLang projects!
1. Todo List Project (Interactive CLI)
swazi
tumia regex kutoka "regex"
data todos = []
data usg = `
Usage commands: \n
>>> list — To list all todos
>>> add — To add new todos (open the prompt)
>>> remove <id> — To remove a todo (with a specified id)
${"_".rudia(40)} \n
>>> quit — turn off the todo app
>>> help / h — to see this help again
`
chapisha usg
chapisha "Start todoing..."
data TODO_CUR_ID = 1
kazi add:
id = TODO_CUR_ID
title = soma(">>> Weka title: ")
desc = soma(">>> Weka description: ")
todos.ongeza({ id, title, desc })
TODO_CUR_ID++
kazi listing:
kwa kila val,i katika todos:
chapisha `${Neno(i + 1)}) id: ${Neno(val.id)}, ${val.title}\n => .... ${val.desc}`
kazi namba_sahihi n:
kama n.nineno:
kama regex.match(n, "\\D") {
rudisha sikweli
}
rudisha Namba(n).ninamba na !Namba(n).siSahihi
vinginevyo:
fanya {
jaribu:
rudisha n.ninamba na !n.siSahihi
makosa err:
rudisha sikweli
}
kazi removing line:
data cmd_arr = line.orodhesha(" ")
data [cmd, ...ids] = cmd_arr
kama ids.idadi == 0:
chapisha "You should use id(s) after rm/remove command"
rudisha
kwa kila val,i katika ids:
kama !namba_sahihi(val):
chapisha "Invalid Id used, please use numeric id eg. remove 1 2 3"
rudisha
data tdi = todos.tafutaIndex(e => e.id == val)
kama todos.ondoa(todos[tdi]):
chapisha `Todo yenye id ${val} imeondolowa kwenye orodha.`
endelea
vinginevyo:
chapisha `Huwezi kufuta todo id(${val}), haipo kwenye orodha`
endelea
rudisha
wakati kweli:
data line = soma(`${todos.idadi>0?Neno(todos.idadi):">"}>> `).sawazisha()
kama line sawa "help" au line sawa "h":
chapisha usg
endelea
kama line sawa "list" au line sawa "l" au line sawa "ls":
listing()
endelea
kama line sawa "add":
add()
chapisha "Todo added successifully..."
endelea
kama line.orodhesha(" ").kuna("remove") au line.orodhesha(" ").kuna("rm"):
removing(line)
endelea
kama line sawa "quit" au line sawa "q":
chapisha "quiting..."
simama
kama line sawa "":
endelea
chapisha "Command not found"2. Simple Database & Table Modeling (Classes and Instances)
swazi
muundo Db:
&db_name
&tables = {}
Db(db_name):
$.db_name = db_name
tabia add_table(tb_obj):
$.tables[tb_obj.tb_name] = tb_obj
&tabia delete_db:
// logic here
&tabia rename_db new_name:
$.db_name = new_name
&tabia delete_tb(tb_inst):
$.tables[tb_inst.tb_name] = null
muundo Table:
&rows = []
Table(db_instance, tb_name, ...cols):
$.db_instance = db_instance
$.tb_name = tb_name
$.cols = cols
$.db_instance.add_table($)
&tabia create(...dt):
data rowOb = {}
kwa kila col,i katika $.cols:
rowOb[col] = dt[i]
$.rows.ongeza(rowOb)
&tabia read(id):
rudisha $.rows.tafuta(r => r.id == id)
&tabia update(id, ob):
data entry = $.rows.tafuta(r => r.id == id)
data nobj = {
...entry,
...ob
}
$.rows.ondoa(entry)
$.rows.ongeza(nobj)
&tabia delete(id):
$.rows.ondoa($.rows.tafuta(r => r.id == id))
data app = unda Db("app")
data user_table = unda Table(app, "users", "id", "name", "married")
data post_table = unda Table(app, "posts", "id", "content", "like_counts")
user_table.create(3, "John Doe", kweli)
user_table.create(5, "Jane Doe", sikweli)
post_table.create(1, "Hello world", 400)
user_table.update(3, {
name: "Hans Doe",
married: sikweli
})
app.rename_db("app_db")
chapisha app3. Event Bus (Simple Pub/Sub)
swazi
muundo Bus:
&listeners = {}
&cache = []
&tabia emit(evt, ...payload):
kama !$.listeners[evt]:
$.cache.ongeza({ evt: evt, payload: payload })
rudisha
kwa kila cb katika $.listeners[evt]:
cb(...payload)
&tabia on(evt, cb):
$.listeners[evt] = []
$.listeners[evt].ongeza(cb)
kama $.cache.idadi > 0:
kwa kila e katika $.cache:
kama e.evt === evt:
cb(...e.payload)
data bus = unda Bus
bus.emit("evt", "ddd")
bus.emit("evt", "ddd")
bus.on("evt", (p) => {
chapisha p
})4. File Operations (Built-in Module Example)
swazi
tumia fs # to use filesystem operations
data filename = "test.txt"
fs.writeFile(filename, "Hello world")
data content = fs.readFile(filename)
chapisha content5. Timers & Async (Built-in Module Example)
swazi
tumia async # to use timer API / and async operations
async.setTimeout(2000, () => chapisha "2 seconds passed")
data id = async.setInterval(1000, () => chapisha "Tick")
async.setTimeout(5000, () => async.clearInterval(id))6. Date & Time Usage (Global and Class API)
swazi
chapisha muda("YYYY-MM-DD") // Format current date
data d = unda Muda(2025, 10, 14, 19, 12, 17) // Create specific date/time
chapisha d.iso()
chapisha d.sikuYaJuma("ddd") // Day name
data future = d.ongeza("siku", 5)
chapisha future.fmt("YYYY-MM-DD")
chapisha future.object()7. Regex Search and Replace
swazi
tumia regex kama reg // to use the built in regex API
data s = "abc 123 def 456"
data found = reg.match(s, "\\d+", "g") // Find all numbers
chapisha found
data replaced = reg.replace(s, "\\d+", "X", "g")
chapisha replaced8. Array Operations (Member Methods)
swazi
data arr = Orodha(1, 2, 3)
arr.ongeza(4)
chapisha arr.idadi // 4
chapisha arr.unganisha(", ") // "1, 2, 3, 4"
chapisha arr.panga() // sorts (lexicographically)
chapisha arr.slesi(1, 3) // [2, 3]9. String Methods
swazi
data s = " Example Text "
chapisha s.sawazisha() // "Example Text"
chapisha s.herufiKubwa() // " EXAMPLE TEXT "
chapisha s.herufiNdogo() // " example text "
chapisha s.kuna("Text") // kweliCasino Game in SwaziLang
swazi
tumia console // to use console.print() as expresion instead of chapisha <exp> statement
kazi ask(qn) {
rudisha soma(qn);
}
// -----------------------
// Structures
// -----------------------
muundo Player {
Player(name, balance) {
self.name = name;
self.balance = balance;
self.choice = "tail"; // head or tail
self.bet = 0;
}
}
muundo Game {
Game(minBet = 1) {
self.players = [];
self.round = 0;
self.minBet = minBet;
}
tabia addPlayer(player) {
self.players.push(player);
}
tabia allQuit() {
rudisha self.players.every(p => p.balance <= 0);
}
tabia playRound() {
self.round += 1;
chapisha `\n------ Round ${self.round} ------`;
chapisha `Players: ${self.players.urefu()}`;
// 1) Each player decides to play or skip
kwa p katika self.players {
kama (p.balance <= 0) {
chapisha (`${p.name} has no money. Skipping...`);
p.bet = 0;
endelea;
}
chapisha (`\n${p.name} - Balance: ${p.balance}`);
data yn = ask("Do you want to play? (1=yes, 0=no): ");
kama (yn === "0") {
chapisha (`${p.name} decides to skip self round.`);
p.bet = 0;
endelea;
}
data choice = ask("Choose 1=head or 0=tail: ");
kama (choice === "1") =>> p.choice = "head";
sivyo kama (choice === "0") =>> p.choice = "tail";
sivyo {
chapisha ("Invalid choice, defaulting to tail.");
p.choice = "tail";
}
data betStr = ask(`Enter bet (min ${self.minBet}): `);
data betNum = Namba(betStr) || self.minBet;
kama (betNum < self.minBet) {
chapisha (`Bet below min. Setting to ${self.minBet}`);
betNum = self.minBet;
}
kama (betNum > p.balance) {
chapisha (`Not enough balance. Betting all-in: ${p.balance}`);
betNum = p.balance;
}
p.bet = betNum;
chapisha (`${p.name} bets ${p.bet} on ${p.choice}`);
}
// 2) Flip coins and resolve
chapisha ("\nFlipping coins...");
kwa p katika self.players {
kama (p.bet <= 0) =>> endelea;
data flip = (Hesabu.rand()).kadiria(); // 0 or 1
data flipStr = flip === 1 ? "head" : "tail";
chapisha (`${p.name} flipped: ${flipStr}`);
fanya =>> data tt = 0; wakati tt < 1e3 =>> tt++; # keep a small wait
data won = (flip === 1 && p.choice === "head") || (flip === 0 && p.choice === "tail");
kama (won) {
p.balance += p.bet; // win = profit = bet
chapisha (`✅ ${p.name} won! Bet ${p.bet} => new balance ${p.balance}`);
} sivyo {
p.balance -= p.bet;
chapisha (`❌ ${p.name} lost ${p.bet} => new balance ${p.balance}`);
}
p.bet = 0;
p.choice = "tail"; // reset for next round
}
// 3) Show leaderboard
chapisha ("\n--- Leaderboard ---");
data thabiti board = [...self.players].panga((a, b) => b.balance - a.balance);
board.forEach(p => console.print(`${p.name} : ${p.balance}`));
chapisha ("-------------------\n");
}
}
// -----------------------
// Setup & Main Loop
// -----------------------
kazi main() {
data thabiti minBetInput = ask("Enter minimum bet (default 1): ");
data thabiti minBet = Namba(minBetInput) || 1;
data thabiti game = unda Game(minBet);
data thabiti numPlayersInput = ask("Number of players: ");
data thabiti numPlayers = Namba(numPlayersInput) || 1;
kwa (i = 1; i <= numPlayers; i++) {
data thabiti name = ask(`Name of player ${i}: `);
data thabiti startBalanceInput = ask(`Starting balance of ${name} (default 100): `);
data thabiti startBalance = Namba(startBalanceInput) || 100;
game.addPlayer(unda Player(name, startBalance));
}
console.print("\nGame start! Let’s go.\n");
wakati (kweli) {
kama (game.allQuit()) {
console.print("No players with money left. Game over.");
simama;
}
data thabiti cmd = ask("Choose: 1=Round, 2=Leaderboard, 0=Quit: ");
kama (cmd === "0") {
console.print("\nFinal standings:");
data thabiti finalBoard = [...game.players].sort((a, b) => b.balance - a.balance);
finalBoard.forEach(p => console.print(`${p.name} : ${p.balance}`));
simama;
} sivyo kama (cmd === "1") {
game.playRound();
} sivyo kama (cmd === "2") {
console.print("\n--- Current leaderboard ---");
data thabiti board = [...game.players].sort((a, b) => b.balance - a.balance);
board.forEach(p => console.print(`${p.name} : ${p.balance}`));
console.print("---------------------------\n");
} sivyo {
console.print("Invalid option, try again.");
}
}
}
main();