1. Poprzedni: Spis treści
Kotlin: ilustrowany przewodnik • Rozdział 1

Zmienne, wyrażenia i typy

Chapter cover image
Archimedes zastanawia się jak nazwać swoją stałą...

A więc chciałbyś zostać programistą Kotlina?

Dobrze trafiłeś!

Ta książka pokaże Ci podstawy Kotlina, powoli wprowadzając Cię w kluczowe zagadnienia języka, aby pomóc Ci stać się biegłym programistą Kotlina. Nawet jeśli jesteś doświadczonym profesjonalistą, ważne jest by znać podstawy, aby zbudować solidny fundament, dzięki czemu nauka będzie bardziej skuteczna.

Twoja przygoda zaczyna się tu, w Rozdziale 1, z którego dowiesz się wszystkiego o zmiennych, wyrażeniach i typach.

Zaczynajmy!


Wprowadzenie do zmiennych

To jest okrąg.

A circle

Tysiące lat temu, greckiemu filozofowi o imieniu Archimedes udało się opisać jak w przybliżeniu policzyć długość tej linii, zwanej obwodem okręgu. Pewnie pamiętasz to równanie ze starych dobrych czasów podstawówki:

Obwód = 2 x pi x r Obwód = 2  r

“Obwód okręgu jest równy 2 razy π razy promień okręgu”.

W powyższym równaniu litera r nie jest liczbą. To litera, która reprezentuje promień — odległość między środkiem okręgu a jego krawędzią.

Obwód okręgu o b w ó d r

r nazywamy zmienną, ponieważ promień może się zmieniać, w zależności od rozmiaru okręgu. Innymi słowy, zmienna r nie jest liczbą samą w sobie; to raczej wiaderko, które zawiera liczbę — dowolną liczbę.

Puste wiaderko r

Zmienne są używane nie tylko w algebrze i geometrii. Są też bez przerwy używane w programowaniu, gdzie mają tę samą rolę: przechowywanie wartości. W Kotlinie możesz stworzyć zmienną i wpisać do niej liczbę w taki sposób:

var r = 5.2

Ten fragment kodu tak naprawdę robi dwie rzeczy w jednej linijce.

Deklaracja i przypisanie zmiennej var r = 5.2 przypisanie deklaracja
  1. Gdy piszemy var r, deklarujemy nową zmienną o nazwie r. Możesz sobie wyobrazić, że deklaracja zmiennej jest jak tworzenie wiaderka.
  2. Gdy piszemy r = 5.2, przypisujemy wartość 5.2 do zmiennej r. Innymi słowy, wkładamy liczbę 5.2 do wiaderka.
Wiaderko z wartością 5.2 r 5.2

Rozbijmy tę linię kodu na trzy główne części:

Słowo kluczowe, nazwa zmiennej i wartość var r = 5.2 nazwa zmiennej słowo kluczowe wartość

W tym kodzie…

  • var jest słowem kluczowym, które mówi Kotlinowi, aby stworzył nową zmienną.
  • r jest nazwą zmiennej. Możesz się też spotkać z terminem identyfikator.
  • Liczba 5.2 jest wartością, która jest przypisywana.

var jest jednym z wielu słów kluczowych, które zobaczymy podczas nauki Kotlina. Ważna rzecz do zapamiętania o słowach kluczowych: nie mogą być użyte w nazwach czegoś, co sam tworzysz. Na przykład, nie możesz użyć var jako nazwy zmiennej:

var var = 5
Błąd

Będziemy mieli okazję poznać inne słowa kluczowe w kolejnych rozdziałach.

Zmienianie wartości zmiennych

Jak zaznaczyliśmy powyżej, we wzorze 2πr, zmienna r może reprezentować różne liczby w różnych przypadkach.

Okręgi o różnych rozmiarach 10.0 5.2 6.7

