Názor k článku Programovací paradigma založené na tocích (dat) a knihovna goflow od Pavel Tišnovský - Zkusím to vysvětlit. Zaprvé na "immutability" se musíme...

  • Článek je starý, nové názory již nelze přidávat.
  • 22. 4. 2022 21:09

    Pavel Tišnovský
    Zlatý podporovatel

    Zkusím to vysvětlit. Zaprvé na "immutability" se musíme dívat jako na potenciálně velmi užitečnou vlastnost, nikoli jako na absenci "mutability".

    Je to skutečně užitečná vlastnost, která nám mj. zaručuje, že se nám stav objektu pod rukama nezmění. A nejenom to, dokonce je zaručeno, že stav objektu můžeme číst bez zámků atd. - čím dál tím důležitější vlastnost, řekl bych. Prostě - máme objekt a můžeme s ním bez problémů a bez ohledu na okolní svět provádět všechny povolené operace.

    A pokud je povolenou operací "získání podstavu", tak to opět můžeme udělat a interně se to může zajistit sdílením struktury, tedy obecně velmi rychle (jak jste zmínil někdy předtím: řetězce z toho velmi těží, protože spousta operací nad nimi se může obejít bez kopie/klonování).

    A toto pohledy nemohou splnit ze dvou důvodů:

    1) někdo může přidat/ubrat/zpře­házet prvky v té bázové kolekci
    2) mohou se změnit stavy objektů ve vlastní kolekci

    A současně to plně nesplňují ani immutable kolekce v Guavě:

    1) mohou se změnit stavy objektů ve vlastní kolekci

    To není jen takové "no a co, to je nějakej okrajovej příklad", protože to vlastně ničí všechny předpoklady, které o kolekcích máme. Například ten SortedSet - když změním objekt v kolekci, přeskládají se objekty v ní uložené? Pokud ano, není to immutable. Pokud ne, není to sorted set.

    Dtto pro HashSet/HashMap - když změním objekt tak, že bude mít stajný klíč jako objekt jiný, bude se z kolekce vyhazovat? Nebo dostanu kolekci se dvěma objekty s totožným klíčem?