Kotlin const, var og val Keywords

1. Introduksjon

I denne opplæringen blir vi det skisserer de viktigste forskjellene mellom konst, var, og val nøkkelord på Kotlin-språket.

For å sette disse søkeordene i sammenheng, vil vi være det sammenligne dem med Java-ekvivalenter.

2. Forstå skriving

For å forstå disse nøkkelordene, må vi forstå to av hovedkategoriene for typesystemer et språk kan følge - manifest typing og utledet typing.

2.1. Manifest typing

Alle språk tilbyr en rekke primitive datatyper for å lagre og manipulere data i et program. Programmeringsspråk som følger manifestdisziplinen, må ha datatypene eksplisitt definert i programmet.

Java, frem til versjon 10, følger denne disiplinen strengt. For eksempel, hvis vi vil lagre et nummer i et program, må vi definere en datatype som int:

int myVariable = 3;

2.2. Avledet skriving

I motsetning til Java, Kotlin følger den avledede skrivedisiplinen. Språk som støtter type inferens automatisk oppdage datatyper innen programmet på kompileringstid.

Denne oppdagelsen betyr at vi som utviklere ikke trenger å bekymre oss for datatypene vi bruker.

3. var

For det første begynner vi med var, Kotlins nøkkelord som representerer mutable, ikke-endelige variabler. Når det er initialisert, kan vi mutere dataene som variabelen inneholder.

La oss ta en titt på hvordan dette fungerer:

var myVariable = 1

Bak scenen, myVariable initialiseres med Int data-type.

Selv om Kotlin bruker typeinferanse, vi har også muligheten til å spesifisere datatypen når vi initialiserer variabelen:

var myVariable: Int = 1

Variabler erklært som én datatype og deretter initialisert med en verdi av feil type vil føre til en feil:

var myVariable: Int = b // FEIL!

4. val

Kotlin er val søkeord fungerer mye i samme som var nøkkelord, men med en nøkkelforskjell - variabelen er skrivebeskyttet. Bruken av val er omtrent som å erklære en ny variabel i Java med endelig nøkkelord.

For eksempel i Kotlin vil vi skrive:

val name: String = "Baeldung"

Mens vi i Java skrev:

endelig strengnavn = "Baeldung";

Mye som en endelig variabel i Java, a val variabel i Kotlin må tilordnes en verdi slik den er deklarert, eller i en Klasse konstruktør:

class Address (val street: String) {val name: String = "Baeldung"}

5. konst

Som val, variabler definert med konst søkeord er uforanderlige. Forskjellen her er atkonst brukes til variabler som er kjent på kompileringstid.

Erklære en variabel konst er omtrent som å bruke statisk nøkkelord i Java.

La oss se hvordan vi kan erklære et konst variabel i Kotlin:

const val WEBSITE_NAME = "Baeldung"

Og den analoge koden skrevet i Java ville være:

endelig statisk streng WEBSITE_NAME = "Baeldung";

5.1. Konstant innfelling

Fra og med Kotlin 1.1, legger Kotlin-kompilatoren inn const val verdiene til stedene der de brukes. La oss for eksempel vurdere et enkelt eksempel:

const val VALUE: String = "constant" fun main () {println ("$ VALUE is inlined")}

Ved første øyekast kan vi tro at Kotlin-kompilatoren får en statisk feltverdi fra en klasse og sammenkobler den med ”Er inline” tekst. Imidlertid siden const vals er inline, vil kompilatoren kopiere "konstant" bokstavelig uansett hvor VERDI konstant brukes. Denne konstante inline er mye mer effektiv enn å få en statisk verdi fra en klasse.

For å verifisere at innfellingen faktisk skjer under panseret, kan vi sjekke ut bytekoden. Først bør vi kompilere Kotlin-filen ved hjelp av kotlinc:

$ kotlinc Main.kt

Bruk deretter javap, kan vi ta en titt på den genererte bykoden:

$ javap -c -p -v MainKt // avkortet 0: ldc # 16 // Strengkonstant er inline 2: astore_0 3: iconst_0 4: istore_1 5: getstatic # 22 // Felt java / lang / System.out: Ljava / io / PrintStream; 8: aload_0 9: invokevirtual # 28 // Method java / io / PrintStream.println: (Ljava / lang / Object;) V 12: return

Som vist ovenfor, ved indeks 0, blir "konstant" bokstavelig kopieres for sammenkobling. Så det er ingen getstatisk for å hente en verdi fra et statisk felt i en klasse.

Poenget er at selv om const vals kan se ut som statiske felt, de implementeres ikke som offentlig statisk finale Enger. Enkelt sagt, den const val er bare en kompilasjonsillusjon.

6. Konklusjon

I denne artikkelen har vi sett raskt på forskjellen mellom manifest og utledet skriving.

Så så vi på forskjellen mellom Kotlins var,val, og konst søkeord.


$config[zx-auto] not found$config[zx-overlay] not found