W Kotlinie, jeśli zdecydujesz, że chcesz, aby r reprezentowało inną liczbę, możesz po prostu przypisać jej inną wartość, jak pokazano w drugiej linijce:

var r = 5.2
r = 6.7

Gdy zmieniamy wartość tej zmiennej, nie musimy już używać słowa kluczowego var, bo zmienna została już zadeklarowana w poprzedniej linijce.

Zmienne, które nie mogą zmieniać wartości

Spójrzmy jeszcze raz na wzór na obwód okręgu:

Obwód = 2 x pi x r Obwód = 2  r

Grecka litera π (czytamy “pi”) różni się całkowicie od zmiennej r. O ile r może przechowywać dowolną liczbę, π zawsze oznacza jedną, bardzo konkretną liczbę, którą przybliżymy jako 3.14.

W ten sam sposób, gdy programujemy w Kotlinie, są sytuacje, w których chcemy być pewni, że zmienna nigdy się nie zmieni.

Wiaderko, które zawsze przechowuje tę samą wartość 3.14 6.28

W takich przypadkach, zamiast deklarowania jej z użyciem var, deklarujemy używając val, w taki sposób:

val π = 3.14

Gdy teraz spróbujesz zmienić wartość π, dostaniesz błąd:

val π = 3.14
π = 1.23
Błąd

Gdy raz coś włożysz do takiego wiaderka, nie możesz wsadzić już nic innego!

Deklarowanie zmiennych z użyciem val to świetny sposób, aby upewnić się, że przypadkowo nie zmienisz wartości czegoś, co nie powinno się zmieniać. Tak naprawdę to bardzo dobry pomysł, aby zawsze zaczynać od val i zmieniać na var gdy jest to absolutnie konieczne.

Nazywanie zmiennych

Fajnie było używać litery π w naszym kodzie, lecz o ile nie mieszkasz w Grecji, zapewne nie masz jej na swojej klawiaturze. Od teraz ułatwimy sobie życie i będziemy nazywać zmienną pi, a zamiast r - promien. Dzięki temu inni deweloperzy, którzy zajrzą kiedyś do naszego kodu, będą dokładnie wiedzieć, co dana zmienna reprezentuje — nie chcemy, aby musieli zgadywać co oznacza r!

Niekiedy potrzebujemy więcej niż jednego słowa w identyfikatorze zmiennej. W Kotlinie zazwyczaj zaczynamy od pierwszego słowa pisanego małą literą, a kolejne słowa zaczynamy od wielkich liter, w taki sposób:

var promienOkregu = 5.2

Skoro omówiliśmy już sobie podstawy deklarowania zmiennych i przypisywania im wartości, możemy zacząć przypisywać coś więcej niż tylko proste liczby — możemy zacząć przypisywać wyniki bardziej skomplikowanych obliczeń, takich jak wartość ze wzoru na obwód okręgu! Przejdźmy do wyrażeń!

Wyrażenia i instrukcje w Kotlinie

Spójrzmy na ten wzór jeszcze raz:

Obwód = 2 x pi x r Obwód = 2  r

Stworzyliśmy już zmienną dla pi i zmienną dla promienia, więc musimy tylko powiedzieć Kotlinowi, aby użył ich, by coś dla nas policzyć, tak abyśmy mogli dostać obwód dowolnego okręgu, bez względu na jego wielkość.

Wystarczy pomnożyć 2, pi i promien. W Kotlinie, tak jak w większości języków programowania, mnożenie nie jest reprezentowane przez x, reprezentujemy je za pomocą gwiazdki: *, więc nasz kod wygląda tak:

var promien = 5.2
val pi = 3.14

val obwod = 2 * pi * promien

Jak na razie przypisywaliśmy tylko proste wartości — takie jak 5.2 czy 3.14. Tu mamy pierwszy raz przypisania czegoś bardziej złożonego: 2 * pi * promien.

