Kotlin tutorial #2 – variables

Podstawą chyba każdego języka programowania są zmienne, w których można przechować wartość, którą można modyfikować. Są też stałe, kiedy nie chcemy, żeby przypadkiem coś zostało zmienione (np liczba PI, to wartość stała, nadpisywanie jej zawartości np liczbą 5 i nazywanie PI nie ma logicznych podstaw i będzie prowadzić do błędów). Java i Kotlin mają do tego aspektu podobne podejścia. Są to języki silnie, statycznie typowane, tzn jeżeli nadamy jakiś typ zmiennej, to nie da się go wprost porównać z innym typem, jeżeli np napis ma wartość 1 i zmienna typu liczbowego ma wartość 1, to one nie są sobie równe (szczegóły poniżej). Słowo statycznie oznacza z kolei, że zmienne przyjmują swoje typy w czasie kompilacji programu, a nie w czasie jego działania, jak ma to miejsce np w JavaScripcie. Kotlin posiada tutaj jednak ułatwienie, które nazywa się typowaniem zmiennych.

W praktyce oznacza to tyle, że mamy kod w javie:

Słówko final oznacza stałą, czyli po przypisaniu wartości nie można już jej zmienić. Zaprezentowane wartości to maksimum, jakie może przyjąć dana zmienna, po przekroczeniu jej zacznie się odliczanie od wartości ujemnych, coś na kształt licznika w samochodzie, tylko że tam nie ma ujemnych, tylko zero 😉 A jak to wygląda w Kotlinie?

Słówko var (variables) oznacza zmienną, z kolei val (values) stałą. Druga sprawa jest taka, że na podstawie przypisanej wartości zostaje nadany odpowiedni typ zmiennej. Innymi słowy w tym przypadku domyślny będzie Int, chyba, że po dwukropku wymusimy inny typ. Kod w komentarzu się nie skompiluje, ponieważ do wprowadzania napisów (zmienna typu String) używa się dwóch znaków cudzysłowu: „120”.

W tym miejscu należy też wspomnieć o zmiennej Object w javie, po której dziedziczą wszystkie typy. Nie ma ona zbyt wielu metod, ale posiada equals – zawiera. Używamy jej do porównania zawartości obiektów.

Funkcja ta zwróci następujące wartości:

Dzieje się tak ponieważ zmienna typu char jest typem liczbowym, dzięki temu możemy zwiększając jej wartość wydrukować kolejną literę. Nie uda się to w przypadku e i ob, ponieważ jedna z nich jest stałą, druga z kolei jest typem Object, gdzie nie wiadomo jak obsługiwać iterację. Z kolei w Kotlinie:

Otrzymamy taką odpowiedź:

Co tu się stało? Po pierwsze iterujemy po c, który domyślnie został zapisany jako int, z racji wysokiego zakresu udaje nam się to bezbłędnie. Po e nie możemy iterować, ponieważ jest stała. Ale za to w zmiennej d wymuszamy typ byte, który może przyjąć wartość max 127, a następnie zaczyna iterację od najniższej wartości. Iterowanie typu char jest takie samo jak w Javie, z kolei Stringa nie można iterować, tutaj również bez niespodzianek. Słówko kluczowe equals występuje również w Kotlinie, działa tak samo jak w javie, innymi słowy porównuje wartości pomiędzy takimi samymi typami. Pojawił się też nowy operator === oznaczający, że oba obiekty mają taką samą referencję (czyli odnoszą się do tego samego obiektu). Wygląda to tak:

Co z kolei zwraca:

Czyli z i x mają tą samą referencję, oraz x ma taką samą wartość jak y, jeśli przekształcimy go na Int.

W podsumowaniu chciałem jeszcze zwrócić uwagę na wielkość liter. Typ zmiennej pisany z małej litery to prymityw, Kotlin już takich nie obsługuje i tam piszemy wszystko z dużej. Prymityw znaczy tyle, że nie jest obiektem, tylko typem prostym mogącym przechowywać jakąś wartość liczbową (char jest prymitywem, ponieważ przechowuje wartości liczbowe). Obiekty z kolei mają dodatkowe właściwości, mogą mieć np wartość null. Kotlin jednakże zabezpiecza nas przed taką ewentualnością.

W związku z powyższym Java posiada mechanizm automatycznego opakowywania prymitywów. Tzn, jeżeli porównujemy obiekt z prymitywem int, to automatycznie zostanie on skonwertowany do obiektu Integer o tej samej wartości. W Kotlinie z racji braku obsługi prymitywów takie operacje nie są potrzebne. To by było tyle na dzisiaj, jak widać mechanizm typowania zmiennych pozwala zaoszczędzić zbędnego kodu. Wszystkie użyte dzisiaj przykłady znajdują się też na GitHubie, zachęcam do samodzielnego pobawienia się 😉

Pozdrawiam!