( persicsb | 2018. 07. 18., sze – 13:51 )

A kérdésben teljesen mindegy, hogy managed, vagy nem managed, nem a memórikezelés módja dönti el azt, hogy egy függvény pure-e vagy nem :)

"Ha a függvény csak a bemeneti paramétereivel dolgozik, és azok immutable típusok, akkor az egy pure function"
Na, ez nem igaz.


public static void foo(final Foo param) {
  param.doStuff();
}

ahol Foo:


public class Foo() {
  private final MySingleton singleton;

  public Foo(MySingleton singleton) {
    this.singleton = singleton;
  }

  public void doStuff() {
    singleton.doSideEffect();
  }
}

Foo egy tökéletes immutable osztály. MySingleton attól singleton, hogy egy DI container egyet hoz belőle létre (és nem azért, mert GoF szerinti Singleton).
A foo metódus csak a bemenetként kapott osztállyal dolgozik. Mégis van side effect.

Amit akartál mondani, hogy a bemenetek value classok (minden value class immutable, de nem minden immutable value class).

Szóval még mindig nem triviális probléma ez :)