Gdy Kotlin to widzi, po prostu liczy dla nas wartość tego wyrażenia — mnoży 2 razy pi razy promien, a następnie bierze wynik i przypisuje go do zmiennej o nazwie obwod. W tym przypadku (dla promienia 5.2), obwod będzie równy 32.656.

Okrąg z policzonym obwodem. 32.656 o b w ó d r

Jako że z 2 * pi * radius możemy dostać taką wartość, mówimy, że może być ewaluowane. Kod, który może być ewaluowany, nazywamy wyrażeniem. Oto kilka przykładów wyrażeń:

  • 2 + 3
  • 2 * pi * r
  • pi * r * r

Zmienne same w sobie też są wyrażeniami — ewaluują się do wartości, jaką przechowują:

  • promien
  • pi

Gdy wpisujesz liczbę z ręki (w przeciwieństwie do podawania zmiennej), nazywa się literałem (stałą dosłowną). Literały same w sobie też są wyrażeniami - ewaluują się do siebie samych! Oto kilka przykładów:

  • 2
  • 5.2
  • 3.14

Wszystkie te przykłady ewaluują się do pewnej wartości. Z drugiej strony, jeśli jakiś fragment kodu nie ewaluuje się do żadnej wartości, nazywamy go instrukcją.

Oto praktyczna zasada aby rozróżnić wyrażenie od instrukcji:

Zasada: Jeśli możesz przypisać fragment kodu do zmiennej, jest to wyrażenie. W przeciwnym wypadku jest to instrukcja.

Zastosujmy tę regułę do pierwszego wyrażenia z każdej z trzech list powyżej (2 + 3, promien i 2). Fragmenty zaznaczone poniżej to wyrażenia:

val a = 2 + 3
val b = promien
val c = 2

Skoro każdy z nich może być przypisany do zmiennej, wszystkie są wyrażeniami.

Jedyna instrukcja jaką do tej pory widzieliśmy to instrukcja przypisania, taka jak val pi = 3.14. Zastosowanie naszej reguły do instrukcji przypisania wydaje się dziwne, bo używamy przypisania w przypisaniu (ups!):

val a = val pi = 3.14
Błąd

Gdy spróbujesz to zrobić, Kotlin da Ci pomocny komunikat o błędzie: “Expecting an expression” (spodziewano się wyrażenia). Jeśli kiedykolwiek zobaczysz ten błąd, oznacza to, że próbowałeś użyć instrukcji tam, gdzie Kotlin potrzebował wyrażenia.

Rozróżnienie między instrukcjami i wyrażeniami jest ważne podczas nauki Kotlina; będziemy w tej książce często używać tych terminów.

Do tej pory, niezależnie czy używaliśmy literałów czy złożonych wyrażeń, cały czas przypisywaliśmy liczby do zmiennych. A w zmiennych można przechowywać wiele różnych rzeczy! Spójrzmy teraz na niektóre z tych rzeczy.

Typy: różne rodzaje wartości

W Kotlinie różne zmienne mogą przechowywać różne rodzaje wartości. Rodzaj wartości, jaki zmienna trzyma, nazywamy jej typem.

Spójrzmy raz jeszcze na zmienne promien i pi:

var promien = 5.2
val pi = 3.14

W tym przypadku, zarówno promien jak i pi reprezentują liczby z częścią po przecinku, co jest typem w Kotlinie nazywanym Double. Jeśli chcesz, możesz sam podać Kotlinowi typ zmiennej, w taki sposób:

var promien: Double = 5.2
val pi: Double = 3.14

W taki sposób jawnie podajemy typ.

Przeważnie nie musisz podawać typu zmiennej. W takim przypadku Kotlin postara się wywnioskować typ na podstawie tego, co przypisujesz do zmiennej. Ten proces nazywa się wnioskowaniem typu (ang. type inference).

Czyli gdy napiszemy tak…

var promien = 5.2

…wtedy Kotlin widzi, że 5.2 jest typu Double, a więc automatycznie używa Double jako typu zmiennej promien.

