Jason. Cała informatyka w jednym miejscu!

Kontynuacja nauki o języku Kotlin. Wiecie już jak wygląda struktura funkcji uruchomieniowej "main", od której zaczyna się działanie aplikacji. Rzucimy teraz okiem na deklarowanie i definiowanie zmiennych. Użytkownicy języka JavaScript mogą się ucieszyć, gdyż nawet oni wyłapią coś charakterystycznego dla siebie w języku Kotlin :). Poznajcie wszyscy czym się różnią od siebie słowa kluczowe "var" i "val" w języku Kotlin oraz jakich zasad trzeba przestrzegać podczas definiowania zmiennych. Zapraszam!

GARŚĆ TEORII

Zmienną określamy obiekt (rozumiany jako alokacja miejsca w pamięci), który ma za zadanie przechowywać dane konkretnego typu. Może to być między innymi typ liczbowy, znakowy, łańcuchowy albo obiekt. W zależności od języka programowania, może występować możliwość samodzielnej identyfikacji typu przez kompilator sugerując się typem wartości. C# dla przykładu dysponuje taką dedukcją. Liczba 7 będzie ewidentnym znakiem naszych intencji, że chcemy mieć liczbę całkowitą ("integer") :). Natomiast Kotlin działa specyficznie :O.

Pierwszą rzeczą jest to, że tutaj każda zmienna jest obiektem. Typy proste nie występują tutaj w charakterze typów prostych rozumianych w języku Java! Owszem, jest "integer", jest "double", jest "string", ale wszystko tutaj występuje w postaci obiektu. Ma to ogromne znaczenie w rozumieniu jak tutaj funkcjonują zmienne i czym naprawdę charakteryzuje się "var" i "val" w języku Kotlin. Jednak na tym się nie kończy bycie oryginalnym.

W Kotlinie obowiązuje tzw. "statyczna typizacja". Formalnie oznacza to konieczność poinformowania kompilatora jakiego typu konkretnie ma być nasza zmienna. Nie tak jak we wspomnianym języku JavaScript, że "var" może być wszystkim i niczym. Tutaj jeśli zmienna ma być na początku liczbą zmiennoprzecinkową, to takiego typu "trzyma się" już na zawsze, do momentu aż zmienna przestanie istnieć. Natomiast Kotlin posiada jednocześnie możliwość "domyślenia się" typu na podstawie wartości, zatem ten warunek nadawania typu częściowo zostaje zdjęty i w większości przypadków może być to sprawą poboczną. Robiąc postępy w nauce Kotlina zaczniecie to dostrzegać.

"VAR" I "VAL" W JĘZYKU KOTLIN. DWA SŁOWA KLUCZOWE DLA ZMIENNYCH?

Niech nie wzbudza w Was lęku fakt, że do dyspozycji mamy nie jedno, a DWA słowa kluczowe dla zmiennych. Są to "var" i "val". Na sam początek przyjrzyjmy się pierwszemu hasłu, "var".

VAR

"var" sprawia, że zaalokowana pamięć dla danej będzie mogła ulegać modyfikacjom po powtórnym użyciu operatora przypisania (pojedynczy znak równości). Oto najprostszy obraz wspomnianej cechy:

var x = 10

x = 8

Kod nie budzi żadnych zastrzeżeń. Zwróćcie uwagę, że nie było konieczne określanie typu zmiennej, pod warunkiem że wprowadzimy od razu wartość (więcej informacji poniżej). O ile korzystacie ze słowa kluczowego "var", wszystko jest OK. Możecie zmieniać tę wartość jak chcecie i ile razy chcecie, o ile zostanie zachowana zgodność z typem.

A co z tym drugim?

VAL

"val" to drugi wariant stworzony z myślą o definiowaniu zmiennych, których wartości nie będzie można zmienić korzystając po raz drugi z operatora przypisania. Zatem ten sam kod:

val x = 10

x = 8

zostanie już potraktowany jako błąd, gdyż "x" jest w tym przypadku stałą. Nie należy tego jednak rozumieć jako typowa stała pod hasłem "constant". To tylko w pewnym sensie jest stała. Na razie wystarczy Wam wiadomość, że po pierwszym przypisaniu wartości do zmiennej zdefiniowanej przy użyciu słowa "val", nie da się już zmienić tej wartości na żadną inną.

