馃殌 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 {
val engine = KitsuneScriptEngine()
val result = engine.eval("""
let message = "Witaj ze skryptu!";
print(message);
42; // Zwracana warto艣膰
""")
println("Wynik: $result")
}
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()
engine.register("log", HostFunction { args, _ ->
println(args.joinToString(" ") { it.asString() })
Value.Null
})
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)
engine = KitsuneScriptEngine()
lifecycleScope.launch {
val result = engine.evalSuspend("""
let suma = 0;
for (i in 1..100) {
suma = suma + i;
}
suma;
""")
binding.resultText.text = "Suma: $result"
}
}
}
艁adowanie modu艂贸w
Modu艂y s膮 艂adowane na 偶膮danie przy u偶yciu dyrektywy use:
use "math";
use "string";
let result = sqrt(16);
let words = split("a,b,c", ",");
print(result);
print(words);
Przekazywanie warto艣ci do skryptu
val engine = KitsuneScriptEngine()
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臋
""")
when (result) {
is Value.MapVal -> {
val name = result.map["name"]?.asString()
println("Imi臋: $name")
}
}
Prosty przyk艂ad: Kalkulator
val engine = KitsuneScriptEngine()
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?