Kotlin const, var i val Ključne riječi

1. Uvod

U ovom uputstvu ćemo biti iznoseći ključne razlike između konst, var, i val ključne riječi na jeziku Kotlin.

Da bismo ove ključne riječi stavili u kontekst, bit ćemo uspoređujući ih s njihovim ekvivalentima na Javi.

2. Razumijevanje tipkanja

Da bismo razumjeli ove ključne riječi, moramo razumjeti dvije glavne kategorije tipskih sustava koje jezik može slijediti - manifestno tipkanje i zaključeno tipkanje.

2.1. Manifestno tipkanje

Svi jezici nude niz primitivnih vrsta podataka za pohranu i manipulaciju podacima unutar programa. Programski jezici koji slijede manifestnu disciplinu tipkanja moraju imati svoje vrste podataka izričito definirane u programu.

Java, do verzije 10, strogo slijedi ovu disciplinu. Na primjer, ako želimo pohraniti broj u program, moramo definirati vrstu podataka kao što je int:

int myVariable = 3;

2.2. Pretpostavljeno tipkanje

Za razliku od Jave, Kotlin slijedi izvedenu disciplinu tipkanja. Jezici koji podržavaju zaključivanje tipa automatski otkriva vrste podataka unutar programa u vrijeme kompajliranja.

Ovo otkrivanje znači da se mi, kao programeri, ne moramo brinuti o vrstama podataka koje koristimo.

3. var

Prvo, započet ćemo s var, Kotlinova ključna riječ koja predstavlja promjenjive, ne-konačne varijable. Jednom inicijalizirani, možemo slobodno mutirati podatke koje sadrži varijabla.

Pogledajmo kako ovo funkcionira:

var myVariable = 1

Iza scene, myVariable inicijalizira se s Int vrsta podataka.

Iako se Kotlin koristi zaključivanjem tipa, mi također imaju mogućnost specificiranja tipa podataka kada inicijaliziramo varijablu:

var myVariable: Int = 1

Varijable deklarirane kao jedan tip podataka, a zatim inicijalizirane vrijednošću pogrešnog tipa rezultirat će pogreškom:

var myVariable: Int = b // POGREŠKA!

4. val

Kotlinova val ključna riječ djeluje mnogo u isto kao i var ključna riječ, ali s jednom ključnom razlikom - varijabla je samo za čitanje. Korištenje val je slično deklariranju nove varijable u Javi s konačni ključna riječ.

Na primjer, u Kotlinu bismo napisali:

val ime: String = "Baeldung"

Dok bismo na Javi napisali:

konačni naziv niza = "Baeldung";

Slično kao konačni varijabla u Javi, a val varijabli u Kotlinu mora se dodijeliti vrijednost onako kako je deklarirana ili u a Razred konstruktor:

adresa klase (val ulica: String) {val name: String = "Baeldung"}

5. konst

Kao val, varijable definirane s konst ključne riječi su nepromjenjive. Ovdje je razlika u tomekonst koristi se za varijable koje su poznate u vrijeme prevođenja.

Proglašavanje varijable konst je slično korištenju statički ključna riječ u Javi.

Pogledajmo kako proglasiti a konst varijabla u Kotlinu:

const val WEBSITE_NAME = "Baeldung"

A analogni kod napisan na Javi bio bi:

završni statički niz WEBSITE_NAME = "Baeldung";

5.1. Stalno ugrađivanje

Od Kotlina 1.1, kompajler Kotlina ocrtava const val vrijednosti na mjesta na kojima se koriste. Na primjer, razmotrimo jednostavan primjer:

const val VRIJEDNOST: String = "constant" fun main () {println ("$ VALUE je umetnuto")}

Na prvi pogled bismo mogli pomisliti da kompajler Kotlin dobiva vrijednost statičkog polja iz klase, a zatim je spaja s "Je umetnuto" tekst. Međutim, budući da const valsu ucrtani, prevoditelj će kopirati "konstantno" doslovno gdje god VRIJEDNOST koristi se konstanta. Ova konstantna ugradnja je mnogo učinkovitija od dobivanja statičke vrijednosti iz klase.

Da bismo provjerili da li se umetanje stvarno događa ispod haube, možemo provjeriti bajt kod. Prvo, trebali bismo kompajlirati datoteku Kotlin pomoću kotlinc:

$ kotlinc Main.kt

Zatim, pomoću javap, možemo zaviriti u generirani bytecode:

$ javap -c -p -v MainKt // skraćeno 0: ldc # 16 // String konstanta je ugrađena 2: astore_0 3: iconst_0 4: istore_1 5: getstatic # 22 // Field java / lang / System.out: Ljava / io / PrintStream; 8: aload_0 9: invokevirtual # 28 // Metoda java / io / PrintStream.println: (Ljava / lang / Object;) V 12: return

Kao što je prikazano gore, kod indeksa 0, "konstantno" doslovno se kopira za spajanje. Dakle, nema getstatičan za dohvaćanje vrijednosti iz statičkog polja u klasi.

Dno crta je to iako je const vals mogu izgledati kao statička polja, nisu implementirana kao javno statično finale polja. Jednostavno rečeno, const val je samo iluzija sastavljača.

6. Zaključak

U ovom smo članku na brzinu pogledali razliku između manifestnog i izvedenog tipkanja.

Zatim smo pogledali razliku između Kotlinove var,val, i konst ključne riječi.


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