diff --git a/README.md b/README.md index e136e95..0816b63 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ export PATH=:$PATH or by adding this path to `~/.profile`. When this is done, you can execute the command: ```shell -reveal-md docs/index.md +reveal-md docs/slides.md -w ``` ## Kotlin Native Build diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 39d68af..0000000 --- a/docs/index.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Dezentrale Kotlin Course -separator: -verticalSeparator: -theme: night -revealOptions: -transition: 'fade' ---- - -# Kotlinkurs - - - -## Kotlin die Multiplattform-Sprache - -- JVM: Java-Code kann in Kotlin eingebunden werden und umgekehrt -- Android: Ausführung auf verschiedenen Geräten -- JS: Client-Anwendungen lauffähig im Browser -- Native: Kompilieren für jedes Betriebssystem (bspw. Windows, Linux, iOS und macOS) - - - -## Mehrere Programmierparadigmen möglich - -- _imperative_ Programmierung, -- _objektorientierte_ Programmierung, -- _generische_ Programmierung, -- _funktionale_ Programmierung und mehr. - - - -## Etwas Geschichte - -- Kotlin wurde **2011** erstmals vorgestellt und -- seit **2010** entwickelt -- **2016** wurde Version 1.0 veröffentlicht -- **2017** auf Google I/O erstklassiger Support angekündigt - - - -## Ein Beispielprogramm - -Hello-World, wie üblich (siehe [Main.kt](../src/nativeMain/kotlin/Main.kt)): - -```kotlin -fun main() { - println("Hello, Kotlin/Native!") -} -``` - - - -## Grundlegende Begriffe (1/2) - -- Ein **Programm** ist eine Folge von Anweisungen, die nacheinander ausgeführt werden. -- Eine **Anweisung** ist ein einzelner auszuführender Befehl (drucke den Text), -- Ein **Ausdruck** ist ein Codestück, das einen einzigen Wert ergibt (z. B. ist 2*2 ein Ausdruck) - - - -## Grundlegende Begriffe (2/2) - -- Ein **Block** ist eine Gruppe von Anweisungen, in einem Paar geschweifter Klammern `{...}` -- Des Weiteren gibt es noch: - - **Schlüsselwörter** - Wort mit besonderer Bedeutung in der Programmiersprache - - **Bezeichner** - Wort um etwas zu identifizieren - - **Kommentare** - Text der beim Ausführen des Programms identifiziert wird - -## Analyse Hello-World-Programm diff --git a/docs/slides.md b/docs/slides.md new file mode 100644 index 0000000..de11189 --- /dev/null +++ b/docs/slides.md @@ -0,0 +1,149 @@ +--- +title: Dezentrale Kotlin Course +separator: +verticalSeparator: +theme: night +revealOptions: +transition: 'fade' +--- + +# Kotlinkurs + + + +## Kotlin die Multiplattform-Sprache + +- **JVM**: Java-Code kann in Kotlin eingebunden werden und umgekehrt +- **Android**: Ausführung auf verschiedenen Geräten +- **JS**: Client-Anwendungen lauffähig im Browser +- **Native**: Kompilieren für jedes Betriebssystem (bspw. Windows, Linux, iOS und macOS) + + + +## Mehrere Programmierparadigmen möglich + +- _imperative_ Programmierung, +- _objektorientierte_ Programmierung, +- _generische_ Programmierung, +- _funktionale_ Programmierung und mehr. + + + +## Etwas Geschichte + +- Kotlin wurde **2011** erstmals vorgestellt und +- seit **2010** entwickelt +- **2016** wurde Version 1.0 veröffentlicht +- **2017** auf Google I/O erstklassiger Support angekündigt + + + +## Ein Beispielprogramm + +Hello-World, wie üblich (siehe [Main.kt](../src/nativeMain/kotlin/Main.kt)): + +```kotlin +fun main() { + println("Hello, Kotlin/Native!") +} +``` + + + +## Grundlegende Begriffe (1/2) + +- Ein **Programm** ist eine Folge von Anweisungen, die nacheinander ausgeführt werden. +- Eine **Anweisung** ist ein einzelner auszuführender Befehl (drucke den Text), +- Ein **Ausdruck** ist ein Codestück, das einen einzigen Wert ergibt (z. B. ist 2*2 ein Ausdruck) + + + +## Grundlegende Begriffe (2/2) + +- Ein **Block** ist eine Gruppe von Anweisungen, in einem Paar geschweifter Klammern `{...}` +- Des Weiteren gibt es noch: + - **Schlüsselwörter** - Wort mit besonderer Bedeutung in der Programmiersprache + - **Bezeichner** - Wort um etwas zu identifizieren + - **Kommentare** - Text der beim Ausführen des Programms identifiziert wird + + + +## Variablen deklarieren + +- **val** (für value) deklariert unveränderliche Variable +- **var** (für Variable) deklariert eine veränderbare Variable + +Der anschließende, zwingend erforderliche Name darf nicht mit einer Zahl beginnen! + + + +### Beispiel unveränderliche Variable: + +```kotlin +val language = "Kotlin" +``` + +
+⚠ Achtung: Variablennamen sind case-sensitiv: + +language != Language +
+ + +### Beispiel veränderliche Variable: + +```kotlin +var dayOfWeek = "Monday" +println(dayOfWeek) // prints Monday + +dayOfWeek = "Tuesday" +println(dayOfWeek) // prints Tuesday +``` + + + +### Variablen und Datentypen (1/2) + +Variablen in Kotlin wird durch Wertzuweisung ein Typ (Zahl oder Zeichenkette) zugewiesen. + +D. h. folgender Code ist nicht möglich: + +```kotlin +var aString = "lorem ipsum" +aString = 0.815 +``` + + +### Variablen und Datentypen (2/2) + +Variablen kann ein Typ zugewiesen werden: + +```kotlin +val aString : String +print(aString) // Fehler, Variable nicht initialisiert! +``` + + + +### Unveränderbarkeit von **`val`** + +Unveränderbare Werte, innerer Status: + +```kotlin +val anagram = "Anagram".toCharArray() +println(anagram.joinToString()) // -> "A, n, a, g, r, a, m" +anagram.sort() +println(anagram.joinToString()) // -> "A, a, a, g, m, n, r" +``` + + + +## Ein neues Projekt beginnen + +Installieren von [SdkMan](https://sdkman.io/install "Link zur Installationsseite von SdkMan") + +Kontrollieren, ob SdkMan installiert ist: + +```shell +sdk version +``` \ No newline at end of file diff --git a/src/nativeMain/kotlin/Main.kt b/src/nativeMain/kotlin/Main.kt index 71cf2c6..1ea2388 100644 --- a/src/nativeMain/kotlin/Main.kt +++ b/src/nativeMain/kotlin/Main.kt @@ -1,4 +1,3 @@ fun main() { println("Hello, Kotlin/Native!") -// println(containsDuplicate(intArrayOf(1, 23, 34, 1))) } \ No newline at end of file diff --git a/src/nativeMain/kotlin/space.dezentrale.prgrnd/Anagram.kt b/src/nativeMain/kotlin/space.dezentrale.prgrnd/Anagram.kt new file mode 100644 index 0000000..a2d27e4 --- /dev/null +++ b/src/nativeMain/kotlin/space.dezentrale.prgrnd/Anagram.kt @@ -0,0 +1,12 @@ +package space.dezentrale.prgrnd + +class Anagram { + fun isAnagram(s: String, t: String): Boolean { + val sArray = s.toCharArray() + sArray.sort() + val tArray = t.toCharArray() + tArray.sort() + + return sArray.contentEquals(tArray) + } +} \ No newline at end of file diff --git a/src/nativeMain/kotlin/space.dezentrale.prgrnd/ContainsDuplicate.kt b/src/nativeMain/kotlin/space.dezentrale.prgrnd/Duplicates.kt similarity index 100% rename from src/nativeMain/kotlin/space.dezentrale.prgrnd/ContainsDuplicate.kt rename to src/nativeMain/kotlin/space.dezentrale.prgrnd/Duplicates.kt diff --git a/src/nativeTest/kotlin/space/dezentrale/prgrnd/AnagramTest.kt b/src/nativeTest/kotlin/space/dezentrale/prgrnd/AnagramTest.kt new file mode 100644 index 0000000..c4e0e57 --- /dev/null +++ b/src/nativeTest/kotlin/space/dezentrale/prgrnd/AnagramTest.kt @@ -0,0 +1,21 @@ +package space.dezentrale.prgrnd + +import kotlin.test.Test +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class AnagramTest { + @Test + fun `'anagram' is an anagram of 'nagaram'`() { + val anagram = Anagram() + + assertTrue { anagram.isAnagram("anagram", "nagaram") } + } + + @Test + fun `'rat' is not an anagram of 'car'`() { + val anagram = Anagram() + + assertFalse { anagram.isAnagram("rat", "car") } + } +} \ No newline at end of file