[[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
}