Oto następny wpis na temat Kotlina. Wpis o słowie kluczowym "open" w języku Kotlin. Wpis o klasie otworzonej. Wpis o właściwości otworzonej. Wpis o metodzie otworzonej oraz co nam to wszystko daje. Serdecznie zapraszam do środka!

"OPEN" W JĘZYKU KOTLIN "OTWIERA" NOWE MOŻLIWOŚCI

Kotlin dysponuje jeszcze jednym unikatowym słowem kluczowym którego nie znajdziecie u "starszego brata". Jest nim "open". Ale...jak należy rozumieć coś "otwartego"? Jak klasa może być "otworzona"? Albo funkcja? Albo właściwość? Spróbuję najpierw wytłumaczyć sens, a potem pokażę zapis w kodzie.

ZNACZENIE "OTWARTOŚCI"

Temat ma silny związek z dziedziczeniem. Jak programistom Javy zapewne wiadomo, klasy nie wymagały żadnych dodatkowych słów kluczowych, aby można było od nich dziedziczyć, prawda? Po prostu pisało się "public class" i tak dalej. Kotlin kieruje się inną zasadą i to właśnie miałem na myśli pisząc o zwięzłości.

W Kotlinie jest tak, że im mniej słów kluczowych, tym mniej rzucające się w oczy instrukcje, które nie odchodzą od tradycyjnego / podstawowego podejścia. Chodzi mi o to, że język został tak ukierunkowany, żeby trzeba było dołożyć dodatkowe hasła (np. "public" czy "override") kiedy programujemy niestandardowe zachowanie. Weźmy na przykład klasy. Domyślnym zachowaniem jest "zamknięcie" klas na dziedziczenie. Jeżeli użyjemy tylko słowa kluczowego "class", to dziedziczenie nie będzie możliwe, bo odbiega ono od podstawowego użycia klasy. "open" w języku Kotlin właśnie temu służy, aby zasygnalizować kompilatorowi, że chcemy dopuścić do dziedziczenia tejże klasy przez inne klasy (które siłą rzeczy staną się pochodnymi), bo tutaj trzeba "odblokować" taką możliwość. Co ciekawe jeśli spojrzymy na Javę, to kieruje się ona zupełnie odwrotnym podejściem. Domyślnie wszystkie klasy są "otwarte" ("public class"), a żeby je "zamknąć" trzeba je uczynić klasami finalnymi i też wrzucamy dodatkowe słowo kluczowe, tylko tym razem "final" ("public final class").

Tyle z fundamentalnej teorii o doskonałym przykładzie zwięzłości panującej w Kotlinie. Czyli jak piszę o "open" w języku Kotlin, to mamy to rozumieć jako odblokowanie dostępu do dziedziczenia przez inne klasy posługujące się tą klasą. W pewnym sensie można to rozumieć jako:

klasa bazowa = klasa otworzona lub abstrakcyjna

Jednak traktujcie to jako "ułatwiacz zrozumienia" albo skrót myślowy.

KLASA OTWORZONA

Po tak obszernym wyjaśnieniu, możemy przejść do składni. Zaczniemy od klasy otworzonej. Klasa otworzona, jak napisałem, uzyskuje uprawnienia do bycia klasą bazową dla innych późniejszych klas. Żadną filozofią jest dodanie słowa kluczowego "open" przed "class", ale i tak pokażę całość:

open class Shape
{

}

a teraz Java, u której ponieważ domyślnym zachowaniem jest "otwartość" na dziedziczenie, nie będzie żadnych różnic:

public class Shape
{

}

Tyle! Przechodzimy do właściwości.

WŁAŚCIWOŚĆ OTWORZONA

Kiedy właściwość (czyli dana składowa klasy) zostaje otworzona, nadaje temu zupełnie inny sens. W tej sytuacji chodzi o nadanie uprawnień do jej przesłaniania przez klasy pochodne. W Javie, trzeba było wymuszać publiczny lub chroniony modyfikator dostępu, aby utorować sobie taką drogę. Użycie słowa "open" w języku Kotlin dla właściwości nie żąda żadnych takich sztuczek:

open val attribute = 5

Korzystając z właściwości otworzonej musicie pamiętać o dwóch zasadach. Zmienne "otworzone" mogą znajdować się tylko i wyłącznie wewnątrz ciała klasy (poza konstruktorem podstawowym). Zatem to:

open class Shape(open val a : Int, open val b : Int)

niestety zakończy się błędem. A druga rzecz, to konieczność określenia całej klasy jako "otworzonej", jeżeli chociaż jedna właściwość ma być otworzona. To nie będzie błąd, tylko otworzenie samej właściwości pozostawiając klasę zamkniętą na dziedziczenie spowoduje zaprzeczenie logicznemu programowaniu aplikacji.

METODA OTWORZONA

Ostatni fragment dzisiejszej lektury to zakwalifikowanie funkcji jako otworzonej. Kiedy "open" w języku Kotlin dotyczy metody, to jest to nic innego jak "danie" klasom pochodnym wolnej ręki do ewentualnego przesłonięcia funkcji. Tak wygląda przykład:

open fun doSomething()
{

}

Do słowa "fun", "doklejamy" słowo "open" i to jest absolutnie wszystko co trzeba zrobić. Od teraz, funkcja będzie zawierała swoje instrukcje zawarte w klasie bazowej i będzie podlegać możliwości przesłonięcia w każdej klasie dziedziczącej od tej klasy.

Słowo kluczowe "open" w języku Kotlin

Słowo kluczowe "open" w języku Kotlin "otwiera" możliwość dziedziczenia od danej klasy, przesłaniania właściwości i przesłaniania metod.


Wszystkie pozostałe szczegóły dotyczące sposobów użycia słów kluczowych dla dziedziczenia w Kotlinie zostaną "rozbite" na kilka następnych części, aby wszystko "zazębiało się" perfekcyjnie. Tyle na chwilę obecną, dziękuję.

PODOBNE ARTYKUŁY