Jason. Cała informatyka w jednym miejscu!

Kontynuacja istotnego tematu związanego z klasą danych. Poznajcie teraz metodę "copy" w języku Kotlin, którą jesteście w stanie wywoływać z poziomu obiektu klasy danych. Artykuł już nie będzie taki długi jak poprzedni. Słowo!

"COPY" W JĘZYKU KOTLIN. KOPIOWANIE OBIEKTÓW DANYCH

Wpis ten będzie dotyczyć wyłącznie jednej z metod obiektów klas danych o nazwie "copy". "copy" ułatwia tworzenie (a w zasadzie klonowanie) obiektów na podstawie już istniejących. Kiedy opanujecie korzystanie z wartości domyślnych oraz argumentów nazwanych, zobaczycie pełny potencjał tego zastosowania zamiast korzystania z tworzenia nowej instancji od początku.

PRZYKŁAD WYWOŁANIA

Dysponując przykładową klasą danych:

data class Person(val name: String, val surname: String)

po utworzeniu instancji na jej podstawie, "copy" w języku Kotlin jest wywoływana od obiektu, czyli poprzez operator kropki od etykiety obiektu:

val personA = Person("Tadeusz", "Kościuszko")
val personB = personA.copy("Jerzy", "Nowak")

Skutek nie będzie budzić zaskoczenia na twarzy bowiem daje to ten sam efekt, jakbyśmy napisali tworzenie obiektu od konstruktora:

val personB = Person("Jerzy", "Nowak")

Natomiast przy pomocy "copy", możemy to zapisać jeszcze inaczej. Metoda ma ułatwić tworzenie podobnych do siebie obiektów klas danych. Co to znaczy "podobnych"? Z modyfikacją tylko części danych składowych oraz bez dotykania danych w obiekcie, od którego wywołało się tę metodę! Spójrzcie na taki przykład:

val personB = personA.copy(name = "Radosław")

I taki zapis już nie przejdzie przy konstruktorze. Używając "copy", macie prawo do wstawienia tylko tych danych składowych, jakie chcecie zmienić. Reszta przyjmie te same wartości, tak jak działa normalna kopia zresztą.

DOWÓD UPRASZCZANIA

Nalegam, aby zapoznać się z wartościami domyślnymi oraz argumentami nazwanymi, bo właśnie te dwa małe wątki odpowiadają na pytanie "jak metoda »copy« w języku Kotlin może nam ułatwić pisanie?". Zaprezentuję powierzchownie oba z nich, a po nie mniej istotne szczegóły, zapraszam do wskazanych artykułów opisujących wspomniane zagadnienia w całości.

POŁĄCZENIE Z WARTOŚCIAMI DOMYŚLNYMI

Konstruktory klas (i zwykłych, i danych) mogą dysponować wartościami domyślnymi, które jednym zdaniem tłumacząc, pozwalają uniknąć jawnego definiowania wartości dla konkretnych danych składowych, u których domyślna wartość się znajduje. W przypadku naszej klasy danych, "ułatwienie" przez wartość domyślną może dla przykładu wyglądać tak:

data class Person(val name: String, val surname: String = "Anonim")

Domyślna wartość nazwiska będzie "Anonim". Od teraz, tworzenie instancji na podstawie powyższej klasy, będzie mogło odbywać się na dwa sposoby:

  1. Wywołanie konstruktora z jednym wymaganym parametrem (drugi przyjmie wartość domyślną)
  2. Wywołanie konstruktora z dwoma parametrami (jeden wymagany, drugi poboczny zastępujący wartość domyślną)

To oznacza, że będzie można poprzestać tylko na podaniu imienia i nie dojdzie do błędu kompilacji. Metodę "copy" w języku Kotlin również to będzie dotyczyć.

POŁĄCZENIE Z ARGUMENTAMI NAZWANYMI

Argumenty nazwane mogą brzmieć jak kolejny obcy "wynalazek" twórców Kotlina, natomiast wcale nie jest taki przerażający. Jest to zapożyczenie od Pythona, w którym można wprowadzić parametry do funkcji i konstruktorów w dowolnej kolejności, podając nazwę tego parametru i znak przypisania. Aby był większy sens ukazania przydatności argumentów nazwanych, uznajmy że nasza klasa danych posiada trzy dane składowe zamiast dwóch:

data class Person(val name: String, val surname: String = "Anonim", val age: Int)

Aby jeszcze bardziej zobrazować znaczenie, załóżmy że nie przypisujemy żadnej domyślnej wartości trzeciej danej składowej, zatem trzeba będzie za każdym razem "przejść" po nazwisku przyjmującemu wartość domyślną, w efekcie czego wartość poboczna staje się znów obowiązkową!

Do akcji wkraczają wtedy argumenty nazwane. Przy ich użyciu, na przykład w metodzie "copy" w języku Kotlin (choć możemy wszędzie tam, gdzie oczekuje się parametrów!), możemy skorzystać z niestandardowej "drogi" wprowadzania parametrów, podać tylko etykietę ze znakiem przypisania i wymieniać po przecinku! Coś w rodzaju "skakania z kwiatka na kwiatek":

val personC = personA.copy(age = 16, name = "Marta")

Ponieważ to jest kopia od obiektu pierwszego, nazwisko przyjmie takie samo, jakie jest w obiekcie A! Teraz dopiero możecie zauważyć jak mocno oszczędza nam to wysiłku i energii.

Metoda klasy danych "copy" w języku Kotlin

Każdy obiekt klasy danych posiada w sobie metodę "copy", metodę kopiującą obiekty z możliwością edycji tylko wybranych przez nas właściwości.


Drodzy czytelnicy, to tyle z niniejszego tematu! Metoda "copy" w języku Kotlin sprzyja wygodniejszemu kopiowaniu obiektów z możliwością modyfikowania tylko niektórych danych składowych, jakie chcemy zmodyfikować. Przypominam o argumentach nazwanych i wartościach domyślnych, które oddają pełny potencjał niniejszego artykułu!

PODOBNE ARTYKUŁY