← strona głównaProgramowanie (Програмування)

Czym jest niemutowalność i mutowalność?

Czym jest niemutowalność i mutowalność? Opis terminu w kontekście programowania i nie tylko.

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.

🔥 Więcej postów

Wszystkie wpisy
Jak zrobić pusty commit w gicie?
Programowanie (Програмування)28 cze '24 08:33

Jak zrobić pusty commit w gicie?

Jak zrobić pusty git commit? Robimy pusty git commit. Po co? Kto wie, każdy ma swoje cele. W moim...