0Pricing
Scala for Backend Engineering & Functional Programming · Lekcja

val a var

Niemutowalne i mutowalne wiązania.

val a var to bezpłatna lekcja Scala for Backend Engineering & Functional Programming na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Scala for Backend Engineering & Functional Programming, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Scala for Backend Engineering & Functional Programming zawiera 4 lekcji w sumie.

Dwa sposoby nazywania wartości

W języku Scala wiążesz nazwę z wartością za pomocą val albo var.

val tworzy niezmienne wiązanie: po przypisaniu nigdy nie może ono wskazywać innej wartości. var tworzy zmienne wiązanie, któremu można później przypisać inną wartość.

Wybór między nimi to jeden z pierwszych nawyków, które wyrabia sobie programista backendu Scali.

val name = "Ada"
var score = 10

Definiowanie val

val jest tylko do odczytu. Przypisujesz mu wartość raz, a kompilator gwarantuje, że pozostanie ona taka sama.

Ułatwia to analizowanie kodu: val nigdy nie zaskoczy Cię zmianą wartości w innym miejscu.

object Main extends App {
  val pi = 3.14
  println(pi)
}

Ponowne przypisanie val kończy się błędem

Próba ponownego przypisania wartości do val powoduje błąd kompilacji, a nie awarię w czasie działania. Kompilator zatrzyma program, zanim ten w ogóle zostanie uruchomiony.

Poniższy fragment zakończyłby się błędem reassignment to val.

val country = "Turkey"
country = "Spain" // error: reassignment to val

Definiowanie var

Do var można przypisywać nowe wartości dowolną liczbę razy, o ile nowa wartość ma zgodny typ.

Używaj var, gdy wartość rzeczywiście musi zmieniać się w czasie, na przykład w przypadku licznika w pętli.

object Main extends App {
  var count = 0
  count = count + 1
  count = count + 1
  println(count)
}

var zachowuje swój typ

Chociaż do var można przypisywać nowe wartości, jego typ jest ustalony w momencie definicji.

Jeśli level zaczyna jako Int, nie możesz później zapisać w nim wartości typu String. Kompilator odrzuci taką niezgodność.

var level = 1
level = 5        // ok, still an Int
level = "high"  // error: type mismatch

Domyślnie wybieraj val

Idiomatic Scala preferuje val niemal wszędzie. Niezmienność pozwala uniknąć całych klas błędów i zwiększa bezpieczeństwo kodu współbieżnego.

  • Najpierw sięgaj po val.
  • Przechodź na var tylko wtedy, gdy naprawdę potrzebujesz modyfikowalności.

Zamiana var na val

Wiele pętli, które wyglądają tak, jakby wymagały var, można zapisać za pomocą val i wyrażenia.

W tym przykładzie suma jest obliczana za pomocą zakresu i sum, bez potrzeby modyfikowania danych.

object Main extends App {
  val total = (1 to 5).sum
  println(total)
}

Zakres wiązania

Zarówno val, jak i var istnieją wewnątrz bloku { ... }, w którym je zdefiniowano.

Wiązanie zadeklarowane wewnątrz bloku nie jest widoczne poza nim. Dzięki temu nazwy pozostają uporządkowane i nie dochodzi do ich przypadkowego ponownego użycia.

object Main extends App {
  val outer = 1
  {
    val inner = 2
    println(outer + inner)
  }
  // inner is not visible here
}

Lazy val

lazy val jest obliczane dopiero przy pierwszym użyciu, a następnie buforowane.

Jest to przydatne w przypadku kosztownych wartości, których nie zawsze możesz potrzebować. Ciało zostanie wykonane najwyżej raz.

object Main extends App {
  lazy val greeting = { println("computing"); "Hi" }
  println("before")
  println(greeting)
  println(greeting)
}

val z jawnym typem

Typ wiązania można określić po dwukropku. Dokumentuje to intencję i pozwala celowo poszerzyć typ.

W tym przykładzie amount zadeklarowano jako Double, mimo że 10 wygląda jak Int.

val amount: Double = 10
val label: String = "price"

val i var obok siebie

Oba zachowują się tak samo, dopóki nie spróbujesz przypisać nowej wartości.

  • val x: przypisz raz, a wartość pozostanie ustalona.
  • var y: przypisuj i przypisuj ponownie bez ograniczeń.

Poniższy program zwiększa tylko wartość var.

object Main extends App {
  val base = 100
  var bonus = 0
  bonus = bonus + 25
  println(base + bonus)
}

Szybkie sprawdzenie

Sprawdź, czy rozumiesz val i var.

Podsumowanie

Nauczyłeś się dwóch sposobów wiązania nazw w języku Scala.

  • val jest niezmienne i stanowi domyślny wybór.
  • var jest zmienne i należy go używać tylko dla wartości, które muszą się zmieniać.
  • Ponowne przypisanie do val powoduje błąd kompilacji.
  • Typy obu wiązań są ustalone, a lazy val odracza obliczenia.

Często zadawane pytania

Czy lekcja „val a var” jest bezpłatna?

Tak — pełny tekst „val a var” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Scala for Backend Engineering & Functional Programming, przejdź na CoddyKit PRO. Kurs Scala for Backend Engineering & Functional Programming zawiera 4 lekcji w sumie.

Co nauczysz się w „val a var”?

Niemutowalne i mutowalne wiązania. Ćwiczysz Scala for Backend Engineering & Functional Programming z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Scala for Backend Engineering & Functional Programming?

Nie wymagamy żadnego doświadczenia. Scala for Backend Engineering & Functional Programming w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „val a var”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Scala for Backend Engineering & Functional Programming?

Tak. Każda lekcja Scala for Backend Engineering & Functional Programming zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. val a var
  2. Podstawowe typy i literały
  3. Wnioskowanie typów
  4. Wyrażenia zamiast instrukcji
← Powrót do Scala for Backend Engineering & Functional Programming