[[oktatas:programozás:kotlin|< Kotlin]] ====== Kotlin nyelv ====== * **Szerző:** Sallai András * Copyright (c) 2020, Sallai András * Szerkesztve: 2020, 2023 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Helló világ ===== fun main() { println("Helló Világ!") } Fordítás: kotlinc src/prog.kt -d bin Futtatás: java -cp bin ProgKt JVM fordítás: kotlinc prog.kt -include-runtime -d prog.jar Kapunk egy prog.jar fájlt. Futtatás: java -jar prog.jar A kotlin forráskódok kiterjesztése a következők egyike lehet: * .kt * .kts * .ktm ===== Megjegyzés ===== Egysoros megjegyzés: // egysoros megjegyzés Többsoros megjegyzés: /* több soros megjegyzés */ ===== Kivitel ===== fun main() { print("Szám: ") } fun main() { println("Eredmény: ") } Ha a println() számára megadok egy kifejezést, az kiértékelésre kerül. fun main() { println(5/2) // 2 println(5/2.0) // 2.5 } Osztás esetén egész osztás történik, ha csak egész számok esetén. Ha szeretnénk a példában található 2, valós számként értelmeztetni, egyszerűen írjuk utána .0 meghatározást. fun main() { val a = 2; println(5 / a) // 2 println(5 / a.toDouble()) //2.5 } ==== Hibakimenet ==== A kotlin nem tartalmaz kiírató utasítást, amely az alapértelmezett kimenetre ír. De használhatjuk a Java szabványos utasítását: System.err.println("Hiba") ===== Típusok ===== ^ Egész típusok ^^^^ ^ Típus ^ Bitek ^ Min érték ^ Max érték ^ | Long | 64 | -9223372036854775808 | 9223372036854775807 | | Int | 32 | -2147483648 | 2147483647 | | Short | 16 | -32768 | 32767 | | Byte | 8 | -128 | 127 | ^ Valós típusok ^^^ ^ Típus ^ Bitek ^ Leírás ^ | Double | 64 | 16-17 értékes szám (mint a float a Python nyelven) | | Float | 32 | 6-7 értékes szám | ^ Egyéb ^^^ ^ Típus ^ Bitek ^ Leírás ^ | Char | 16 | UTF-16 kód | | Boolean | 8 | true vagy false | ===== Változók ===== A változókat használat előtt deklarálni kell, vagyis be kell jelenteni. Ezt a var kulcsszóval tehetjük meg. var szam = 30 var uzenet = "helló" Csak olvasható változó: val number = 30 val uzenet = "helló" A helyes terminológia szerint, ez csak változó, csak olvasható változó. A val kulcsszóval nem deklarálunk állandót, mivel annak értékét nem kell definiálni fordításkor. Állandó: const val szam = 2 Típus megahatározása: var a = 35 var b: Byte = 35; var c: Int = 45; var d: Short = 55; Ha nem adjuk meg a változó típusát, és belefér az Int típusba, akkor Int lesz. De beállíthatjuk egy szám típusát: var e = 65.toShort() var f = 75.toByte() ===== Formázott kimenet ===== Használható formátumkarakterek: ^ Néhány konverziós karakter ^^ | %d | egész kiíratása | | %f | valós kiíratása | | %c | karakter kiíratása | | %s | karaktersorozat kiíratása | fun main() { val szam = 34.12345 println("Eredmény: %.2f".format(szam)) } ===== Matematikai függvények ===== Hatványozás: println(Math.pow(2.0,3.0)) Pi értéke: println(Math.PI) Szinusz: fun main() { var szog = 1.0 var rad = szog * Math.PI / 180 println(Math.sin(rad)) } ===== Bevitel ===== fun main() { print("Szám: ") val szam = readLine()!!.toInt() println("Szám: "+ szam * 2) } Beolvasás másként: import java.util.Scanner fun main() { print("Szám: ") val input = Scanner(System.`in`) val szam = input.nextInt() println("Eredmény: " + szam) } Újra: fun main() { print("Szám: ") val szam:Int = readLine()!!.toInt() println("Dupla: " + szam * 2) } ===== Szelekció ===== ==== if ==== fun main() { val szam = 30 if(szam > 0) { println("A szám pozitív") } } Ellenben: fun main() { val szam = -30 if(szam > 0) { println("A szám pozitív") }else { println("A szám nulla vagy negatív") } } Több ágú szelekció: fun main() { val szam = -30 if(szam > 0) { println("A szám pozitív") }else if(szam < 0) { println("A szám negatív") }else { println("A szám nulla") } } ==== when ==== fun main() { print("Szám: ") var szam = readLine()!!.toInt() when(szam) { 1 -> println("egy") 2 -> println("kettő") 3 -> println("három") 4 -> println("négy") else -> { println("Nem 1..4 közötti szám") } } } fun main() { print("Szám: ") var szam = readLine()!!.toInt() when(szam) { 1, 2 -> println("egy vagy kettő") else -> { println("Valami más") } } } fun main() { print("Szám: ") var szam = readLine()!!.toInt() var szamok = (10..20).toList() when(szam) { in 1..10 -> println("1 és 10 között") in szamok -> println("10 és 20 között") else -> { println("Valami más") } } } fun main() { print("Szám: ") var szam = readLine()!!.toInt() var szamok = (10..20).toList() when(szam) { in 1..10 -> println("1 és 10 között") in szamok -> println("10 és 20 között") !in 20..30 -> println("nem 20 és 30 közötti szám") else -> { println("Valami más") } } } ===== Ciklus ===== ==== for ==== fun main() { for(i in 0..9) { println("Helló Világ!") } } A 10 kizárása: fun main() { for(i in 0 until 10) { println(i) } } Léptetés 2-vel: fun main() { for(i in 0 until 10 step 2) { println(i) } } Csökkentés: fun main() { for(i in 10 downTo 0 step 2) { println(i) } } ==== while ==== fun main() { var szam = 0 while(szam<10) { println("Valami") szam++ } } ==== do..while ==== fun main() { var szam = 0 do { println("Valami") szam++ }while(szam<10); } ===== Lista ===== fun main() { var szamok = (0..9).toList() println(szamok[2]) } val nevek = listOf("Kati", "Mari", "Dani") for (nev in nevek) { println(nev) } ===== Karakterek ===== val ch = 'a' // karakter val uzenet = "alma" // karaktersorozat val elso = uzenet[0] // karakter ==== Konkatenálás ==== fun main() { val vnev = "Nagy" val knev = "János" val nev = "$vnev $knev" println(nev) } ==== Kifejezés kiértékelése ==== fun main() { val szuletesEv = 1985 val jelenEv = 2020 println("Életkor: ${jelenEv - szuletesEv}") } ===== Fájlkezelés ===== File("adat.txt").writeText("alma") import java.io.File fun main() { File("adat.txt").writeText("alma\nkörte\nbarack") File("adat.txt").forEachLine { println(it) } } ===== Függvények ===== fun main() { nevjegy() } fun nevjegy() { println("Nagy János") println("Szolnok") println("Kék utca 32.") } fun dupla(szam: Int): Int { return szam * 2 }