Przejdź do treści

KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ

Stan, formularz i komenda

INTERMEDIATE30 min
Postęp nauki 0 / 3
Zaloguj się na konto użytkownika, aby zachować postęp.

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.

  1. module MainDeklaracja modułu KretS; porównaj nazwę z nazwą pliku.
  2. Pusta linia oddziela fragmenty źródła.
  3. fn Start() {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  4. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  5. Pusta linia oddziela fragmenty źródła.
  6. fn Shutdown() {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  7. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  8. Pusta linia oddziela fragmenty źródła.
  9. // Komenda wywoływana przez akcję interfejsu. Logika działa w osobnym procesie pluginu.Komentarz autora; nie jest wykonywany.
  10. on greet.make(name: String) -> String {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  11. if len(name.trim()) == 0 {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
  12. throw "Podaj imię."Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
  13. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  14. return "Cześć, " + name.trim() + "!"Zwrócenie wartości z funkcji; nie jest zapisem do dziennika.
  15. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  16. 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 / polecenieOpis
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, …)
Otwórz cały rozdział ze źródłem →
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

ElementStan w KretUI
Struktura plikukretui "1.0", potem view Nazwa { title width height state { … } action … open … <kontener> { … } }.
Rozszerzenia.kretui, .kstyle, .ktheme (najwyżej jeden motyw na projekt).
Komentarze//, /* … */.
Typy stanuBool Int64 Float64 String StringList Rows; StringList ≤ 64 × 512 znaków, ≤ 8192 razem.
Wyrażeniaw cudzysłowie: nazwy, literały, == != < <= > >=, not and or, nawiasy, empty(x), count(x), env.size|touch|highContrast|reduceMotion|textScale, form.valid.
Funkcje / pętlenie istnieją — logika w KretS; listy renderowane z StringList/Rows.
Tekstypodstawienia {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-test nie dołącza bibliotek KretLib (KCS-KRS-1003).

Pełna referencja konstrukcji: SYNTAX_REFERENCE.md.

Otwórz cały rozdział ze źródłem →
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):

  1. kret check . --json — w wyniku: "succeeded": true
  2. kretui-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.

Otwórz cały rozdział ze źródłem →

Ć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.

Które podsumowanie jest zgodne z lekcją?

To quiz o opisanym kontrakcie. Nie kompiluje kodu, nie potwierdza wykonania programu i nie przyznaje nagród.

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 →

Wybierz, co możemy zapamiętać w tej przeglądarce. Możesz zmienić decyzję w każdej chwili.

Polityka prywatności