馃殌 Szybki start

Ten przewodnik pomo偶e Ci uruchomi膰 pierwszy skrypt KitsuneScript w ci膮gu kilku minut.

Podstawowe u偶ycie w Kotlinie

import rip.nerd.kitsunescript.api.KitsuneScriptEngine import kotlinx.coroutines.runBlocking fun main() = runBlocking { // 1. Utw贸rz silnik val engine = KitsuneScriptEngine() // 2. Uruchom prosty skrypt val result = engine.eval(""" let message = "Witaj ze skryptu!"; print(message); 42; // Zwracana warto艣膰 """) println("Wynik: $result") // Wynik: 42.0 }

Rejestracja funkcji hostowych

Mo偶esz rozszerzy膰 skrypt o w艂asne funkcje:

import rip.nerd.kitsunescript.runtime.HostFunction import rip.nerd.kitsunescript.runtime.Value val engine = KitsuneScriptEngine() // Zarejestruj funkcj臋 "log" engine.register("log", HostFunction { args, _ -> println(args.joinToString(" ") { it.asString() }) Value.Null }) // Teraz mo偶na u偶y膰 w skrypcie engine.eval(""" log("To", "jest", "log!"); """)

U偶ycie w Android Activity

class MainActivity : AppCompatActivity() { private lateinit var engine: KitsuneScriptEngine override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Inicjalizacja silnika engine = KitsuneScriptEngine() // Uruchom skrypt asynchronicznie lifecycleScope.launch { val result = engine.evalSuspend(""" let suma = 0; for (i in 1..100) { suma = suma + i; } suma; """) // Aktualizuj UI binding.resultText.text = "Suma: $result" } } }

艁adowanie modu艂贸w

Modu艂y s膮 艂adowane na 偶膮danie przy u偶yciu dyrektywy use:

// W skrypcie use "math"; use "string"; let result = sqrt(16); // z modu艂u math let words = split("a,b,c", ","); // z modu艂u string print(result); // 4 print(words); // ["a", "b", "c"]

Przekazywanie warto艣ci do skryptu

val engine = KitsuneScriptEngine() // Ustaw zmienne globalne przed uruchomieniem engine.setGlobal("userName", "Jan") engine.setGlobal("userAge", 25) engine.eval(""" print("Witaj " + userName + "!"); print("Masz " + userAge + " lat"); """)

Odbieranie warto艣ci ze skryptu

val engine = KitsuneScriptEngine() val result = engine.eval(""" let user = { name: "Alice", age: 30, hobbies: ["coding", "gaming"] }; user; // Zwr贸膰 map臋 """) // result jest typu Value when (result) { is Value.MapVal -> { val name = result.map["name"]?.asString() println("Imi臋: $name") } }

Prosty przyk艂ad: Kalkulator

val engine = KitsuneScriptEngine() // Rejestruj funkcj臋 do pobierania inputu engine.register("input", HostFunction { args, _ -> print(args.firstOrNull()?.asString() ?: "") Value.Str(readLine() ?: "") }) engine.eval(""" use "math"; fn calculate(a, b, op) { return when op { "+" -> a + b, "-" -> a - b, "*" -> a * b, "/" -> a / b, "^" -> pow(a, b), _ -> "Nieznana operacja" }; } let a = toNumber(input("Podaj a: ")); let b = toNumber(input("Podaj b: ")); let op = input("Operacja (+,-,*,/,^): "); print("Wynik: " + calculate(a, b, op)); """)
馃挕 Wskaz贸wka

Modu艂 core jest zawsze za艂adowany i zawiera podstawowe funkcje jak print, typeOf, size, itp.

Co dalej?