Siirry pääsisältöön

Kotlin DSL

Avaa ChatGPT:ssä
25.12 Koe-aloite

webforJ tarjoaa Kotlin Domain Specific Language, eli DSL:n, jonka avulla voit rakentaa käyttöliittymiä tiiviillä, tyyppi-turvallisella syntaksilla. Sen sijaan, että kirjoitat imperatiivista Java-koodia, kirjoitat deklaraatiokoodia, joka lukee kuin kuvaus käyttöliittymäsi rakenteesta.

Java
FlexLayout layout = new FlexLayout();
layout.setDirection(FlexDirection.COLUMN);
layout.setSpacing("10px");

TextField name = new TextField();
name.setLabel("Nimi");
name.setPlaceholder("Nimesi");
layout.add(name);

Button submit = new Button("Lähetä", ButtonTheme.PRIMARY);
submit.onClick(e -> handleSubmit());
layout.add(submit);
Kotlin DSL
flexLayout {
direction = FlexDirection.COLUMN
styles["gap"] = "10px"

textField("Nimi", placeholder = "Nimesi")
button("Lähetä", ButtonTheme.PRIMARY) {
onClick { handleSubmit() }
}
}

DSL hyödyntää Kotlinin laajennusfunktioita, vastaanottajalla varustettuja lambdaja ja oletusparametreja luodakseen luonnollisen rakennussyntaksin. Komponentit pesiytyvät toistensa sisälle, konfigurointi tapahtuu lohkossa, ja kääntäjä havaitsee rakenteelliset virheet ennen suorittamista.

Setup​

Experimental feature
This feature is experimental and may change or be removed in a future release.

Erillistä Kotlin-asennusta ei tarvita. Maven huolehtii käännöksestä Kotlin Maven -lisäosan kautta, joten mikä tahansa projekti, joka jo kääntää Mavenilla, voi lisätä Kotlin-tuen riippuvuus- ja lisäosasäätöjen avulla.

Nopea aloitus

Jos haluat käynnistää webforJ-projektin käyttäen Kotlinia kaikilla tarvittavilla kokoonpanoilla valmiiksi, katso tämä osio webforJ Kotlin -aloitusprojektin käytöstä.

Riippuvuudet​

Lisää webforJ Kotlin DSL -moduuli ja Kotlinin standardikirjasto pom.xml-tiedostoon:

<dependency>
<groupId>com.webforj.kotlin</groupId>
<artifactId>webforj-kotlin</artifactId>
<version>${webforj.version}</version>
</dependency>

<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>${kotlin.version}</version>
</dependency>

Jos aiot kirjoittaa testejä Kotlinilla, lisää myös Kotlin-testiriippuvuus. Se integroituu JUnit:iin:

<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test</artifactId>
<version>${kotlin.version}</version>
<scope>test</scope>
</dependency>

Kotlin Maven -lisäosa​

Lisää Kotlin Maven -lisäosa kääntämään sekä Kotlin- että Java-lähdekoodisi. Alla oleva sourceDirs-konfiguraatio sallii Kotlin- ja Java-tiedostojen elää samassa projektissa:

<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/main/java</sourceDir>
<sourceDir>target/generated-sources/annotations</sourceDir>
<sourceDir>src/main/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/test/java</sourceDir>
<sourceDir>target/generated-test-sources/test-annotations</sourceDir>
<sourceDir>src/test/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
<configuration>
<jvmTarget>${maven.compiler.target}</jvmTarget>
</configuration>
</plugin>

Näiden lisäysten myötä mvn compile kääntää Kotlin-lähteet yhdessä Java-lähteiden kanssa. Kotlin-tiedostot voivat olla src/main/kotlin tai src/main/java -kansiossa, ja lisäosa huolehtii molemmista.

Java-yhteensopivuus

Kotlin kääntyy JVM-tavukoodiksi, joten se toimii yhdessä olemassa olevan Java-koodin kanssa. Voit käyttää DSL- rakennettuja Kotlin-kokoonpanoja Java-luokista, pesiyttää standardeja Java-komponentteja DSL-lohkoihin add()-metodilla, ja sekoittaa Kotlin- ja Java-tiedostoja samassa projektissa.

Kotlin aloitusprojekti​

Jos haluat ohittaa manuaalisen asetuksen, webforJ Kotlin Starter -repo tarjoaa valmiin projektin kaikilla riippuvuuksilla ja lisäosasäätöillä jo paikallaan. Kloonaa se ja ala rakentaa DSL:n kanssa heti.

Aiheita​

Seuraavat aiheet käsittelevät DSL:n käyttöä sekä sen laajentamista kaikkiin muokattuihin komponentteihin tai yhdistelmiin, joita luot.