Modifikátory viditeľnosti v Kotline

1. Úvod

Programovací jazyk Kotlin je založený na Java Virtual Machine (JVM). Preto musí dodržiavať všetky pravidlá, ktoré JVM ukladá, vrátane modifikátorov viditeľnosti.

Existuje však niekoľko jemných nuancií v tom, ako jazyk implementuje tieto modifikátory, pokiaľ ide o kompilátor a štruktúru nášho kódu. Tento článok v tejto súvislosti ukáže niektoré podobnosti a rozdiely medzi programami Java a Kotlin.

2. Modifikátory viditeľnosti

Modifikátory viditeľnosti sa používajú na určenie, ktoré ďalšie prvky kódu majú prístup k upravovanému prvku. Vzťahujú sa na niektoré rôzne prvky v kódexe na rôznych úrovniach rozsahu. Spôsob uplatňovania týchto pravidiel sa môže medzi týmito rôznymi spôsobmi použitia mierne líšiť, čo môže byť spočiatku mätúce.

2.1. Verejná viditeľnosť

Najviditeľnejším modifikátorom je verejné. Toto je pravdepodobne najčastejšie používané v celom jazyku a znamená to, že neexistujú žiadne ďalšie obmedzenia týkajúce sa toho, kto môže vidieť upravovaný prvok.

Na rozdiel od Javy nie je v Kotline takmer nikdy potrebné vyhlásiť čokoľvek za verejné - je to predvolený modifikátor, ktorý sa použije, ak nedeklarujeme iný. Okrem toho to v Kotline funguje rovnako ako v Jave.

Ak použijeme verejné modifikátor prvku najvyššej úrovne - vonkajšej triedy alebo funkcie alebo premennej deklarovanej priamo vo vnútri balíka - potom k nej môže získať prístup akýkoľvek iný kód. Ak použijeme verejné modifikátor na vnorený prvok - vnútornú triedu alebo funkciu alebo premennú vo vnútri triedy - potom môže k tomuto prvku pristupovať aj akýkoľvek kód, ktorý má prístup ku kontajneru.

Napríklad:

trieda Verejné {val i = 1 zábava doSomething () {}} 

Trieda Verejné je prístupný odkiaľkoľvek v celej kódovej základni, „Val i “a„ zábava urob niečo()" sú prístupné z čohokoľvek, čo má prístup Verejné.

2.2. Súkromná viditeľnosť

Ďalším modifikátorom, ktorý sa používa väčšinou, je súkromné. To má takmer úplne opačný význam verejné - to znamená, že k nej nemá nikto prístup.

V realite, v Kotline to znamená, že k nej má prístup iba kód deklarovaný v rovnakom rozsahu. Toto sa od Javy nenápadne líši len preto, že Kotlin umožňuje viac deklarácií najvyššej úrovne v rovnakom súbore - a súkromné k prvku najvyššej úrovne majú prístup všetky ostatné v rovnakom súbore. Okrem toho sú pravidlá rovnaké. Napríklad:

Napríklad:

private class Private {private val i = 1 private val doSomething () {}}

Trieda Súkromné je prístupný iba z rovnakého zdrojového súboru, „Val i “a„ zábava urob niečo()" sú prístupné iba z vnútra triedy Súkromné.

2.3. Chránená viditeľnosť

The protovaný modifikátor v Kotline znamená, že je prísne prístupný iba deklarujúcej triede a podtriedam. Je to to isté, ako väčšina ľudí očakáva, že Java bude fungovať, ale mierne sa to líši od toho, ako Java funguje.

V Jave sa chránené modifikátor tiež umožňuje prístup k prvku z čohokoľvek iného v rovnakom balíku. Napríklad vzhľadom na nasledujúci súbor triedy:

trieda A {chránená hodnota i = 1}

Nasledujúci súbor by v Kotline fungoval dobre:

trieda B: A () {fun getValue (): Int {návrat i}}

Nasledujúci súbor bude fungovať v prostredí Java, ale nebude fungovať v systéme Kotlin:

trieda C {fun getValue (): Int {val a = A () návrat a.i}}

A nasledovné by nefungovalo ani v Jave, ani v Kotline:

trieda D {fun getValue (): Int {val a = A () návrat a.i}}

Navyše, v Kotline chránené sa stáva predvolenou viditeľnosťou, keď prevážime chránený prvok zo nadtriedy. Toto je možné výslovne zmeniť na verejné ak je to žiaduce a je to hlavný čas, budeme musieť niečo výslovne vyhlásiť za verejné.

2.4. Viditeľnosť balíka - súkromná / predvolená

V prostredí Java existuje modifikátor prístupu známy ako „balík-súkromný“ (označovaný tiež ako „predvolený“). Používa sa, keď na prvok nie je umiestnený žiadny modifikátor. To znamená, že k nemu má prístup ktorýkoľvek kód v rovnakom balíku, ale akýkoľvek kód v inom balíku nemôže, vrátane podtried.

Kotlin v súčasnosti nemá pre tento modifikátor vôbec žiadnu podporu, aj keď sa to v budúcnosti môže zmeniť. Dôvod je ten, že neposkytuje žiadnu ochranu - ktokoľvek by mohol definovať kód v rovnakom balíku a pristupovať k našim prvkom, a to aj z iného súboru jar.

2.5. Vnútorná viditeľnosť

Kotlin pridáva nový modifikátor k možnostiam, ktoré Java momentálne nepodporuje - interné. Tento modifikátor znamená, že k tomuto prvku má prístup akýkoľvek kód deklarovaný v rovnakom module, ktorý nie je inak obmedzený. (Modul je v podstate súbor Jar.)

Toto je možné v Jave pomocou vecí ako OSGi, ale v súčasnosti to nie je pôvodným jazykom. Java 9 prinesie niektoré koncepty, vďaka ktorým bude dosiahnuteľný tým, že bude môcť selektívne exportovať verejné identifikátory.

To prináša obrovskú výhodu pri písaní API a implementácií. Naše rozhrania API môžeme napísať ako verejné, naša hlavná implementácia ako verejné triedy a všetok podporný kód, na ktorom závisí interné. To znamená, že externý kód je nútený prejsť cez API a nemôže získať prístup k interným stránkam. Napríklad:

balíček com.baeldung.modifiers interná trieda Interná {} trieda Verejná {interná hodnota i = 1 interná zábava doSomething () {}}

Trieda Interné je prístupný iba zvnútra toho istého modulu. „Val i“ a „Fun doSomething ()“ sú tiež prístupné iba zvnútra toho istého modulu, aj keď k triede, v ktorej sa nachádzajú, je prístup z ľubovoľného miesta.

3. Zhrnutie

V článku sme sa boli pozrieť na modifikátory viditeľnosti v Kotline.

Pravidlá modifikátora viditeľnosti v Kotline fungujú väčšinou rovnako, ako by sme to od Javy očakávali. Existuje však zásadný rozdiel - ktorým je zavedenie interné rozsah - čo je veľmi užitočné pre väčšie projekty.


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