Operatory i równość

Operatory to symbole, którymi wykonujemy działania: liczenie, porównywanie i łączenie warunków. Poznasz operatory arytmetyczne, przypisania, porównania i logiczne, a także ważne rozróżnienie: == (równość wartości) kontra === (ten sam obiekt).

+ – * / % += ++ == === != && || !
1

Operatory arytmetyczne

Służą do wykonywania działań na liczbach:

OperatorDziałaniePrzykład
+Dodawanie5 + 38
-Odejmowanie5 - 32
*Mnożenie5 * 315
/Dzielenie17 / 53 (całkowite!)
%Reszta z dzielenia (modulo)17 % 52
Wszystkie działania naraz
val a = 17
val b = 5

println("Suma:     ${a + b}")   // 22
println("Różnica:  ${a - b}")   // 12
println("Iloczyn:  ${a * b}")   // 85
println("Iloraz:   ${a / b}")   // 3  (dzielenie całkowite)
println("Reszta:   ${a % b}")   // 2
% – reszta z dzielenia, bardzo przydatna

Operator % zwraca resztę z dzielenia. Najczęstsze zastosowanie to sprawdzanie parzystości: jeśli liczba % 2 == 0, liczba jest parzysta. Przyda się też do „zawijania” wartości (np. dni tygodnia).

2

Operatory przypisania

Znak = przypisuje wartość. Operatory złożone (+=, -=…) to skrót: „weź obecną wartość, wykonaj działanie, zapisz wynik z powrotem”. Działają tylko na zmiennych var.

ZapisTo samo co
x += 5x = x + 5
x -= 5x = x - 5
x *= 5x = x * 5
x /= 5x = x / 5
x++x = x + 1 (zwiększ o 1)
x--x = x - 1 (zmniejsz o 1)
Operatory przypisania w akcji
var suma = 0
suma += 5     // 5
suma += 3     // 8
suma *= 2     // 16

var licznik = 0
licznik++       // 1
licznik++       // 2
licznik--       // 1
3

Operatory porównania

Porównują dwie wartości i zwracają wynik logiczny Boolean (true albo false):

OperatorZnaczenie
<mniejsze niż
>większe niż
<=mniejsze lub równe
>=większe lub równe
==równe (taka sama wartość)
!=różne
Porównania zwracają Boolean
val a = 5
val b = 8

println(a < b)    // true
println(a > b)    // false
println(a == b)   // false
println(a != b)   // true

Wyniki porównań wykorzystamy w instrukcjach warunkowych (temat z bloku o sterowaniu przepływem).

4

== kontra === – dwa rodzaje równości

Kotlin rozróżnia dwa pytania o „równość”, które łatwo pomylić:

OperatorPyta o…Nazwa
==Czy wartości są takie same?równość strukturalna
===Czy to dokładnie ten sam obiekt w pamięci?równość referencyjna

Dwa różne pudełka mogą zawierać identyczną zawartość. == sprawdza zawartość, === sprawdza, czy to fizycznie to samo pudełko.

Ta sama treść, różne obiekty
val imie = "Anna"

val czesc = "An"
val zlozone = czesc + "na"   // "Anna" zbudowane z kawałków = nowy obiekt

println(imie == zlozone)    // true  – ta sama treść ("Anna")
println(imie === zlozone)   // false – to dwa różne obiekty w pamięci
W praktyce prawie zawsze używasz ==

Gdy chcesz sprawdzić, czy dwie rzeczy mają taką samą wartość (a tego chcesz niemal zawsze), używaj ==. Operator === jest potrzebny rzadko – dopiero wtedy, gdy świadomie pytasz, czy to dosłownie ten sam obiekt.

Uwaga na wniosek

Z tego, że == daje true, nie wynika, że === też. Odwrotnie jest pewne: jeśli to ten sam obiekt (=== true), to i wartości są równe (== true).

5

Operatory logiczne

Łączą lub odwracają warunki (wartości Boolean). Pozwalają zbudować bardziej złożone pytania niż pojedyncze porównanie.

OperatorZnaczenieDaje true, gdy…
&&I (oba naraz)oba warunki są prawdziwe
||LUB (co najmniej jeden)przynajmniej jeden warunek jest prawdziwy
!NIE (zaprzeczenie)odwraca wartość: z true robi false
Łączenie warunków
val wiek = 17

// && – oba warunki muszą być spełnione
println(wiek >= 13 && wiek <= 19)   // true – nastolatek

