Function Composition - Programowanie Funkcyjne by overment

Поделиться
HTML-код
  • Опубликовано: 4 янв 2025

Комментарии • 34

  • @overment
    @overment  4 года назад +4

    Heja 👋 Masz do mnie jakieś pytanie? Śmiało, jestem tu 👇

    • @bejdok76
      @bejdok76 4 года назад

      Gdzieś w Twoich filmach zauważyłem w pierwszym argumencie pętli for taki ciekawy zapis: { length } = arr. Czy w którymś z Twoich filmów omawiasz tego rodzaju przypisanie?

    • @bejdok76
      @bejdok76 4 года назад

      Chyba znalazłem odpowiedź. Czy chodzi o destrukturyzację tablicy/obiektu ? kursjs.pl/kurs/obiekty/destructuring.php

  • @skeku
    @skeku Год назад

    Taki świetny materiał i za darmo =D

  • @overment
    @overment  4 года назад +3

    Jeżeli interesuje Was ciekawa lista książek, polecam goodbooks.io/
    Sporą część najczęściej polecanych mam już za sobą i potwierdzam - są to wybitne książki.

  • @kamilzielinski504
    @kamilzielinski504 4 года назад +1

    dobrą robotę robisz

  • @ExChampions
    @ExChampions 4 года назад +3

    Czy wykorzystanie zwykłej funkcji reduce nie byłoby czytelniejsze pod względem czytania kolejności wykonywania funkcji przez funkcję compose ? Tutaj "compose(getBusiness, getPages, countPages)" parametry czytamy w kolejności wykonywania, w twoim przypadku jest odwrotnie. Pozdrawiam

    • @overment
      @overment  4 года назад +1

      Wynika to dokładnie z tego w jaki sposób te funkcje są zagnieżdżane (pokazuję to w pierwszej części filmu). W ogóle kompozycja funkcji ma swoje źródło w matematyce gdzie zapisujemy ją jako g(f(x)) i tam właśnie te wartości rozwiązywane są od prawej, do lewej.
      Także może na pierwszy rzut oka nieintuicyjne, jest to jak najbardziej logiczne.

    •  4 года назад

      @@overment Logiczne i ma swoje uzasadnienia, ale świat dąży do upraszczania i większej czytelności, czego przykładem może być dość młody pomysł - pipeline operator developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Pipeline_operator

    • @overment
      @overment  4 года назад +2

      ​@ o dziękuję Radek! Przy czym pipe nie jest jakoś szczególnie młody i nawet o nim myślałem.
      Różni się w końcu tylko kolejnością wykonywania funkcji.
      Większy sens kompozycja w przypadku gdy mamy komponenty np. w React:
      compose(Container, List, map(ListItem))(items). W takim przypadku compose ma przewagę nad pipe.
      Także fakt: pipe jest bardziej logiczny w tym konkretnym przypadku i powinienem go użyć albo przynajmniej wspomnieć na filmie.
      Raz jeszcze dziękuję za komentarz! 💪

    • @devmentor
      @devmentor 4 года назад

      Mocno się przychylam do tego typu rozwiązania. Pamiętanie, że jest to wykonywane od tyłu może być mylące dla osoby, która zaczyna. Nie chodzi o merytorykę, logikę tylko samą użyteczność. Pisanie pierwszego kroku na początku jest bardziej intuicyjne - o jeden element mniej do zapamiętania. Jestem pewny, że dając taki kod osobie początkującej 50% osób popełni błąd z kolejnością. Mimo mojej uwagi, materiał świetny!

  • @losiu998
    @losiu998 4 года назад

    W języku Julia istnieje podobny mechanizm (w języku D i R chyba też?) ,a mianiowicie " |> ". Twój przykład wyglądałby tak: business = bookshelf |> getBusiness |> getPages |> countPages . Osobiście uważam taki zapis za czytelniejszy, bo używając twojej funkcji muszę na poczatku wiedzieć, co zrobię jako ostatnie - countPages, getPages ... Nie jest to chronologiczne. W haskellu nie wiem czy czasami się tego kropką nie osiąga. Niemniej jednak ciekawy filmik, gdyż w js odruchowo starałem się pisać klasy, a da się jednak inaczej. Dzięki!

  • @krzysztofkasprzyk5232
    @krzysztofkasprzyk5232 4 года назад

    Jeszcze mam jedno pytanie, co jeżeli te funkcje zwracałyby objetnice?

  • @Blazeyos
    @Blazeyos 4 года назад

    Hej, ja takie pytanie niezwiązane z tematem filmu, jak się nazywa ten cursor, który używasz, bo czasami pisząc w visualu, tracę go z oczu?a taki z animacją przydał by mi się. Pozdrawiam

    • @overment
      @overment  4 года назад

      W ustawieniach Visual Studio Code masz opcję "Cursor blinking". Tam możesz ustawić animację 🙂

    • @Blazeyos
      @Blazeyos 4 года назад

      @@overment dzięki wielkie :).

  • @darekgala4667
    @darekgala4667 4 года назад

    Propsy za Sapiens ;)
    Bardzo fajny przykład, osobiście jestem fanem `chainingu` i pewnie bym zrobił .filter().map().reduce() ale widzę, że metoda którą pokazałeś jeszcze bardziej porządkuje kod i w dodatku mamy jeszcze mniejsze re-używalne funkcje, plus przy konieczności wykonania kilku operacji na jakims obiekcie taki `chaining` robi sie już brzydki, dzięki za inspiracje ;)
    Czy planujesz kiedyś filmik/filmiki o nazewnictwie zmiennych/funkcji/komponentów itp? Uważam, że pisanie czytelnego kodu jest równie ważnie o ile nie ważniejsze niż sama znajomość języków programowania i sam poświęcam na to zazwyczaj dość dużo czasu choć ciągle mam wrażenie, że można to zrobić lepiej. Może masz jakieś porady na bazie doświadczenia :D

    • @overment
      @overment  4 года назад +2

      Jak spodobało Ci się Sapiens, polecam Ci jeszcze Seeking Wisdom. Nigdy nie czytałem aż tak konkretnej książki 🤯
      O chainingu również myślałem przygotowując przykład 😉 Jest rzeczywiście tak jak piszesz.
      A co do nazywania funkcji, spotkałem się z ciekawą sugestią: nazywając zmienne, nie kłam co do tego, co się w nich znajduje.
      Np. jeżeli masz licznik, nazwij go "counter" a nie np. "index".
      Oczywiście ten temat jest bardziej złożony i ta sugestia go nie wyczerpuje. Myślę że faktycznie taki zestaw porad dotyczących nazewnictwa byłby ciekawym pomysłem na odcinek "solo" 😀.
      Dopisuję do swojej listy! Dziękuję 🙂
      P.S.: polecisz jakąś książkę? Już widzę że czytasz dobre pozycje.
      Rzuć okiem tutaj: goodbooks.io/

    • @darekgala4667
      @darekgala4667 4 года назад

      Dokładnie, mi chyba najwięcej pomogło nazewnictwo zmiennych bool, zamiast np. nazywać `visibility` lepiej użyć `visible` albo `isVisible` i wtedy dużo łatwiej pisać warunki logiczne i patrzac na taka zmienną od razu widać co oznacza jej wartość `true` (może akurat ten przyklad nie jest najlepszy ale jest cała masa takich sytuacji).
      Z książek no to przeczytałem wszystkie Harrariego, Homo Deus bardzo mocne, możliwe że lepsze niz Sapiens ;) 21 Lekcji na XXI wiek też spoko ale dużo rzeczy się powtarza z tych dwóch poprzednich. Bardzo mocno polecam książki Richarda Feynmana: 'Pan raczy żartować, Panie Feynman' oraz 'A co Ciebie obchodzi co myślą inni?'. Z innych mocno inspirujących to Carl Sagan: 'Błekitna kropka' - co prawda oparta na odkryciach układu słonecznego i już lekko przestarzała ale jej ogólny przekaz jest świetny. Ostatnio skończyłem też 'Przepis na człowieka' od Dawida Myśliwca z kanału Uwaga! Naukowy Bełkot i jest naprawdę super.
      Jeśli lubisz sci-fi to bardzo spoko są Andego Weira: Marsjanin i Artemis, Lema dopiero zacząłem niedawno czytac i moge polecić klasyk Solaris, Dzienniki Gwiazdowe dopiero czekaja na półce :p
      I jako ciekawostka na koniec, planuje kupić 'Rozmyślania' autorstwa ... Marka Aureliusza, cesarza rzymskiego, podobno mocno inspirująca i ciągle bardzo akrualna mimo 2 tyś. lat na karku 😁

    • @overment
      @overment  4 года назад +1

      ​@@darekgala4667 rzeczywiście, isVisible jest znacznie lepsze niż visibility. Spróbuję spisać jakieś dobre praktyki i omówić je na przykładach.
      Homo Deus mam w swojej kolejce, nie mogę się doczekać! 🙂 W tej chwili czytam Black Box Thinking.
      Feynmana dopisuję do listy :) A fantasty / sci-fi raczej nie czytam.
      W ogóle polecam Ci zacząć czytać książki...po angielsku. Kilka książek przeczytałem po polsku a potem w oryginale i w tym przypadku tłumaczenia były bardzo słabe.
      A już totalnie epickie jest słuchanie audiobooka czytanego przez samego autora (np. Jocko Willink opowiadający historię z wojny w Extreme Ownership 🤯).
      Audiobooków słucham na Audible jak coś. Trochę drogo ale masz w ramach abonamentu masz kredyty które możesz wymienić na książki.

    • @darekgala4667
      @darekgala4667 4 года назад

      Dzięki za pomysł, to o czym piszesz to tak mam z serialami/filmami, zawsze wolę oryginalny głos.czy dubbing, muszę przetestować audiobooki po ang w takim razie 😁

    • @overment
      @overment  4 года назад +2

      No to koniecznie 😁 Dodatkowo biblioteka Audible jest bardzo duża (w końcu to Amazon).
      Poza tym słuchanie książek można łatwiej łączyć z innymi czynnościami, np treningiem. Optymalizacja czasu ftw. 😅

  • @acetylen00
    @acetylen00 4 года назад

    nie powinno być books? 9:06

    • @overment
      @overment  4 года назад +1

      Nie jestem pewien o co pytasz a nie widzę tego na filmie. Wyjaśnisz proszę?

    • @acetylen00
      @acetylen00 4 года назад

      @@overment linijka 15, zmienna przyjmuje listę, więc w parametrze można zapisać liczbę mnogą: books

  • @krzysztofkasprzyk5232
    @krzysztofkasprzyk5232 4 года назад

    Jak to robisz, że nie musisz dawać średników?

    • @kszarkiewicz
      @kszarkiewicz 4 года назад

      w języku javascript nie musisz używać zawsze średników na końcu linijki, pozdrawiam :D

    • @krzysztofkasprzyk5232
      @krzysztofkasprzyk5232 4 года назад +1

      @@kszarkiewicz Ciekawe, nie wiedziałem, muszę o tym poczytać, a i dzięki. Pozdrawiam.

    • @overment
      @overment  4 года назад

      ​@@krzysztofkasprzyk5232 Tak jak napisał Kacper, średniki są opcjonalne.
      To nawyk który wszedł mi mocno ze względu na to że sporo pracuję teraz w TypeScripcie.
      Aczkolwiek musisz wiedzieć że najpopularniejsze styleguide cały czas rekomendują wykorzystanie średników.
      Muszę przekonfigurować sobie eslinter do kolejnych filmów :)

    • @DOMAN89
      @DOMAN89 4 года назад

      @@overment Adam nie do końca się zgodzę z tą opcjonalnością, polecam: brendaneich.com/2012/04/the-infernal-semicolon/ TS też nie jest przeszkodą, bo ja też korzystam z TS zawodowo i oczywiście używam średników :) Pozdrawiam

  • @Nimplex
    @Nimplex 4 года назад +1

    Niby proste, ale może się przydać, gorąco polecam z rodzinką

    • @overment
      @overment  4 года назад +2

      Dokładnie! W ogóle niemal każdy element programowania funkcyjnego wydaje się być mega prosty sam w sobie.
      Świadome wykorzystywanie ich wszystkich ma naprawdę niesamowity wpływ na jakość kodu.
      No i warto znać te wszystkie pojęcia i techniki w kontekście pracy z Reactem...do którego też pewnie przejdziemy w kolejnych miesiącach :)