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 = 10Definiowanie 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 valDefiniowanie 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 mismatchDomyś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
vartylko 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.
valjest niezmienne i stanowi domyślny wybór.varjest zmienne i należy go używać tylko dla wartości, które muszą się zmieniać.- Ponowne przypisanie do
valpowoduje błąd kompilacji. - Typy obu wiązań są ustalone, a
lazy valodracza 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.