// || – wystarczy jeden warunek
val pora = "noc"
println(pora == "dzień" || pora == "noc")   // true

// ! – zaprzeczenie
println(!(wiek >= 18))   // true – NIE jest pełnoletni
Każdy warunek to osobne porównanie

Przy łączeniu warunków musisz powtórzyć nazwę zmiennej po każdej stronie. Zapis wiek >= 13 && wiek <= 19 jest poprawny; skrótu w stylu 13 <= wiek <= 19 Kotlin nie rozumie.

6

Kolejność (priorytet) operatorów

Tak jak w matematyce, niektóre operatory wykonują się przed innymi. Od najwyższego do najniższego priorytetu:

KolejnośćOperatory
1 (pierwsze)! (negacja)
2*   /   %
3+   -
4<   <=   >   >=
5==   !=
6&&
7 (ostatnie)||
Nawiasy rozwiewają wątpliwości
println(2 + 3 * 4)       // 14  (* przed +)
println((2 + 3) * 4)     // 20  (nawiasy zmieniają kolejność)
W razie wątpliwości – nawiasy

Nie musisz znać całej tabeli na pamięć. Gdy wyrażenie robi się złożone, dodaj nawiasy – kod stanie się jednoznaczny i czytelniejszy.

7

Częste błędy

❌ Błąd 1: = zamiast == w porównaniu

❌ Jeden znak równości

val x = 5
println(x = 5)
// Błąd! = to przypisanie,
// nie porównanie

✅ Podwójny znak równości

val x = 5
println(x == 5)
// true

❌ Błąd 2: === gdy chodzi o wartość

❌ Porównanie obiektów zamiast treści

val a = "An" + "na"
val b = "An" + "na"
println(a === b)
// może dać false –
// to różne obiekty

✅ Porównanie wartości

val a = "An" + "na"
val b = "An" + "na"
println(a == b)
// true – ta sama treść

❌ Błąd 3: brak powtórzenia zmiennej w warunku

❌ Skrót jak w matematyce

val w = 15
println(13 <= w <= 19)
// Błąd! tak się nie da

✅ Dwa pełne warunki przez &&

val w = 15
println(w >= 13 && w <= 19)
// true

❌ Błąd 4: dzielenie całkowite przez zero

❌ Int dzielone przez 0

val x = 10 / 0
// Błąd w czasie działania!
// nie można dzielić
// liczb całkowitych przez 0

✅ Najpierw sprawdź dzielnik

val dzielnik = 0
if (dzielnik != 0) {
    println(10 / dzielnik)
}
// dzielimy tylko gdy != 0
8

Podsumowanie

  • Arytmetyczne: + - * / oraz % (reszta). Pamiętaj o dzieleniu całkowitym.
  • Przypisania: = oraz skróty += -= *= /=; ++ zwiększa, -- zmniejsza o 1.
  • Porównania < > <= >= == != zwracają Boolean.
  • == – równość wartości (strukturalna); ===ten sam obiekt (referencyjna). Na co dzień używasz ==.
  • Logiczne: && (oba), || (co najmniej jeden), ! (zaprzeczenie). Każdy warunek to osobne porównanie.
  • Operatory mają priorytet (* przed + itd.); w razie wątpliwości używaj nawiasów.
9

Zadania do wykonania

Zadania wykonaj w Kotlin Playground (play.kotlinlang.org).

Zadanie 1 łatwe

Zadeklaruj dwie liczby całkowite. Wypisz ich sumę, różnicę, iloczyn, iloraz oraz resztę z dzielenia (%) – każde działanie w osobnej linii.

Zadanie 2 łatwe

Zadeklaruj var punkty = 0. Za pomocą operatorów += i ++ zmień jego wartość kilka razy, wypisując stan po każdej zmianie.

Zadanie 3 łatwe

Zadeklaruj liczbę i sprawdź dwoma osobnymi wyrażeniami logicznymi: czy mieści się w zakresie od 1 do 100 (>= 1 && <= 100) oraz czy jest parzysta (% 2 == 0). Wypisz oba wyniki typu Boolean.

Zadanie 4 średnie

Napisz fragment, który dla zadanej liczby wypisze true, jeśli jest ona parzysta i większa od 10, a w przeciwnym razie false. Następnie zbuduj drugie wyrażenie z ||: liczba jest podzielna przez 3 lub przez 5. Przetestuj na kilku liczbach.