Postęp musi iść do przodu! Zwłaszcza w rozwoju osobistym. Sięgniemy teraz po "object" w języku Kotlin, które odpowiada za tworzenie obiektów klasowych oraz wyrażeń klasowych. Jakie ma to zastosowanie oraz jak może nam pomóc w implementacji, to zapraszam już do środka po szczegóły.

DWA OBLICZA SŁOWA KLUCZOWEGO "OBJECT" W JĘZYKU KOTLIN

Obecnie występują dwa różne oblicza słowa kluczowego "object". Nie pozostaje nic innego jak podzielić artykuł na dwie części i spokojnie opisać najpierw pierwsze, a potem drugie zastosowanie.

"OBJECT" TO KLASA I OBIEKT W JEDNYM!

Dokładnie jak przeczytaliście. Tak najkrócej można by to określić. Obiekt klasowy to struktura, którą piszemy jak klasę, ale de facto staje się z automatu obiektem. Jeszcze ładniej można napisać, że jest to obiekt unikatowy czyli niemogący posiadać żadnych innych kopii. Musi być jedyny w swoim rodzaju. Zastosowań jest wiele. Ja często z tego korzystam dla przechowywania stałych w jednym miejscu, dzięki czemu można się do nich dostać z każdego miejsca w kodzie. Taki przykład.

SŁYSZAŁEM O CZYMŚ PODOBNYM WE WZORCACH PROJEKTOWYCH

Ciepło! Istotnie, ma to związek z jednym z nich. Nie kojarzy się to niektórym z Was z "singletonem"? "Singleton" to jeden ze wzorców projektowych należących do kategorii kreacyjnych, który polega na określeniu klasy będącej unikatową instancją przez całe działanie aplikacji. Warto znać tę informację, bo nie musicie implementować tego ręcznie. Teraz wszystko odbywa się przy pomocy jednego słowa "object" w języku Kotlin. Wystarczy, żebyście je poznali.

PRZYKŁAD KODU ŹRÓDŁOWEGO

A teraz drodzy czytelnicy, przykład. Dajmy na to, że mamy za zadanie zaimplementować własny system zapisu aktualnego stanu programu, na przykład do edycji grafiki gry. Plik posiada niestandardowe rozszerzenie (tak jak "Unreal Engine" posiada "*.unr" na ten przykład) więc wymaga osobnego algorytmu do zapisania wielu plików graficznych, aby je spakować, zaszyfrować i wyeksportować, sprowadzając to do jednej "paczki". Na scenę może wejść taka klasa "singleton" będąca ogólnodostępnym eksporterem paczki z grafiką. Raczej ciężko sobie wyobrazić sens tworzenia wielu instancji klasy odpowiadającej za zapis, który za każdym razem będzie taki sam (okno do wyboru miejsca zapisu to ZUPEŁNIE CO INNEGO!). W takiej sytuacji przyda się nam wiedza o "object" w języku Kotlin. To napiszmy coś takiego (duże uproszczenie sprawy, żeby nie tuszować głównego tematu):

object SaveManager
{
	fun exportToPackage()
	{
		
	}
}

Powtórzmy sobie "clue" niniejszego tematu. Obiekt klasowy to klasa, która od razu staje się jednocześnie obiektem. Nie możemy za jej pomocą utworzyć instancji, tak jak ma to miejsce choćby przy klasie danych. Nie posiada ona zdolności do posiadania konstruktorów, zatem próba wstawienia takowego spowoduje błąd kompilacji. Od razu wybijcie to sobie z głowy! Zainteresujmy się raczej wykorzystywaniem takiego czegoś w akcji. Po wprowadzeniu przykładowej metody (właściwości też może posiadać), w innym miejscu wywoływanie odbywa się następująco:

SaveManager.exportToPackage()

I już! Niczym innym się dalej nie martwimy. Możecie śmiało to sobie porównać z wywoływaniem statycznych metod, gdyż statyczność na tym polega, że dane składowe i metody występują W KLASIE, nie w obiekcie, co jak najbardziej ma tu miejsce!

OBIEKT KLASOWY MOŻE SOBIE "SIEDZIEĆ" W INNEJ KLASIE!

Bądźcie tego świadomi. "object" w języku Kotlin może być zdefiniowane wewnątrz innej wcześniej utworzonej klasy i kompilator nie będzie się wcale o to "pruł". Ponadto, nie ma żadnych różnic w sposobie zapisu, zatem piszemy tak samo, ale i tak pokażę:

class Object
{
	object StaticMethods
	{
		fun displayAllExistingObjects()
		{

		}
	}
}

Wszystko! A jeśli chodzi o powoływanie się na metodę albo właściwość obiektu klasowego będącego częścią innej klasy, to wówczas pisze się tak:

Object.StaticMethods.displayAllExistingObjects()

Przypominacie sobie gdzie jeszcze się pisało w taki sam sposób? Klasy zagnieżdżone? Tak jest! Jeśli tak pomyśleliście, to owacje na stojąco.

Obiekt klasowy w języku Kotlin

"object" jako pierwszy z wariantów dotyczy tworzenia obiektu klasowego. Może on występować zarówno osobno, jak i wewnątrz innej klasy.

"OBJECT" JAKO WYRAŻENIE KLASOWE

Druga część wpisu opisywać będzie czym jest wyrażenie klasowe. Bardzo przypomina strukturę z języka C znaną pod hasłem "struct". A to dlatego, że po znaku przypisania i podaniu słowa "object", otwieramy klamerki i wewnątrz nich wprowadzamy zmienne. Brzmi znajomo?

val playerScore = object
{
	val number = 1
	val score = 5000
}

A wywoływanie? Operator kropki? Wszystko takie same…

println("Wynik gracza ${playerScore.number}: ${playerScore.score}")

Wyrażenie klasowe pod postacią "object" w języku Kotlin jest tożsame z tworzeniem anonimowej klasy wewnętrznej w języku Java. Kojarzycie pewnie metodę "addListener" albo o podobnej nazwie, a potem klamerki i implementacja wymaganych przez interfejs funkcji. To jest dokładnie to samo.

Wyrażenie klasowe w języku Kotlin

Za pomocą "object" w języku Kotlin można też utworzyć wyrażenie klasowe do złudzenia przypominające "struct" w języku C, jako drugie z zastosowań!


Mamy kolejne słowo kluczowe za sobą. To nie wszystkie przygody związane z obiektem klasowym. Przygotujcie się na drugą część tego miniwątku jakim będą "obiekty klasowe uzupełniające"!

PODOBNE ARTYKUŁY