Voit itse lisätä ja muuttaa sisältöä muokkaa-painikkeiden avulla
Ennen tallennusta suositellaan ottamaan kopio muokkausruudusta (ctrl-a -> ctrl-c)
Olet itse vastuussa tämän teoksen käytöstä aiheutuvista vahingoista Lue lisää.
Kotlin
Johdanto
Ohjelmointikieli erityisesti Android-laitteille. Yhteensopiva Javan ja muiden ohjelmointikielien kanssa.
Sivulla käytettävät otsikot ja nimet eivät ole yleisesti käytettyjä. Ne voi muuttaa vapaasti sellaisiksi.
Komennot
Funktio
- fun määrittää funktion
- fun funktionimi() { ... }
- Funktion nimi aloitetaan pienellä kirjaimella ja uusi sana aloitetaan isolla kirjaimella ja kaikki sanat kirjoitetaan yhteen.
- Funktion parametrit ovat () sisällä. Parametri sisältää tyypin. Parametrit erotetaan pilkulla. Palautettava tyyppi määritellään : jälkeen.
- Funktion toiminto on {} sisällä.
- return poistuu funktiosta esimerkiksi kun ehto täyttyy tai palauttaa jotain funktiosta. Return ei tarvitse käyttää jos palautetaan 1 arvo???
- fun main() { ... } Ohjelmat aloitetaan main-funktiolla ja kirjoitetaan hakasulkeiden sisään.
fun funktionimi() {
return println("teksti")
}
fun main () {
funktionimi()
}
val nimi2 = mutableListOf ("mansikka")
fun funktionimi(nimi: String): String {
if (nimi in nimi2) {
return "Löytyy luettelosta."
}
nimi2.add(nimi) // mustikkaa ei ollut luettelossa joten lisätään
return "Uusi nimi lisätty."
}
fun main() {
println(funktionimi("mustikka"))
fun funktionimi(nimi: String, nimi2: String) {
// fun funtionimi(nimi: String, nimi2: String = "teksti") { // oletusarvolla
println("$nimi $nimi2")
}
fun main() {
funktionimi(nimi = "teksti", nimi2 = "teksti2")
funktionimi("teksti", "teksti2")
// funktionimi("teksti") // nimi2 käyttää oletusarvoa
fun funktionimi(a: Int, b: Int): Int {
return a * b
}
fun main () {
println(funktionimi(2, 3))
fun funktionimi(a: Int, b: Int) = a * b
fun main () {
prinln(funktionimi(2, 3))
}
- Osaan funktioista viitataan esim. println("Ensimmäinen on ${listanimi.first()}")
Lambada
- Kirjoitetaan {} sisään
- Parametrien jälkeen -> ja sen jälkeen funktio
val nimi2 = { nimi: String -> nimi.uppercase() }
Funktioita
- Muunnos isoiksi kirjaimiksi
- return nimi.uppercase()
Jos (if), kun (when)
Suositeltavaa käyttää when.
- when
- Vertailtava arvo asetetaan () sisään ja ehdot ja toiminta {} sisään. Etsii järjestyksessä kunnes ehto täsmää ja tässä tulostaa sen.
- Statement ei palauta mitään
val nimi = "punainen"
val nimi2 = when (nimi) {
"vihreä" -> "raaka"
"punainen" -> "kypsä"
else -> "tuntematon"
println(nimi2)
val nimi = "mansikka"
when (nimi) {
"mustikka" -> println("mustikka")
"mansikka" -> println("mansikka on oikein")
else -> println("ei löydy")
}
val nimi = "mansikka"
val nimi2 = when {
nimi == "punainen" -> "kypsä"
nimi == "vihreä" -> "raaka"
else -> "tuntematon"
}
println(nimi2)
- Expression palauttaa arvon. Etsii järjestyksessä kunnes ehto täsmää ja tallentaa arvon muuttujaan.
val nimi = "mansikka"
val tulos = when (nimi) {
"mustikka" -> "mustikka"
"mansikka" -> "mansikka on oikein"
else -> "ei löydy"
println(tulos)
- if
- Ehto asetetaan () sisään ja toiminta {} sisään.
val nimi: Int
val nimi2 = true
if (nimi2 { // on tosi eli true
nimi = 10
} else { // on epätosi
nimi = 20
}
val nimi = 10 val nimi2 = 20 println(if (nimi < nimi2) nimi else nimi2) // tulostaa 10
Teksti
- print
- print("teksti")
- println
- println("teksti")
- println(muuttujanimi)
- println("Muuttujan arvo on $muuttujanimi")
- println("Muuttujan arvo lisättynä viidellä on ${muuttujanimi + 5}") // voi olla myös val
Toisto
1..3 tarkoittaa 1, 2, 3 'a'..'c' tarkoittaa 'a', 'b', 'c' 1..<3 tarkoittaa 1, 2 3 downTo 1 tarkoittaa 3, 2, 1 'e' downTo 'a' step 2 tarkoittaa 'e', 'c', 'a' 1..5 step 2 tarkoittaa 1, 3, 5
- for
- Määrätyllä alueella toimintojen suorittaminen.
for (nimi in 1..3) {
print(nimi)
val nimi = listOf ("mansikka", "mustikka", "puolukka")
for (nimi2 in nimi) {
println("Tulostetaan $nimi2")
}
- while
- Toimintojen suorittaminen kunnes määrätty ehto on totta.
- Ehto () sisään ja toiminta {} sisään.
var nimi = 0
while (nimi < 5) {
println("tuloste")
nimi++
}
- 'do-while
- Ensin suoritetaan määrättyä toimintoa X kertaa ja sitten seuraavaa toimintoa X kertaa.
var nimi = 0
var nimi2 = 0
while (nimi < 5) {
println("tuloste") // tulostetaan 5 kertaa
}
do {
println("tuloste2") // tulostetaan 5 kertaa
nimi2++
} while (nimi2 < nimi)
Kommentti
- // kommentti
Muuttujat
Muuttujiin tallennetaan tietoa. Muuttuja voidaan määritellä main()-funktion ulkopuolella.
- val vain luettava muuttuja, jonka arvoa ei voida muuttaa määrittelyn jälkeen. Pääsääntöisesti näitä.
- val nimi = 5
- var muuttuja, jonka arvoa voidaan muuttaa.
- var nimi = 10
- nimi += 10 tai nimi = nimi + 10
- nimi -= 10 tai nimi *=10 tai nimi /=10 tai nimi %=
Tyypit
- Merkkijono String
- val nimi: String = "teksti"
- Kokonaisarvot Byte, Short, Int, Long
- val nimi: Int = 10
- Float, Double
- val hinta: Double = 9.99
- Boolean
- val nimi: Boolean = false
- Char
- val nimi: Char = "-"
- UByte, Ushort, Uint, ULong
- Muuttujan "muoto" voidaan määritellä myös ilman arvoa:
val nimi: Int nimi = 10
Luettelo
List
Useita artikkeleita luettelossa.
- ListOf() vain lukukäyttö
- val nimi = listOf("mansikka", "mustikka")
- println("Listan ensimmäinen on ${nimi[0]}") // luettelon määrätyn artikkelin tulostaminen
- println("Listan ensimmäinen on ${nimi.first()}") tai viimeinen .last()
- println("Listassa on ${nimi.count()} artikkelia") // listassa olevien lukumäärä
- println("mustikka" in nimi) // luettelossa olevan artikkelin olemassa olon tarkistaminen, vastaus true/false
- val nimi = listOf("mansikka", "mustikka")
- mutableListOf() lista, jonka artikkeleiden tyyppi on määritelty.
- val nimi: MutableList<String> = mutableListOf("mansikka", "mustikka")
- val nimiLukittu: List<String> = nimi // luettelon lukitseminen
- nimi.add("puolukka") // artikkelin lisääminen listan loppuun
- nimi.remove("mansikka") // ensimmäisen nimeen sopivan artikkelin poistaminen listalta
- val nimi: MutableList<String> = mutableListOf("mansikka", "mustikka")
Set
Vain yksi kutakin samaa artikkelia huomioidaan luettelossa, vaikka olisi luettelossa useampi sama artikkeli. Ei järjestystä, jolloin listalta ei voida poimia määrättyä artikkelia.
- setOf() vain lukukäyttö
- val nimi = setOf("mansikka", "mustikka")
- println("Luettelossa on ${nimi.count()} artikkelia") // luettelossa olevien lukumäärä
- println("mustikka" in nimi) // luettelossa olevan artikkelin olemassa olon tarkistaminen, vastaus true/false
- mutableSetOf()
- val nimi: MutableSet<String> = mutableSetOf("mansikka", "mustikka")
- val nimiLukittu: Set<String> = nimi // luettelon lukitseminen
- nimi.add("puolukka") // artikkelin lisääminen listan loppuun
- nimi.remove("mansikka") // artikkelin poistaminen listalta
Map
Artikkeleiden tallentaminen avainpareina. Arvo saadaan avainta pyytämällä. Avaimen täytyy olla ainutkertainen luettelossa.
- mapOf()
- val nimi = mapOf"mansikka" to 10, "mustikka" to 20)
- println("Mustikan arvo on ${nimi["mustikka"]}") // artikkelin arvon tulostaminen
- println(nimi.keys) // avaimien tulostus (tässä keys on ominaisuus eli property)
- println(nimi.values) // arvojen tulostus
- println("Luettelossa on ${nimi.count()} avainparia") // luettelossa olevien lukumäärä
- println(nimi.containsKey("mustikka")) // luettelossa olevan artikkelin olemassa olon tarkistaminen, vastaus true/false
- println("mustikka" in nimi) // luettelossa olevan avaimen olemassa olon tarkistaminen, vastaus true/false
- println("mustikka" in nimi.keys) // luettelossa olevan avaimen olemassa olon tarkistaminen, vastaus true/false
- println("10" in nimi.values) // luettelossa olevan arvon olemassa olon tarkistaminen, vastaus true/false
- mutableMapOf()
- val nimi: MutableMap<String, Int> = mutableMapOf("mansikka" to 10, "mustikka" to 20)
- val nimiLukittu: Map<String, Int> = nimi // luettelon lukitseminen
- nimi["puolukka"] = 30 // lisätään uusi avainpari luettelon loppuun
- nimi.remove("puolukka") // poistetaan avainpari
Luokka
- Luokka (class) määrittelee objektin luonteen.
- Objekti (object) soveltuu tiedon tallentamiseen. Objekti luodaan luokasta.
- class Luokkannimi // luokan määrittäminen
- class Luokkanimi(val nimi: String, var nimi2: Int) // luokan ominaisuuksien määrittäminen
class Luokkanimi(var nimi: String = "teksti", var nimi2: Int) {
val nimi3: String = ""
}
- Objektin luominen luokasta tehdään määrittelemällä instanssi käyttäen konstruktoria.
class Luokkanimi(val nimi: String, var nimi2: Int) // luokka
fun main() {
val instanssinimi = Luokkanimi("teksti", 10) // luodaan luokan instanssi ominaisuuksilla (property)
println(instanssinimi.nimi) // tulostetaan ominaisuus
instanssinimi.nimi = "uusiteksti" // muutetaan ominaisuus
println("Ominaisuus on ${instanssinimi.nimi}")
println(instanssinimi.copy()) // luodaan kopio
println(instanssinimi.copy("teksti2")) // luodaan kopio nimellä teksti2
println(instanssinimi.copy(nimi2 = 20)) // luodaan lopio teksti2 arvolla 20
}
class Luokkanimi(val nimi: String, var nimi2: Int) {
fun funktionimi() {
println(nimi)
}
}
fun main() {
val instanssinimi = Luokkanimi("teksti", 10)
instanssinimi.funktionimi()
Data classes
Valmiita luokkia Kotlinissa.
- data class Luokkanimi(val nimi: String, var nimi2: Int)
Null
Kun jotain ei ole vielä määritelty tai puuttuu. Oletuksena null-arvoa ei hyväksytä ja annetaan virheilmoitus. Hyväksyntä tehdään kysymysmerkillä (?).
fun main() {
var eiKoskaanNull: String = "Arvo ei voi olla tyhjä."
eiKoskaanNull = null
var nullArvo: String? = "Arvoi voi olla tyhjä."
nullArvo = null
}
- Arvon tarkastaminen
fun tarkastus(tarkastettava: String?): String {
if (tarkastettava != null && tarkastettava.length > 0) {
return "Pituus on ${tarkastettava.length}."
} else {
return "Tyhjä."
}
}
fun main() {
val tarkasta: String? = null
println(tarkastus(tarkasta))
}
- Objektin ominaisuus, joka saattaa sisältää null-arvon
fun pituusTarkistus(tarkastettava: String?): Int? = tarkastettava?.length
fun main() {
val tarkasta: String? = null
println(pituusTarkitus(tarkasta))
}
- Elvis-operaattori palauttaa nolla-arvon
fun main() {
val tarkasta: String? = null
println(tarkasta?.length ?: 0)
}