Zakładam, że mówisz tylko do odczytu właściwości, albo przynajmniej własności pobierające , ponieważ nieruchomość seter jest w prawie każdym przypadku, będzie mieć skutki uboczne. W przeciwnym razie nie jest to bardzo przydatne.
Ogólnie dobry projekt jest zgodny z zasadą najmniejszego zaskoczenia . Nie rób rzeczy, które dzwoniący nie oczekujemy, aby to zrobić, zwłaszcza jeśli te rzeczy mogą zmienić przyszłe wyniki.
Ogólnie oznacza to, że osoby pobierające nieruchomości nie powinny mieć skutków ubocznych.
Uważajmy jednak na to, co rozumiemy przez „efekt uboczny”.
Efektem ubocznym jest technicznie wszelkie zmiany stanu. To może być stan publicznie dostępny lub ... może być całkowicie prywatny.
Leniwe / odroczone programy ładujące są jednym z przykładów stanu, który jest prawie wyłącznie prywatny. Dopóki to nie jest odpowiedzialność osoby dzwoniącej, aby zwolnić ten zasób, to faktycznie zmniejszenie niespodziankę i złożoność w ogóle za pomocą odroczony inicjalizacji. Osoba dzwoniąca zwykle nie musi wyraźnie sygnalizować inicjalizacji struktury wewnętrznej . Leniwa inicjalizacja nie narusza powyższej zasady.
Innym przykładem jest zsynchronizowany nieruchomość. Aby metoda była bezpieczna dla wątków, często musi być chroniona przez sekcję krytyczną lub mutex. Wprowadzanie sekcji krytycznej lub uzyskiwania muteksu to działanie uboczne; jesteś modyfikowanie stanu, zwykle globalny stan. Jednak ten efekt uboczny jest niezbędny , aby zapobiec znacznie gorszemu zaskoczeniu - zaskoczeniu modyfikacją danych (lub, co gorsza, częściowo zmodyfikowaniem) innym wątkiem.
Chciałbym więc nieco poluzować to ograniczenie: Odczyty właściwości nie powinny mieć widocznych efektów ubocznych ani efektów ubocznych, które zmieniają ich semantykę .
Jeśli nie ma sposobu na rozmówcy, aby kiedykolwiek zostać dotknięte skutkami lub nawet świadomi działań ubocznych, to efekt uboczny nie robi żadnej szkody. Jeśli byłoby to niemożliwe, aby napisać test, aby zweryfikować istnienie konkretnego skutku ubocznego, to jest zlokalizowane na tyle, aby etykiety jako prywatny szczegółów realizacji, a tym samym bez uzasadnionej troski ze światem zewnętrznym.
Ale należy uważać; jako zasada, to powinien spróbować uniknąć skutków ubocznych, ponieważ często to, co można pomyśleć, aby być prywatnym detal realizacja może niespodziewanie przeciekać i stają się publiczne.