KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ
Stan, formularz i komenda
Czego się nauczysz
- Prześledź źródła i wyjaśnij opisany kontrakt.
- W FormActionBinding prześledź wartość pola, akcję i handler. Zapisz, w którym miejscu błędna nazwa przerwie kontrakt.
Wymagania wstępne
- Ukończ Podstawy i wcześniejszy poziom tej ścieżki.
Wyjaśnienie krok po kroku
Binding łączy element widoku ze stanem, a akcja wywołuje opisaną komendę KretS. Sam przycisk nie uzyskuje praw do hosta. Śledź nazwę akcji do manifestu i implementacji, zanim dodasz kolejne połączenie danych.
Praca z kodem źródłowym
Formularz, binding i akcja do KretS
Pole `input` z walidacją (`required`, `maxLength`), akcja `greet` wywołująca komendę KretS `greet.make(name: String) -> String`, wynik zapisywany w stanie (`result`), flaga `busy`, komunikat błędu (`error`) i warunek `enabled "form.valid and not busy"`. Kompilacja sprawdza sygnaturę handlera i blok `handlers` manifestu.
module Main
fn Start() {
}
fn Shutdown() {
}
// Komenda wywoływana przez akcję interfejsu. Logika działa w osobnym procesie pluginu.
on greet.make(name: String) -> String {
if len(name.trim()) == 0 {
throw "Podaj imię."
}
return "Cześć, " + name.trim() + "!"
}
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
module MainDeklaracja modułu KretS; porównaj nazwę z nazwą pliku.Pusta linia oddziela fragmenty źródła.fn Start() {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.fn Shutdown() {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.// Komenda wywoływana przez akcję interfejsu. Logika działa w osobnym procesie pluginu.Komentarz autora; nie jest wykonywany.on greet.make(name: String) -> String {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.if len(name.trim()) == 0 {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.throw "Podaj imię."Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.}Zamknięcie struktury otwartej we wcześniejszych liniach.return "Cześć, " + name.trim() + "!"Zwrócenie wartości z funkcji; nie jest zapisem do dziennika.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.
Oczekiwany wynik: Kod 0; `self-test.json` zawiera wykonane kroki, a klatka pokazuje „Cześć, Ala!”.
Typowy błąd: Akcja wskazująca komendę, której nie ma w bloku `handlers` manifestu albo handler o innej sygnaturze — błąd kompilacji projektu.
Instrukcja, wersje i zapisane wyniki →Materiały źródłowe do tego tematu
Przeczytaj powiązane rozdziały. Kod i kontrakty zachowano z importu; historia źródeł jest dostępna przy każdym rozdziale.
KretUI — API / CLI
KretUI — API / CLI
Polski
| API / polecenie | Opis |
|---|---|
kretui-host <projekt> [--view N] [--variant dark|highContrast] [--touch] [--width N] [--height N] [--data D] | podgląd w oknie |
kretui-host <projekt> --self-test <katalog> [--input ścieżka=tekst] [--click ścieżka] | render bez okna, prawdziwe zdarzenia, frame.png + self-test.json (kretui-self-test/1) |
kretui-host … --list-views | --serve [--window] | EXPERIMENTAL: kretui-views/1, sesja kretui-session/1 dla IDE |
UiDesigner (C#) | minimalne zamiany tekstu .kretui dla projektanta (SetProperty, InsertComponent, …) |
KretUI — specyfikacja (zakres kontraktu 1.0)
KretUI — specyfikacja (zakres kontraktu 1.0)
Status 1.0: `FROZEN_SUPPORTED_SUBSET` — zamrożony dokładnie opisany zakres; reszta poza kontraktem 1.0. Gramatyka/wersja: kretui-1.0 · kstyle-1.0 · ktheme-1.0. Status języka nie nadaje uprawnień KCS ani prawa do działania w Production.Źródła normatywne (kopie w Sources/, kolejność pierwszeństwa: decyzje właściciela → zamrożony kontrakt → kod SDK → testy):
LANGUAGE_FREEZE_1_0/07_KRETUI_SPECIFICATION.md- SDK
04_Languages/KretUI/README.md - SDK
04_Languages/KretUI/SESJA_KRETUI.md - SDK
04_Languages/KretStyle/README.md - SDK
04_Languages/KTheme/README.md
Elementy języka
| Element | Stan w KretUI |
|---|---|
| Struktura pliku | kretui "1.0", potem view Nazwa { title width height state { … } action … open … <kontener> { … } }. |
| Rozszerzenia | .kretui, .kstyle, .ktheme (najwyżej jeden motyw na projekt). |
| Komentarze | //, /* … */. |
| Typy stanu | Bool Int64 Float64 String StringList Rows; StringList ≤ 64 × 512 znaków, ≤ 8192 razem. |
| Wyrażenia | w cudzysłowie: nazwy, literały, == != < <= > >=, not and or, nawiasy, empty(x), count(x), env.size|touch|highContrast|reduceMotion|textScale, form.valid. |
| Funkcje / pętle | nie istnieją — logika w KretS; listy renderowane z StringList/Rows. |
| Teksty | podstawienia {zmienna}; {{ }} = dosłowne klamry. |
Zakres poza kontraktem / ograniczenia
tooltip,menu,contextMenu,chart(NOT_SUPPORTED,KCS-KUI-0107)- gesty, canvas, animacje, wiele okien/monitorów, kiosk, widżety, profile dashboardów (PLANNED, KretUI 1.x)
- logika w stylu/motywie (błąd „nieznana właściwość”)
- piaskownica renderera — renderer działa z prawami użytkownika
- Zamrożone to, co realnie renderuje renderer SDK (łatki 8–11).
- P09 (
results,onBlur,shortcut) — PROPOSED_LOCAL (G-07). - Funkcje z bazy wiedzy niezaimplementowane w rendererze → KretUI 1.x (PLANNED).
- Znane ograniczenie tej rundy (EXP-F02):
kretui-host --self-testnie dołącza bibliotek KretLib (KCS-KRS-1003).
Pełna referencja konstrukcji: SYNTAX_REFERENCE.md.
KretUI — samouczek INTERMEDIATE
KretUI — samouczek INTERMEDIATE
Status 1.0: `FROZEN_SUPPORTED_SUBSET` — zamrożony dokładnie opisany zakres; reszta poza kontraktem 1.0. Gramatyka/wersja: kretui-1.0 · kstyle-1.0 · ktheme-1.0. Status języka nie nadaje uprawnień KCS ani prawa do działania w Production.Cel: moduły, łączenie funkcji, dane, konfiguracja, komunikacja, obsługa błędów, interfejsy SDK.
Narzędzia: kret = <SDK>\Compiler\kret.exe (SDK 1.0.0-rc.3+kret.local.3), kretui-host = <SDK>\UiHost\kretui-host.exe. {DATA}/{OUT} = nowe, puste katalogi.
1. Formularz, binding i akcja do KretS (KRETUI-I01-FormActionBinding)
Projekt: ../../Examples/INTERMEDIATE_FormActionBinding/ · klasyfikacja RUNNABLE_LOCAL · Playground LOCAL_EXECUTE
Kroki (katalog roboczy: katalog przykładu):
kret check . --json— w wyniku:"succeeded": truekretui-host . --self-test {OUT}/frame --data {DATA} --policy host-policy.json --input 0/1/0=Ala --click 0/1/1
Wynik tej rundy: PASS — zob. EXPECTED_OUTPUT.txt.
Ćwiczenie i sprawdzenie wiedzy
W FormActionBinding prześledź wartość pola, akcję i handler. Zapisz, w którym miejscu błędna nazwa przerwie kontrakt.
Szkic nie jest wysyłany na serwer i znika po opuszczeniu lekcji. Przed wyjściem możesz go skopiować.Podpowiedzi
- KretUI opisuje strukturę i interakcje interfejsu (widoki, stan, bindingi, akcje do komend KretS). KretStyle opisuje wygląd (selektory, kaskada, stany, `media`), KTheme — motyw (tokeny, warianty `dark`/`highContrast`, kontrola kontrastu WCAG). Renderer SDK (Avalonia) działa we własnym procesie, logika w procesie pluginu. Interfejs nie nadaje uprawnień i nie przechowuje sekretów.
- Odczytaj ograniczenia i oczekiwane błędy z dostarczonego samouczka; check i run są oddzielnymi krokami.
Omówienie rozwiązania
Odpowiedź oprzyj na pokazanym kodzie i rozdziale źródłowym. Binding łączy element widoku ze stanem, a akcja wywołuje opisaną komendę KretS. Sam przycisk nie uzyskuje praw do hosta. Śledź nazwę akcji do manifestu i implementacji, zanim dodasz kolejne połączenie danych.
Podsumowanie i następny krok
Binding łączy element widoku ze stanem, a akcja wywołuje opisaną komendę KretS. Sam przycisk nie uzyskuje praw do hosta. Śledź nazwę akcji do manifestu i implementacji, zanim dodasz kolejne połączenie danych.
Zaloguj się na konto użytkownika, aby zapisywać postęp i zakładki. Konta obsługi mogą czytać bez zapisu postępu. Logowanie →