Jeden z kolejnych pobocznych (i bardzo króciutkich) tematów jaki dotyczy Kotlina. Ekspresowe szkolenie w zakresie do czego służy operator rozproszenia w języku Kotlin. Bez lania wody. Zapraszam.

OPERATOR ROZPROSZENIA W JĘZYKU KOTLIN MA NIETYPOWE ZASTOSOWANIE!

Słyszeliście kiedykolwiek o czymś takim? Ja też nie, dopóki nie wyczytałem tego z książki. Ma to służyć przekazywaniu tablicy jako parametr do funkcji, ale w postaci serii osobnych wartości. I co za zbieg okoliczności, przydaje się to w funkcjach wykorzystujących "vararg" w charakterze zmiennej liczby argumentów. Przyjrzymy się jakiemuś przykładowi.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Zakładam, że kumacie o co chodzi ze słowem kluczowym "vararg", bo operator rozproszenia w języku Kotlin staje się przydatny tylko tutaj.

Sprawdzamy sobie taki przypadek. Funkcja obsługuje zmienną liczbę parametrów, a w rzeczywistości wymaga ona tylko jednego:

fun printInts(vararg values : Int)
{
	for (v in values)
	{
		println(v)
	}
}

Definiujemy sobie tablicę (tym razem musimy użyć "intArrayOf", gdyż poznana wcześniej funkcja "arrayOf" nie przejdzie), wywołujemy wspomnianą funkcję, podstawiamy operator rozproszenia i patrzymy co się dzieje:

val integers = intArrayOf(35, 700, -99, 846)

printInts(*integers)

Powyższy kod zostanie "przełknięty" przez kompilator. A to dlatego, że operator rozproszenia w języku Kotlin pozwala na wstawienie tablicy wartości w miejsce parametru "vararg" (przy czym, musi być zachowana zgodność typów!). To jest tak, jak gdybyśmy wstawili kilka wartości, zwinęli je w rulonik, "otagowali" asteryskiem i przekazali do funkcji w takiej formie:

printInts(*integers) = printInts(integers[0], integers[1], integers[2], integers[3])

Jak możecie zauważyć, znajdujący się przed nazwą symbol asterysku (nazywanego często przez ludzi "gwiazdką") stanowi operator rozproszenia. To wokół niego cała gadka w niniejszym materiale.

ZACHOWUJ ZGODNOŚĆ TYPÓW!

Aby to "zwijanie" przeszło, programista musi zapewnić, że typy będą ze sobą kompatybilne pomiędzy typem pojedynczej wartości, a typem tablicy zdolnej do przechowywania argumentów tego samego typu! Tak jak widać powyżej, wartości są typu "Int", zatem program zaakceptuje tablicę wyłącznie typu "IntArray" (nie "Array<Int>", dlatego nie skorzystałem z "arrayOf"!!!). Próba wstawienia tablicy dla liczb zmiennoprzecinkowych zakończy się fiaskiem. Kotlin dopilnuje, abyście nie umieszczali żadnych bzdur!

Operator rozproszenia w języku Kotlin

Operator rozproszenia pozwala podstawić tablicę w miejsce zmiennej liczby argumentów w postaci "zwiniętej" serii wartości.


To naprawdę tyle? Naprawdę! Operator rozproszenia w języku Kotlin to w rzeczywistości tylko znak asterysku umieszczany przed nazwą zmiennej przechowującej tablicę, do złudzenia przypominający o wskaźnikach w językach C i C++. "Zwijanie" szeregu wartości jednolitego typu to jego specjalność!

PODOBNE ARTYKUŁY