8 komentářů k článku Lumines: Vytváříme hru v React.js 3:

  1. JS

    Overprogramming
    Immutable je na tohle overprogramming. V JS stejně nejsou vlákna, případné výhody immutable se nemají jak uplatnit.
    Naprosto stejná funkčnost, ale s 10 % pracnosti, je mít u objektu bool changed, funkčnost stromové struktury zůstává zachována, jen se místo referencí mění changed.

    1. defectus

      Re: Overprogramming
      Já bych řekl, že v každém takovém článku si autor tak trochu mastí kšandy a overengineeruje. Také jsem to dělal. Ale zase autor se snaží a to je hlavní.

      1. Tobiáš PotočekAutor příspěvku

        Re: Overprogramming
        Asi to trochu overengineerované je :) Ale tak pointa byla vyzkoušet si novou technologii na něčem ne zcela typickém. Co se týče toho Immutable.js, tak úplně bych to nezatracoval:

        1. Jednoduchý dirty indikátor by jistě fungoval, ale abych dosáhl podobné efektivity jako u immutable objektu, musel bych ten indikátor udržovat zvlášť u každého kousíčku informace. Viz SquareStore, který drží všechny čtverce na herním poli, přičemž jen některé z nich se mění. Immutable struktura mi umožňuje právě ty čtverce jednoduše identifikovat. Resp. identifikovat takovým způsobem, že se o to vůbec nemusím starat.
        2. Immutable.js API je dost rozsáhlé a ve spoustě případů se s ním pracuje lépe, než s nativními mutable objekty.
        1. JS

          Re: Overprogramming

          1. To samozřejmě není pravda :-) Pro stejnou funkčnost se jedná se o jeden bool na jeden objekt. Pro SquareStore byste měl jeden bool na jeden čtverec.
          2. S mutable se samozřejmě pracuje mnohem líp než s immutable, už proto že nepotřebujete žádnou rozsáhlou knihovnu.
            Myslím že jste stále nepochopil motivaci proč vůbec vznikly immutable objekty a proč v JS postrádají smysl.
          1. Tobiáš PotočekAutor příspěvku

            Re: Overprogramming
            Nevyjádřil jsem se zcela přesně, za což se omlouvám. Každým kousickem jsem myslel každý uzel v immutable stromu. Tedy indikátor by musel být udržován pro každý čtverec, ale dále pak na každé vyšší úrovni (sloupec, grid, store), přičemž při provedení změny by se indikátor musel vždy propagovat až do kořene. Tedy není to zase tak jednoduché a představa, že mě od toho celého odřízne immutable struktura, není zase tak špatná.

            A jinak immutable.js přináší do JavaScriptu velice silné funkcionální API. Na některé věci se to moc nehodí, na jiné naopak ano. O něco podobného se snažila underscore/lodash knihovna, ale není to zdaleka tak elegantní.

            Drobný příklad:

            isTopReached() { 
                    return this.cursor().map(squares => squares.get(1)).some(square => square !== null);
                }
            

            Hledám, zda na prvním řádku je nějaký čtverec (kurzor ukazuje na dvourozměrné pole čtverců). Klasickým přístupem bych potřeboval cyklus a podmínku, takto je to elegantní one liner. Samozřejmě toto nemusí být nezbytně nutné immutable, ale pokud by nebylo, musel bych si vždycky napřed vytvořit kopii dat před aplikováním dalších funkcí. Tradičně immutabilita a funkcionální programování jsou spolu dost pevně spojeny.

            Jinak článek samozřejmě neberte tak, že vám něco vnucuji. Účelem nebylo napsat co nejlépe Lumines, účelem bylo vzít pár nových technologií a vyzkoušet je na něčem atypickem. Pokud jste si na základě článku vytvořil nějaký názor na danou problematiku, beru to jako svůj úspěch nezávisle na tom, jaký ten názor je :)

  2. vojta tranta

    Pozor na key atribut
    Pozor! Key atribut musí být neměnná unikátní hodnota v rámci mapované kolekce, jinak může react zaměnit dva elementy za jiné atp.
    via. Robin Pokorný

    1. Tobiáš PotočekAutor příspěvku

      Re: Pozor na key atribut
      To máte samozřejmě pravdu, ale v tomto případě key atribut skutečně neměnná a unikátní hodnota je. Jako key je použit index v poli (které je součástí herního pole) a tedy jednoznačně určuje daný čtverec a jeho pozici.

  3. Ivan Nový

    Imuttable objekty? Koncept starý 2500 let
    Jen tak naokraj, zajímavý koncept, simulovat pohyb vytvářením kopií immutable objektů. Ke stejné představě světa dospěl Zénon z Eleje před 2500 lety, který dokazoval, že pohyb neexistuje a demonstroval to na letu šípu.

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=16762