Menu
Coddy logo textTech

Konwencja prefiksu _

Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 31 z 110.

Prefiks podkreślenia _ to sposób, w jaki Dart oznacza składowe jako prywatne. W przeciwieństwie do języków używających słów kluczowych, takich jak private, Dart opiera się na tej konwencji nazewniczej, aby kontrolować widoczność.

Możesz stosować podkreślenie zarówno do pól, jak i metod:

class Counter {
  int _count = 0;        // Pole prywatne
  
  void _increment() {    // Metoda prywatna
    _count++;
  }
  
  void increase() {      // Metoda publiczna
    _increment();
    print('Count: $_count');
  }
}

Podkreślenie działa w przypadku każdego identyfikatora — zmiennych, metod, getterów, setterów, a nawet nazw klas. Klasa o nazwie _Helper byłaby prywatna w obrębie swojej biblioteki.

class Person {
  String _name;          // Prywatne
  int _age;              // Prywatne
  
  Person(this._name, this._age);
  
  String get name => _name;           // Publiczny getter
  void _validateAge(int age) { }      // Metoda prywatna
}

W obrębie tej samej klasy dostęp do prywatnych składowych uzyskujesz w zwykły sposób. Ograniczenie dotyczy tylko kodu spoza biblioteki. Ta konwencja sprawia, że podczas czytania kodu od razu widać, które składowe są przeznaczone wyłącznie do użytku wewnętrznego — wszystko, co zaczyna się od _, jest szczegółem implementacji.

challenge icon

Wyzwanie

Łatwy

Zbudujmy narzędzie do śledzenia wyniku w grze, które pokaże, jak prefiks z podkreśleniem ukrywa wewnętrzne szczegóły implementacji, jednocześnie udostępniając przejrzysty interfejs publiczny.

Podzielisz swój kod na dwa pliki:

  • score_tracker.dart: Utwórz klasę ScoreTracker, która zarządza wynikiem gracza z zastosowaniem odpowiedniej enkapsulacji. Klasa powinna mieć:
    • Publiczne pole String playerName — każdy może zobaczyć, kto gra
    • Prywatne pole int _score zainicjalizowane wartością 0 — surowy wynik powinien być chroniony
    • Prywatne pole int _bonusMultiplier zainicjalizowane wartością 1 — to wewnętrzna mechanika gry
    • Konstruktor, który przyjmuje imię gracza
    • Publiczny getter score, który zwraca prywatne pole _score
    • Prywatną metodę _applyBonus(int points), która zwraca points * _bonusMultiplier
    • Publiczną metodę addPoints(int points), która wewnętrznie używa _applyBonus, aby obliczyć faktyczną liczbę dodanych punktów, aktualizuje _score i wyświetla Added [calculated] points!
    • Publiczną metodę activateDoubleBonus(), która ustawia _bonusMultiplier na 2 i wyświetla Double bonus activated!
    • Publiczną metodę displayStats(), która wyświetla bieżący status gracza
  • main.dart: Zaimportuj narzędzie do śledzenia wyniku i zasymuluj sesję gry:
    • Utwórz obiekt ScoreTracker dla gracza 'Alex'
    • Wywołaj displayStats()
    • Dodaj 10 punktów
    • Dodaj 25 punktów
    • Aktywuj podwójny bonus
    • Dodaj 15 punktów (ta liczba powinna zostać podwojona)
    • Wywołaj displayStats()
    • Wyświetl Final score: [score] za pomocą publicznego gettera

Metoda displayStats() powinna wyświetlać tekst w następującym formacie:

=== Player Stats ===
Player: [playerName]
Current Score: [_score]

Zwróć uwagę, jak prywatna metoda _applyBonus i pole _bonusMultiplier wewnętrznie obsługują obliczanie bonusu. Zewnętrzny kod widzi tylko metody publiczne i nie wie nic o systemie mnożników — to szczegół implementacji ukryty za konwencją z podkreśleniem.

Oczekiwany wynik:

=== Player Stats ===
Player: Alex
Current Score: 0
Added 10 points!
Added 25 points!
Double bonus activated!
Added 30 points!
=== Player Stats ===
Player: Alex
Current Score: 65
Final score: 65

Spróbuj swoich sił

import 'score_tracker.dart';

void main() {
  // TODO: Utwórz ScoreTracker dla gracza 'Alex'
  
  // TODO: Wywołaj displayStats()
  
  // TODO: Dodaj 10 punktów
  
  // TODO: Dodaj 25 punktów
  
  // TODO: Aktywuj premię podwajającą punkty
  
  // TODO: Dodaj 15 punktów (powinny zostać podwojone)
  
  // TODO: Wywołaj displayStats()
  
  // TODO: Wypisz 'Final score: [score]', używając publicznego gettera
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Dart online