Menu
Coddy logo textTech

Metody i pola statyczne

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

Teraz, gdy rozumiesz różnicę między składowymi instancji a składowymi statycznymi, przyjrzyjmy się, jak skutecznie korzystać ze statycznych metod i pól. Składowe statyczne świetnie sprawdzają się w przypadku funkcjonalności, która należy do samej koncepcji klasy, a nie do poszczególnych obiektów.

Pola statyczne przechowują dane współdzielone przez wszystkie instancje. Często używa się ich jako liczników, wartości konfiguracyjnych lub danych z pamięci podręcznej:

class MathHelper {
  static const double pi = 3.14159;
  static int calculationCount = 0;
  
  static double circleArea(double radius) {
    calculationCount++;
    return pi * radius * radius;
  }
}

print(MathHelper.circleArea(5));  // 78.53975
print(MathHelper.circleArea(3));  // 28.27431
print(MathHelper.calculationCount);  // 2

Zauważ, że wywołujesz metody statyczne bezpośrednio na nazwie klasy, a nie na jej instancji. Klasa MathHelper działa jak narzędzie — nigdy nie musisz tworzyć obiektu MathHelper.

Ważna zasada: metody statyczne nie mogą bezpośrednio uzyskiwać dostępu do składowych instancji. Nie mają dostępu do this, ponieważ nie są powiązane z żadnym konkretnym obiektem:

class Counter {
  int value = 0;  // Pole instancji
  static int total = 0;  // Pole statyczne
  
  void increment() {
    value++;  // OK - metoda instancji uzyskuje dostęp do pola instancji
    total++;  // OK - metoda instancji może uzyskać dostęp do pola statycznego
  }
  
  static void reset() {
    total = 0;  // OK - metoda statyczna uzyskuje dostęp do pola statycznego
    // value = 0;  // Błąd! Nie można uzyskać dostępu do pola instancji
  }
}

Używaj elementów statycznych, gdy funkcjonalność nie zależy od stanu obiektu — funkcje narzędziowe, śledzenie fabryk lub współdzielone stałe to idealni kandydaci.

challenge icon

Wyzwanie

Łatwy

Zbudujmy klasę narzędziową do operacji na ciągach znaków, która pokaże, jak metody i pola statyczne współpracują ze sobą, zapewniając przydatne funkcje bez konieczności tworzenia obiektów.

Utworzysz dwa pliki, aby uporządkować swój kod:

  • string_utils.dart: Zdefiniuj klasę StringUtils, która będzie pełnić funkcję pomocniczej klasy narzędziowej. Twoja klasa powinna zawierać:
    • static const String defaultSeparator ustawione na '-'
    • static int operationCount z początkową wartością 0, aby śledzić liczbę wykonanych operacji
    • Metodę statyczną reverse(String text), która zwiększa wartość operationCount i zwraca odwrócony ciąg znaków
    • Metodę statyczną join(String first, String second), która zwiększa wartość operationCount i zwraca dwa ciągi znaków połączone za pomocą defaultSeparator
    • Metodę statyczną countVowels(String text), która zwiększa wartość operationCount i zwraca liczbę samogłosek (a, e, i, o, u — bez rozróżniania wielkości liter)
    • Metodę statyczną getStats(), która zwraca ciąg znaków zawierający łączną liczbę wykonanych operacji
  • main.dart: Zaimportuj swoją klasę narzędziową i użyj jej metod statycznych:
    • Wywołaj reverse() z argumentem 'hello' i wypisz wynik
    • Wywołaj join() z argumentami 'dart' i 'lang' i wypisz wynik
    • Wywołaj countVowels() z argumentem 'Programming' i wypisz Vowels: [count]
    • Wypisz statystyki za pomocą getStats()

Pamiętaj, aby wywoływać wszystkie metody bezpośrednio na nazwie klasy, ponieważ są statyczne — nie będziesz tworzyć żadnych obiektów StringUtils.

Metoda getStats() powinna zwracać wynik w tym formacie:

Operations performed: [operationCount]

Oczekiwany wynik:

olleh
dart-lang
Vowels: 3
Operations performed: 3

Spróbuj swoich sił

import 'string_utils.dart';

void main() {
  // TODO: Wywołaj reverse() z argumentem 'hello' i wypisz wynik
  
  // TODO: Wywołaj join() z argumentami 'dart' i 'lang', a następnie wypisz wynik
  
  // TODO: Wywołaj countVowels() z argumentem 'Programming' i wypisz "Vowels: [count]"
  
  // TODO: Wypisz statystyki za pomocą getStats()
}
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