Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Immutability (niezmienność) oraz mutability (zmienność) – to właściwości obiektów (w programowaniu i innych dziedzinach), które określają, czy obiekty mogą się zmieniać po ich utworzeniu. Sprawdziłem, jak to poprawnie - mutabElność czy mutabIlność i wydaje się, że oba warianty są poprawne (ale to nie jest pewne ^_^).
Przykład niezmienności
Wyobraź sobie zdjęcie, które zrobiłeś i wydrukowałeś. Po tym, jak zdjęcie zostało wydrukowane, nie możesz zmienić jego zawartości. Jeśli nie podoba ci się, że na zdjęciu ktoś jest z zamkniętymi oczami, nie możesz zmienić tego zdjęcia – zamiast tego musisz zrobić nowe zdjęcie. W tym przykładzie zdjęcie jest niezmienne.
Przykład zmienności
Teraz wyobraź sobie glinianą figurkę, którą lepiasz. Jeśli zdecydujesz, że chcesz zmienić kształt nosa na figurce, możesz to łatwo zrobić, zmieniając kształt gliny. W tym przykładzie gliniana figurka jest zmienna.
Przykład z programowania (Ruby)
Łańcuchy (Strings) w wielu językach programowania są niezmienne. Oznacza to, że po utworzeniu łańcucha jego wartość nie może być zmieniona. Ale każdy język ma swoje niuanse i w zależności od wersji języka - koncepcja niezmienności/zmienności może się różnić.
Na przykład w Ruby - String może mutować (zmieniać się). Sprawdźmy (ruby 3.2.1):
str = "Hello" puts str.object_id => 1960 str.upcase! => "HELLO" puts str => HELLO puts str.object_id => 1960
To znaczy, za pomocą metody upcase! zmieniliśmy tekst zmiennej.
Jeśli chcemy, aby łańcuchy się nie zmieniały - musimy dodać magiczny komentarz (magic comment) na początku skryptu Ruby:
# frozen_string_literal: true
To znaczy, nasz plik (example.rb) będzie wyglądał tak:
# frozen_string_literal: true str = "Hello" puts str.object_id str.upcase! puts str puts str.object_id
A wynik jego uruchomienia będzie następujący:
ruby ~/Desktop/example.rb 60 /Users/user/Desktop/example.rb:5:in `upcase!': can't modify frozen String: "Hello" (FrozenError) from /Users/user/Desktop/example.rb:5:in `<main>'
Widzimy, że skrypt wydrukował - 60. To wynik kodu puts str.object_id. A następnie otrzymujemy błąd wykonania modyfikacji String - can't modify frozen String: "Hello" (FrozenError). To znaczy, że włączyliśmy zamrożenie wartości (string literal) i teraz otrzymujemy błąd przy próbie modyfikacji. Mówią, że Ruby 3.4 będzie miał zamrożone literały domyślnie. Więc trzeba będzie dodać opcję --disable-frozen-string-literal lub coś podobnego, aby uniknąć błędów po aktualizacji. Zobaczmy.
Niezmienność i zmienność – to fundamentalne koncepcje w programowaniu, które pomagają programistom zarządzać stanem obiektów i ich zmianami. Użycie obiektów niezmiennych może sprawić, że kod będzie bardziej przewidywalny i łatwiejszy do testowania, podczas gdy obiekty zmienne mogą być bardziej wygodne do modelowania dynamicznych systemów.
Ten post nie ma jeszcze żadnych dodatków od autora.