Sinds Apple de Swift-programmeertaal voor iOS heeft uitgebracht, hebben veel Android-ontwikkelaars een soortgelijke taal gezocht voor Android-ontwikkeling. Als je een van die ontwikkelaars bent, ga je dol zijn op Kotlin, een JVM-taal die opvallend veel op Swift lijkt.
Kotlin is een statisch getypeerde taal, ontwikkeld door JetBrains, waarvan de syntaxis expressiever en beknopter is dan die van Java. Met functies zoals hogere-orde functies, lambda-expressies, operator-overloading, string-sjablonen en meer, heeft Kotlin veel meer te bieden dan Java. Omdat Java en Kotlin zeer interoperabel zijn, kunnen ze samen in hetzelfde project worden gebruikt.
Als je een bekwaam programmeur bent op Java, kun je Kotlin in een zeer korte tijd leren. In deze tutorial laat ik je zien hoe je de meest gebruikte constructies van Kotlin gebruikt.
Om met mij mee te gaan, hebt u nodig:
Om een klasse in Kotlin te maken, moet je de klasse
trefwoord. Hier ziet u bijvoorbeeld hoe u een lege klasse maakt met de naam Persoon:
"java class Person
"
Een klasse heeft meestal eigenschappen en lidfuncties (ook methoden genoemd). Laten we twee eigenschappen toevoegen aan de Persoon
klasse, naam van type Draad
en leeftijd van type Int
.
java var name: String = "" var age: Int = 0
Zoals u ziet, is de syntaxis voor het maken van variabelen enigszins anders dan die voor Java. Om een variabele in Kotlin te maken, moet u de var
trefwoord. Als u echter wilt dat uw variabele een alleen-lezen / assign-once-variabele is, gebruikt u de val
sleutelwoord in plaats daarvan.
Omwille van de nulveiligheid maakt Kotlin ook een onderscheid tussen variabelen die kunnen zijn nul
en variabelen die nooit kunnen zijn nul
. In ons vorige voorbeeld, beide variabelen naam
en leeftijd
kan nooit zijn nul
. Als ze null zijn, geeft de compiler een foutmelding.
Een variabele maken die kan worden vastgehouden nul
, je moet een toevoegen ?
naar het type van de variabele. Bijvoorbeeld:
java var college: String? = null
Nu we een klasse hebben, is het eenvoudig om er een instantie van te maken:
java var jake = Persoon ()
Nee, Kotlin heeft de nieuwe
trefwoord. Nadat de instantie is gemaakt, hebt u toegang tot de eigenschappen op dezelfde manier als in Java:
java jake.name = "Jake Hill" jake.age = 24 jake.college = "Stephen's College"
Het initialiseren van de individuele eigenschappen van onze instantie zoals we dat net deden, is geen goede codeermethode. Een betere manier om dit te doen zou zijn door een constructor te gebruiken. De syntaxis van Kotlin om zo'n constructor te maken is erg compact:
"java class Person (var name: String, var age: Int, var college: String?)
"
Als je niets anders aan je klas kunt toevoegen, heb je de accolades niet nodig. De volgende code werkt prima:
"java class Person (var naam: String, var leeftijd: Int, var college: String?)
var jake = Person ("Jake Hill", 24, "Stephen's College") "
Het is misschien al voor de hand liggend dat er geen manier is om aangepaste code aan deze constructor toe te voegen. Deze constructor, die deel uitmaakt van de kop van de klasse, wordt de primaire constructor genoemd.
Om meer constructors aan uw klasse toe te voegen, bekend als secundaire constructors, moet u de bouwer
trefwoord. Secundaire constructeurs moeten delegeren naar de primaire constructor met behulp van de deze
trefwoord. Laten we een secundaire constructor toevoegen aan onze klasse die de waarde van een eigenschap met de naam initialiseert e-mail:
"java class Person (var name: String, var age: Int, var college: String?)
var email: String = "" constructor (naam: String, leeftijd: Int, college: String ?, email: String): this (name, age, college) this.email = email "
Als u een exemplaar wilt maken met de secundaire constructor, schrijft u zoiets als dit:
java var jake = Person ("Jake Hill", 24, "Stephen's College", "[email protected]")
In Kotlin worden functies gemaakt met behulp van de pret
trefwoord. Laten we een eenvoudige lidfunctie toevoegen met de naam isEligibleToVote dat levert a op Boolean
waarde:
"java fun isLittableToVote (): Boolean // Als de leeftijd groter is dan of gelijk is aan 18 // return true
terugkeer leeftijd> = 18 "
Merk op dat het type van de retourwaarde aan het einde van de functiekop wordt vermeld. Je kunt deze methode op dezelfde manier noemen als in Java:
java jake.isEligibleToVote ()
Met Kotlin kun je een klasse uitbreiden door er extra functies aan toe te voegen zonder de oorspronkelijke definitie te wijzigen. Dergelijke functies worden extensies genoemd. De namen van deze functies moeten worden voorafgegaan door de namen van de klassen die ze uitbreiden.
Bijvoorbeeld om een extensie toe te voegen met de naam isTeenager naar de Persoon
klasse, schrijf je de volgende code buiten de klas:
"java fun Person.isTeenager (): Boolean
// Als de leeftijd binnen het bereik valt // 13-19 retourneert de werkelijke terugkeerleeftijd in 13 ... 19 "
Deze functie is vooral handig wanneer u klassen wilt uitbreiden die niet tot de codebasis van uw project behoren. Het volgende codefragment voegt bijvoorbeeld een extensie toe containsSpaces naar de Draad
klasse:
java fun String.containsSpaces (): Boolean return this.indexOf ("")! = - 1
Het is belangrijk om het volgende in gedachten te houden bij het maken van een afgeleide klasse:
:
in plaats van Java's strekt
trefwoord.Open
aantekening.Laten we een klasse met de naam maken werknemer dat is afgeleid van Persoon
:
"java open class Persoon (var naam: String, var leeftijd: Int, var college: String?) ...
class Werknemer (naam: String, leeftijd: Int, college: String ?, var company: String): Person (name, age, college)
"
In Kotlin moet je expliciet stellen dat een ledenfunctie kan worden opgeheven door de Open
annotatie in de kop van de methode in de basisklasse. In de afgeleide klasse kunnen open functies worden overbrugd met behulp van de override
aantekening.
Bijvoorbeeld om het te negeren isEligibleToVote
methode, voegt u het volgende codefragment toe aan de werknemer
klasse:
java override fun isUligibleToVote (): Boolean // Altijd true return true retourneren
Kotlin staat niet toe dat u statische methoden maakt. Het staat u echter wel toe om pakketniveau-functies te maken die niet tot een klasse behoren.
De hoofd
methode is misschien wel de bekendste statische methode. Als u het wilt toevoegen hoofd
methode om een pakket genoemd com.tutsplus.code.tutorial, dan zou je code er zo uit zien:
"java package com.tutsplus.code.tutorial
fun main (args: Array
"
U hebt in de voorgaande voorbeelden al geleerd hoe u eenvoudige functies kunt maken. De syntaxis die u gebruikte om deze functies aan te maken, leek erg op die van Java. Kotlin laat je echter veel meer doen met functies.
Als een functie de waarde van een enkele expressie retourneert, kunt u de =
operator na de functiekop, gevolgd door de uitdrukking om de functie te definiëren.
Bijvoorbeeld om een methode toe te voegen aan de Persoon
klasse die terugkeert waar
als de persoon een tachtigjarige is, zou je schrijven:
java fun isOctogenarian (): Boolean = leeftijd in 80 ... 89
Zoals u kunt zien, is deze korte syntaxis compacter en leesbaarder.
Hogere-orde-functies zijn functies die functies kunnen retourneren of functies als parameters kunnen accepteren. Een lambda-uitdrukking daarentegen is slechts een functie zonder naam. Meestal worden lambda-expressies en functies van hogere orde samen gebruikt.
Beschouw het volgende voorbeeld dat de syntaxis van een lambda-expressie laat zien:
java x, y -> x + y
Dit is een eenvoudige lambda-uitdrukking die twee parameters in beslag neemt, X
en Y
, en geeft hun som terug. Zoals u misschien al geraden had, worden de parameters van de functie vermeld vóór de ->
operator en de hoofdtekst van de functie begint na de ->
operator. Deze lambda-uitdrukking kan aan een variabele worden toegewezen en als volgt worden gebruikt:
java val sumLambda: (Int, Int) -> Int = x, y -> x + y val actualSum = sumLambda (3,4)
Merk op dat het type variabele dat de lambda-uitdrukking bevat, de soorten parameters en de geretourneerde waarde specificeert.
Het creëren van een functie van hogere orde die bovenstaande lambda-uitdrukking als een parameter kan accepteren, is net zo eenvoudig. Als u bijvoorbeeld een functie wilt maken die het resultaat van de lambda-expressie verdubbelt, schrijft u:
java fun doubleTheResult (x: Int, y: Int, f: (Int, Int) -> Int): Int return f (x, y) * 2
U kunt deze functie als volgt oproepen:
java val result1 = doubleTheResult (3, 4, sumLambda)
Als alternatief kunt u de lambda-uitdrukking direct doorgeven aan de functie van de hogere orde:
java val result2 = doubleTheResult (3, 4, x, y -> x + y)
Lambda-expressies worden vaak gebruikt met arrays. Bekijk bijvoorbeeld de volgende reeks van Int
waarden:
java val nummers: Array
Als u de waarde van elk item in de array wilt verdelen, kunt u de kaart
functioneer samen met een lambda-uitdrukking als volgt:
"java val squaredNumbers = numbers.map (x -> x * x)
// Het resultaat zal een nieuwe array zijn die // 1, 4, 9, 16, 25 "bevat
Range expressies worden heel vaak gebruikt in Kotlin. Je hebt ze al gebruikt tijdens het maken van de isTeenager
en isOctogenarian
methoden.
Om een bereik te maken, is alles wat u nodig heeft de ...
operator.
"java val r1 = 1 ... 5
// Dit bereik bevat het nummer 1, 2, 3, 4, 5 "
Als u een bereik in aflopende volgorde wilt maken, gebruikt u de downto
functioneer in plaats daarvan.
"java val r2 = 5 downTo 1
// Dit bereik bevat het nummer 5, 4, 3, 2, 1 "
Als je niet wilt dat de stap is 1, u kunt een aangepaste waarde opgeven met behulp van de stap
functie.
"java val r3 = 5 downTo 1 stap 2
// Dit bereik bevat het nummer 5, 3, 1 "
Later in deze zelfstudie ziet u meer bereikuitdrukkingen.
als
In Kotlin, als
is een expressie die verschillende waarden retourneert, afhankelijk van of aan de voorwaarde is voldaan. Het volgende voorbeeld illustreert hoe dit werkt.
"java var age = 20 val isUligibleToVote = if (leeftijd> 18)" Ja "anders" Nee "
// isEligibleToVote is nu ingesteld op "Ja" "
wanneer
De wanneer
expressie komt overeen met die van Java schakelaar
. Het is echter veel veelzijdiger. Neem bijvoorbeeld het volgende voorbeeld.
"java val age = 17
val typeOfPerson = wanneer (leeftijd) 0 -> "Nieuw geboren" in 1 ... 12 -> "Kind" in 13 ... 19 -> "Tiener" anders -> "Volwassene"
// typeOfPerson wordt nu ingesteld op "Tiener" "
Zoals je kunt zien, wanneer
kan niet alleen enkele waarden aannemen, maar ook uitdrukkingen als zijn voorwaarden.
voor in
In Kotlin kunt u de voor in
lus om door arrays, verzamelingen en al het andere dat een iterator biedt te doorlopen. De syntaxis is bijna identiek aan die van Java, behalve het gebruik van de in
operator in plaats van Java's :
operator. In het volgende voorbeeld ziet u hoe u een reeks van doorloopt Draad
voorwerpen.
"java val names = arrayOf (" Jake "," Jill "," Ashley "," Bill ")
voor (naam in namen) println (name) "
Met behulp van bereikuitdrukkingen kunt u ervoor zorgen dat deze lus zich als een traditionele C-stijl gedraagt, voor
lus.
"java voor (i in 0 ... 9) println (i)
// Gedraagt zich precies zoals // voor (int i = 0; i<10;i++)"
terwijl
en doen terwijl
De syntaxis van terwijl
en doen terwijl
loops in Kotlin is identiek aan de syntaxis die in Java wordt gebruikt. De volgende Kotlin-code wordt bijvoorbeeld door een array van herhaald Draad
objecten met een terwijl
lus:
"java val names = arrayOf (" Jake "," Jill "," Ashley "," Bill ") var i = names.size ()
while (i> 0) println (names [-i]) "
Met Kotlin kunt u variabelen en uitdrukkingen in tekenreeksen insluiten door ze in een paar accolades te wikkelen, voorafgegaan door een $
symbool. Bijvoorbeeld:
"java val name =" Bob "println (" Mijn naam is $ name ") // Prints" Mijn naam is Bob "
val a = 10 val b = 20 println ("De som is $ a + b") // Afdrukken "De som is 30" "
In deze zelfstudie leer je de basisprincipes van de Kotlin-programmeertaal. Hoewel we hier verschillende constructies hebben behandeld, heeft Kotlin veel meer te bieden. Vanaf juni 2015 is Kotlin nog steeds alleen beschikbaar als een voorbeeld. In de komende maanden zullen er waarschijnlijk verschillende verbeteringen en nieuwe functies worden weergegeven.
Als u wilt weten hoe Kotlin in Android Studio moet worden gebruikt, kijk dan eens naar Hoe Kotlin te gebruiken in uw Android-projecten. Voor meer informatie over de Kotlin-taal, raad ik aan de Kotlin-documentatie te bezoeken.