W Dartcie słowo kluczowe final oznacza, że wartość zmiennej można przypisać tylko raz – ale sam obiekt może być modyfikowalny (np. lista), o ile nie jest też const.

Kiedy używać final?

Najczęstsze przypadki:

  • Gdy znasz wartość tylko raz, ale dopiero w czasie działania programu (runtime), np. wynik funkcji, odczyt z API, DateTime.now(), itp.
  • Gdy chcesz uniknąć przypadkowych ponownych przypisań i potraktować zmienną jako „tylko do odczytu” po inicjalizacji.
  • W klasach – dla pól, które powinny być ustawione w konstruktorze i później już się nie zmieniać (np. final String id;).

Przykład:

dart

final now = DateTime.now();   // OK – przypisanie raz
// now = DateTime.now();      // Błąd – nie można przypisać ponownie

final vs var vs const

  • var – można przypisywać wiele razy ; typ jest inferowany, ale wartość zmienna.
  • final – przypisanie tylko raz , ale obiekt może być mutowalny (np. lista, mapa).
  • const – wartość znana w czasie kompilacji; obiekt jest niemutowalny i współdzielony (compile‑time constant).

Przykład różnicy:

dart

final list = [1, 2, 3];
list.add(4);        // OK – modyfikujesz zawartość
// list = [1, 2];   // Błąd – nie można przypisać nowej listy

const clist = [1, 2, 3];
// clist.add(4);    // Błąd – const lista jest niemutowalna

Jak to zapamiętać?

  • Używaj final , gdy: „ustawiam raz, potem tylko czytam”.
  • Używaj const , gdy: „wartość jest znana w compile‑time i nigdy się nie zmieni”.
  • Używaj var , gdy: „zmienna będzie zmieniać wartość w czasie działania programu”.

Jeśli chcesz, można przejść przez Twoje konkretne przykłady kodu i dobrać, czy lepsze będzie final, var czy const.