copyWith i równość wartościowa
Aktualizowanie niezmiennych danych i porównywanie według wartości
copyWith i równość wartościowa to bezpłatna lekcja Dart Academy na CoddyKit. To lekcja 4 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 Dart Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Dart Academy zawiera 4 lekcji w sumie.
Aktualizowanie niezmiennych danych
Nie można zmienić obiektu immutable, więc aby go zaktualizować, należy utworzyć nowy obiekt. Wzorzec, który pozwala zrobić to w przejrzysty sposób, to copyWith.
Działanie copyWith
Metoda copyWith zwraca nowy obiekt, zachowując bieżące wartości pominiętych pól i zastępując tylko te, które Państwo przekażą.
final updated = user.copyWith(name: 'Ada');Pisanie copyWith
Każdy parametr może mieć wartość null i domyślnie przyjmuje wartość istniejącego pola. Dzięki temu wywołujący mogą nadpisać tylko te fields, które ich interesują.
User copyWith({String? name}) =>
User(name: name ?? this.name);Pułapka wartości null
Sztuczka ?? this.field oznacza, że za pomocą copyWith nie można ustawić pola na null. Większość modeli danych akceptuje to niewielkie ograniczenie.
Domyślne porównywanie
Domyślnie dwa obiekty są równe tylko wtedy, gdy są same instance. Dwie kopie z identycznymi danymi nadal są uznawane za różne.
User('Ada') == User('Ada'); // falseCel: równość wartości
Często chcą Państwo, aby obiekty były równe, gdy pasują do siebie pod względem data, a nie tożsamości. Nazywa się to równością wartości i trzeba ją włączyć samodzielnie.
Zastępowanie operatora ==
Zdefiniuj operator ==, aby porównywać istotne pola. Od tej pory dwa obiekty z takimi samymi danymi będą traktowane jako równe.
bool operator ==(o) =>
o is User && o.name == name;Zawsze zastępuj hashCode
Za każdym razem, gdy zastępują Państwo ==, należy również zastąpić hashCode. Równe obiekty muszą mieć ten sam skrót, inaczej Sets i Maps będą działać nieprawidłowo.
int get hashCode => name.hashCode;Pomocnik Object.hash
Połącz kilka pól w przejrzysty sposób za pomocą Object.hash. Tworzy on jeden dobry kod skrótu ze wszystkich przekazanych wartości.
int get hashCode => Object.hash(name, age);Równość wzmacnia kolekcje
Dzięki równości wartości Set może usuwać prawdziwe duplikaty, a Map może znajdować klucze na podstawie ich danych, a nie tożsamości.
Pozwól narzędziom wykonać pracę
Pakiety takie jak equatable lub freezed mogą wygenerować za Państwa ==, hashCode i copyWith, dzięki czemu niezmienne modele pozostają krótkie i poprawne. 🛠️
Szybkie sprawdzenie
Szybkie sprawdzenie dotyczące równości wartości.
Podsumowanie
Dowiedzieli się Państwo, jak aktualizować niezmienne dane za pomocą copyWith oraz porównywać dane przy użyciu == i hashCode, aby uzyskać prawdziwą równość wartości. 🌟
Często zadawane pytania
Czy lekcja „copyWith i równość wartościowa” jest bezpłatna?
Tak — pełny tekst „copyWith i równość wartościowa” 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 Dart Academy, przejdź na CoddyKit PRO. Kurs Dart Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „copyWith i równość wartościowa”?
Aktualizowanie niezmiennych danych i porównywanie według wartości Ćwiczysz Dart Academy 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ąć Dart Academy?
Nie wymagamy żadnego doświadczenia. Dart Academy 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 4 z 4.
Ile czasu zajmuje lekcja „copyWith i równość wartościowa”?
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 Dart Academy?
Tak. Każda lekcja Dart Academy 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.
Wszystkie lekcje w tym kursie
- Pola final i głęboka niezmienność
- Klasy sealed i wyczerpujący switch
- Modyfikatory base, interface i final
- copyWith i równość wartościowa