Oprócz Double, są też inne podstawowe typy, o których warto wiedzieć! Spójrzmy teraz na niektóre z nich.

Liczby całkowite

Dotychczas widzieliśmy tylko liczby z częścią po przecinku, takie jak 5.2 czy 3.14. Możesz też używać liczb bez przecinka, takie jak po prostu 5 czy 3.

Takie liczby nazywane są całkowitymi (ang. integers), a w Kotlinie typ dla takich liczb nazywa się Int. Oto przykład tworzenia zmiennej całkowitej:

val liczbaPsow: Int = 3

Wartości logiczne

Czasami chciałbyś mieć zmienną do trzymania wartości typu włączone lub wyłączone, tak lub nie, prawda lub fałsz itd.

W takich przypadkach potrzebujesz zmienną typu logicznego: Boolean.

val ziemiaJestOkragla: Boolean = true
val ziemiaJestPlaska: Boolean = false

Dlaczego ten typ nazywa się on Boolean?

Jego nazwa pochodzi od Brytyjczyka z XIX wieku, George’a Boole’a, który stworzył gałąź algebry operującą na wartościach typu prawda czy fałsz zamiast liczb.

Świetnie.

Ciągi znaków

Możesz też przechowywać tekst w zmiennych. Po angielsku nazywa się to string (z ang. sznurek, linka), bo pewien ciąg znaków — takich jak litery, liczby, symbole — jest połączony jak sznurkiem:

Ciąg znaków w ó k a n z g ą i C

W Kotlinie odpowiadający mu typ nazywa się String, a zmienną typu String możesz stworzyć tak:

val tekst: String = "To jest ciąg znaków"

Inne typy

To są tylko pewne popularne typy zmiennych. W tej książce nauczymy się jak tworzyć własne typy — klasy — które budują na tym, co właśnie zobaczyliśmy.

Typy i zmiana wartości

W Kotlinie typ każdej zmiennej jest ustalony, gdy piszesz kod i ten typ nigdy się nie zmieni (chyba że zmienisz kod). Nazywa się to statycznym typowaniem. Gdy zmienna została zadeklarowana z danym typem, wartość innego typu nie może być w niej umieszczona. Na przykład, gdy stworzymy zmienną typu Int, nie możemy zmienić jej wartości by zawierała ciąg znaków typu String:

var liczbaPsow: Int = 5
liczbaPsow = "pięć"
Błąd

W kolejnych rozdziałach zobaczymy, jak statyczne typowanie ma znaczenie nie tylko przy zmianie wartości zmiennych. Zobaczymy też, że niektóre typy mogą mieć podtypy.

Ale nie wybiegajmy za bardzo w przyszłość — najpierw podsumujmy ten rozdział!

Podsumowanie

W tym rozdziale poznaliśmy:

  • zmienne
    • Używanie var dla zmiennych, których wartości możemy zmieniać.
    • Używanie val dla zmiennych tylko do odczytu.
  • wyrażenia i instrukcje
    • Wyrażenia mogą być ewaluowane, tak by dostać wartość.
    • Instrukcje nie ewaluują się i nie zwracają wartości.
    • Możesz przypisać fragment kodu do zmiennej by sprawdzić, czy jest to instrukcja, czy wyrażenie.
  • typy proste
    • Typy liczbowe takie jak Double i Int.
    • Typ logiczny Boolean dla wartości true (prawda) i false (fałsz).
    • Typ String przeznaczony dla wartości tekstowych.

Teraz gdy dobrze rozumiemy zmienne, czas zacząć je używać w ciekawy sposób! Przygotuj się na Rozdział 2 gdzie nauczymy się o funkcjach w Kotlinie!

Podziękowania dla Matta McKenna, Jacoba Rakidzich i Douga Smitha za recenzję tego artykułu.

Share this article:

  • Share on Twitter
  • Share on Facebook
  • Share on Reddit