Oto najważniejszy czynnik jaki wyróżnia "var" i "val" w języku Kotlin.

WYMUSZANIE TYPU ZMIENNEJ

Kotlin, choć jest statycznie typowanym językiem, w większości przypadków może sam wydedukować o jaki typ nam chodzi. Co w przypadku, kiedy jednak chcielibyśmy podać samodzielnie typ zmiennej? Wystarczy dodać mały szczegół:

var x: Int = 10

x = 8

Ręczne określanie typu polega na wprowadzeniu po nazwie znaku dwukropka, a zaraz po nim, jednego z typów danych. Kotlin dysponuje kilkoma wbudowanymi typami będącymi odpowiednikami typów prostych w Javie, a ich nazwy są takie same, tylko pisane dużą literą. Po utworzeniu własnej klasy, będziemy w stanie także wskazywać typ jako naszą klasę. Miejcie na uwadze, że kompilator bacznie Was obserwuje podczas kurczowego przestrzegania zgodności typu zmiennej do wartości. Chodzi mi o to, że po uprzedzeniu o typu "Float", próba przypisania łańcucha znaków zakończy się fiaskiem.

ZASADY DEFINIOWANIA ZMIENNYCH PRZY POMOCY "VAR" I "VAL" W JĘZYKU KOTLIN

W Kotlinie trzeba trzymać się pewnych żelaznych zasad dotyczących definiowania zmiennych, bo kompilator nie pozwoli na ich łamanie. Język ten kładzie silny nacisk na wymuszanie bezpieczeństwa w pisanym kodzie, aby móc uodpornić się do granic wytrzymałości na pojawianie się błędów. Oto kilka podpunktów.

NAZEWNICTWO

Na pewno nie można "podkradać" językowi zarezerwowanych słów kluczowych. Zmienne zawierające nazwę taką jak "while" lub "fun" możecie wybić sobie z głowy. Wstawianie cyfry jako pierwszego znaku nazwy też nie zostanie zaakceptowane, choć może występować później. Spacje są również niedopuszczalne więc używajcie tak zwanej "podłogi" zwanej także "podkreślnikiem" (_), jeśli macie takie upodobanie. Możecie również pisać w stylu "camelCase", do czego zachęcam.

WYMAGANA INICJALIZACJA PRZED UŻYCIEM

Korzystacie ze zmiennej w jednym z późniejszych wyrażeń? Kompilator nie dopuści do uruchomienia bez wcześniejszej inicjalizacji takiej zmiennej. Innymi słowy, to:

var x: Int

println(x)

się nie skompiluje, gdyż jaką wartość wówczas terminal ma wyświetlić? To nie jest język C, w którym w takiej sytuacji jest nadawana dowolna ("śmieciowa") wartość. Zmiana na to:

var x = 5

println(x)

sprawi, że od teraz kod zostanie uznany za poprawny i da pożądany efekt, gdyż ustawiliśmy świadomie konkretną wartość. Zwróćcie też uwagę, że gdy nie podajemy wartości podczas inicjalizacji, to musimy podać typ zmiennej. Pamiętajcie: Kotlin zapewnia bez-pie-czeń-stwo.

Różnica pomiędzy słowami kluczowymi "var" i "val" w języku Kotlin

Słowo kluczowe "var" zezwala na powtórne przypisanie wartości. "val" zapewnia, że po pierwszym przypisaniu wartości nie będzie mogła ona ulec zmianie.


To tyle z najważniejszych informacji! Konkludując, "var" i "val" w języku Kotlin różnią się jedynie możliwością późniejszej edycji wartości zamieniając ją na inną. Obowiązuje statyczna typizacja (każda zmienna musi mieć jasno zdefiniowany niezmienny typ), natomiast kompilator poradzi sobie przy automatycznym wydedukowaniu o jaki typ nam chodzi na podstawie podanej wartości. Podając jednak świadomie typ zmiennej, kompilator będzie "patrzeć na ręce" czy wpisywana przez nas wartość odpowiada jej typowi.

PODOBNE ARTYKUŁY