val oznacza referencję tylko do odczytu, której po inicjalizacji nie można przypisać ponownie. var to referencja mutowalna, którą można nadpisywać. val nie gwarantuje niemutowalności obiektu, ale sprzyja bezpieczniejszemu kodowi.
Odpowiedź zaawansowana
Głębiej
Rozwinięcie krótkiej odpowiedzi — co zwykle ma znaczenie w praktyce:
Kontekst (tagi): kotlin, variables, immutability
JVM: pamięć (heap/stack), GC i co wpływa na latency.
Kontrakty: equals/hashCode/toString, mutowalność i konsekwencje.
Wydajność: boxing, alokacje, kolekcje, inlining.
Wytłumacz "dlaczego", nie tylko "co" (intuicja + konsekwencje).
Trade-offy: co zyskujesz i co tracisz (czas, pamięć, złożoność, ryzyko).
Edge-case’y: puste dane, duże dane, błędne dane, współbieżność.
Przykłady
Krótki przykład (szablon do wyjaśniania):
// Example: discuss trade-offs for "val-vs-var?"
function explain() {
// Start from the core idea:
// val jest niemodyfikowalne (tylko do odczytu), var jest modyfikowalne.
}
Typowe pułapki
Zbyt ogólna odpowiedź (brak konkretów, brak przykładów).
Brak rozróżnienia między "średnio" a "najgorzej" (np. złożoność).