Pytania otagowane jako pure-function

Czysta funkcja to taka, która zawsze daje to samo, mając te same argumenty i nie może zmieniać się ani zależeć od żadnego stanu zewnętrznego.

6
Czy sama zapamiętana funkcja czysta jest uważana za czystą?
Powiedzmy, że fn(x)jest to czysta funkcja, która robi coś kosztownego, na przykład zwraca listę głównych czynników x. Powiedzmy, że tworzymy zapamiętaną wersję tej samej funkcji memoizedFn(x). Zawsze zwraca ten sam wynik dla danych wejściowych, ale zachowuje prywatny bufor poprzednich wyników w celu poprawy wydajności. Formalnie rzecz biorąc, jest memoizedFn(x)uważany za …


5
Czy łapanie / rzucanie wyjątków sprawia, że ​​metoda, która w innym przypadku jest czysta, jest nieczysta?
Poniższe przykłady kodu stanowią kontekst mojego pytania. Klasa pokoju jest inicjowana przez delegata. W pierwszej implementacji klasy Room nie ma strażników przed delegatami, którzy zgłaszają wyjątki. Takie wyjątki zostaną przeniesione do właściwości North, gdzie delegowany jest oceniany (uwaga: metoda Main () pokazuje, jak instancja Room jest używana w kodzie klienta): …

4
Czy istnieje dobry powód, aby funkcje czysto niepubliczne?
Odbyłem krótką debatę ze współpracownikiem. Mówiąc najprościej, czy istnieje dobry powód, aby ukrywać / enkapsulować funkcje, które są czyste? Przez „czysty” rozumiem definicję wikipedii : Zawsze zwraca te same wyniki z tego samego wejścia. (Ze względu na tę dyskusję Foo Create(){ return new Foo(); }uważa się ją za nieczystą, jeśli …

2
Kiedy używać [Pure] na konstruktorze?
Uczę się o kontraktach kodowych w .NET i staram się zrozumieć ideę czystych konstruktorów. Dokumentacja kontraktów kodowych stanowi: Wszystkie metody wywoływane w ramach umowy muszą być czyste; oznacza to, że nie mogą aktualizować żadnego istniejącego stanu. Metoda czysta może modyfikować obiekty utworzone po wejściu do metody czystej. A PureAttributedokumentacja stwierdza: …

5
Czy funkcja jest natychmiast zanieczyszczona, jeśli przyjmuje funkcję jako parametr?
Ponieważ czystość parametru wejściowego jest nieznana do czasu działania, czy funkcja jest natychmiast uważana za nieczystą, jeśli przyjmuje funkcję jako parametr wejściowy? Powiązane: jeśli funkcja stosuje funkcję czystą, która jest zdefiniowana poza funkcją, ale nie jest przekazywana jako parametr, czy nadal jest czysta, jeśli spełnia kryteria braku efektów ubocznych, a …

6
Czysty funkcjonalny kontra powiedz, nie pytaj?
„Idealna liczba argumentów dla funkcji wynosi zero” jest po prostu błędna. Idealna liczba argumentów to dokładnie liczba potrzebna do tego, aby twoja funkcja była wolna od efektów ubocznych. Mniej niż to, a niepotrzebnie powodujesz, że twoje funkcje są nieczyste, zmuszając cię do ucieczki od otchłani sukcesu i wspinania się po …

3
Pochodzenie „metoda powinna zwrócić wartość lub mieć skutki uboczne, ale nie jedno i drugie”
Przeczytałem kiedyś, że metoda powinna albo mieć wartość zwracaną (i być referencyjnie przezroczysta), albo mieć skutki uboczne, ale nie jedno i drugie. Nie mogę znaleźć żadnych odniesień do tej reguły, ale chcę dowiedzieć się więcej na jej temat. Jakie jest pochodzenie tej porady? Z jakiej osoby lub społeczności powstało? Dodatkowy …

5
Oblicz, jeśli funkcja jest czysta
Zgodnie z Wikipedią: W programowaniu komputerowym funkcję można opisać jako czystą, jeśli obie instrukcje dotyczące funkcji hold: Funkcja zawsze ocenia tę samą wartość wyniku, biorąc pod uwagę te same wartości argumentu. Wartość wyniku funkcji nie może zależeć od żadnych ukrytych informacji lub stanów, które mogą się zmieniać w trakcie wykonywania …

2
Jak programowanie funkcjonalne radzi sobie z sytuacją, w której ten sam obiekt jest przywoływany z wielu miejsc?
Czytam i słyszę, że ludzie (również na tej stronie) rutynowo chwalą paradygmat programowania funkcjonalnego, podkreślając, jak dobrze jest mieć wszystko niezmienne. W szczególności ludzie proponują to podejście nawet w tradycyjnie imperatywnych językach OO, takich jak C #, Java lub C ++, nie tylko w czysto funkcjonalnych językach, takich jak Haskell, …


4
Czy ta metoda jest czysta?
Mam następującą metodę rozszerzenia: public static IEnumerable<T> Apply<T>( [NotNull] this IEnumerable<T> source, [NotNull] Action<T> action) where T : class { source.CheckArgumentNull("source"); action.CheckArgumentNull("action"); return source.ApplyIterator(action); } private static IEnumerable<T> ApplyIterator<T>(this IEnumerable<T> source, Action<T> action) where T : class { foreach (var item in source) { action(item); yield return item; } } …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.