Chyba faktycznie nie zgadzają się ze sposobem jesteś oprawy to:
Rzeczywiście, nie mam pojęcia, w jaki sposób pogodzić się z no-Side Effects implikowane przez regułę niezmiennych typów i czystych funkcji i przesłankę OO, w której metody modyfikują stan instancji w miejscu, co jest oczywiście efektem ubocznym.
Nie powiedziałbym, że operacje mutacyjne na polach obiektów są rdzeniem "założenia OO". Wcale nie (chociaż odwrotnie: I do uważam, że niezmienność jest podstawową przesłanką FP). Dla mnie OO jest sposobem myślenia o module programowym bardziej niż cokolwiek innego.
W moim (być może skręconym) sposobie myślenia, nawet Haskell - język, którego zwolennicy często boją się myślenia w stylu OO - niemniej jednak zawiera pewne koncepcje OO, w tym sensie, że ma system modułów, różne sposoby enkapsulacji implementacji szczegóły typów danych itp. Z drugiej strony, chociaż jest wyjątkowo niezgrabny i obciążający, mój kod Java ma tendencję do intensywnego korzystania z podstawowych koncepcji funkcjonalnych, takich jak curry.
Innymi słowy, uważam, że oba podejścia są w pewnym sensie komplementarne.
Teraz na poziomie mniej więcej teoretyczne i orzechy i-śruby ... Powiedzmy, że masz coś takiego:
class Foo(val a : A, val b : B, val c : C) {
def setB(newb : B) : Foo = new Foo(a, newb, c)
}
... więc można powiedzieć newFoo = foo.setB(b)
jak zasugerował w oryginalnym poście . Powiedziałbym, że jest to całkowicie elegancki styl i nie jest powodem do niepokoju (jeśli chodzi o wydajność, czytelność czy cokolwiek innego). Wiele z tego znajdziesz w niezmiennych klasach kolekcji w bibliotece Scala.
Interesujące i bardzo powiązane ze sobą brzmienie: [Czy FP i OO są ortogonalne?] (Http://stackoverflow.com/q/3949618/395760) – delnan
Czy to przesłanie OO? Dlaczego więc efektywna Java zaleca niezmienne obiekty? Myślę, że powinieneś zacząć uzgadniać swój pogląd na OO z tym, co rzeczywiście mówili eksperci ... –