Джава. Функциональный подход. Расширение объектно-ориентированного кода Java с помощью правил

Товар

3 036  ₽
Джава. Функциональный подход. Расширение объектно-ориентированного кода Java с помощью правил

Доставка

  • Почта России

    от 990 ₽

  • Курьерская доставка EMS

    от 1290 ₽

Характеристики

Артикул
15348363366
Identyfikator produktu
15348363366
Состояние
Новый
Autor
Ben Weidig
Tytuł
Java. Podejście funkcyjne. Rozszerzanie obiektowego kodu Javy o zasady programowania funkcyjnego
Nośnik
książka papierowa
Okładka
miękka
Rok wydania
2024
Wydawnictwo
Helion
Liczba stron
352
Język publikacji
polski
Wysokość produktu
23 cm
Szerokość produktu
16 cm

Описание

Java. Podejście funkcyjne. Rozszerzanie obiektowego kodu Javy o zasady

Java. Podejście funkcyjne. Rozszerzanie obiektowego kodu Javy o zasady programowania funkcyjnego

Ben Weidig

Aby napisać dobry kod, programiści muszą wybrać optymalnye sposóoby rozwiązania danego problemu. Java jest znana ze skutecznego i przetestowanego podejścia obiektowego (OOP), jednak ten paradygmat ten nie zawsze okazuje się wystarczający. Zamiast wymuszaćnia zasad OOP w każdym wprzypadku, warto wdrożyć w swoim kodzie zasady programowania funkcyjnego (FP), aby zapewnić sobie najlepsze korzyści płynące ze stosowania tych obydwóch paradygmatów.

Dzięki tej książce zrozumiesz bazowe koncepcje programowania funkcyjnego i przekonasz się, że możesz włączać je do kodu bez rezygnacji z paradygmatu obiektowego. Dowiesz się również, kiedy w swojej codziennej pracy i dlaczego używać takich opcjifunkcjonalności, jak niemutowalność i funkcje czyste i dlaczego warto to robićw swojej codziennej pracy. Poznasz różnetakie aspekty FP:, jak kompozycjęa, ekspresyjność, modułowość, wydajność i efektywne manipulowanie danymi. Nauczysz się również wykorzystać zywania FP w celudla zapewnienia wyższego bezpieczeństwa i łatwiejszego utrzymywania kodu. Teo wszystkieo pozwoli Ci zdobyć cenne umiejętności, które ułatwią Ci pisanie bardziej zwięzłego, rozsądnego i przyszłościowego kodu.

W książce między innymi:

  • zasady programowania funkcyjnego
  • przegląd typów programowania funkcyjnego dostępnych w Javie
  • różne koncepcje FP i sposoby ich zastosowaniakorzystania z nich
  • rozszerzanie kodu Javy o aspekty funkcjonalności FP bez przechodzenia na pełną funkcyjność
  • jak doskonalić swój styl programowania niezależnie od języka lub paradygmatu

To obowiązkowa lektura dla każdego programisty, który chce poprawić swoje umiejętności i pozostać na bieżąco z trendami w programowaniu.

O autorze

Ben Weidig jest programistą samoukiem. Od niemal 20 lat tworzy strony internetowe i różne aplikacje w kilku językach programowania. Jest też autorem licznych artykułów o Javie, programowaniu funkcyjnym ioraz o najlepszych praktykach kodowania. Bierze również udział w projektach open source.

Spis treści:

Przedmowa

Część I. Podstawy programowania funkcyjnego

  • 1. Wprowadzenie do programowania funkcyjnego

    Co sprawia, że język jest funkcyjny?

    Koncepcje programowania funkcyjnego

    Funkcje czyste i transparentność referencyjna

    Niemutowalność

    Rekurencja

    Typy pierwszoklasowe i funkcje wyższego rzędu

    Kompozycja funkcyjna

    Rozwijanie funkcji

    Częściowe zastosowanie funkcji

    Ewaluacja leniwa

    Zalety programowania funkcyjnego

    Wady programowania funkcyjnego

    Podsumowanie

  • 2. Funkcyjna Java

    Czym są wyrażenia lambda Javy?

    Składnia wyrażeń lambda

    Interfejsy funkcyjne

    Wyrażenia lambda i zmienne zewnętrzne

    A co z klasami anonimowymi?

    Instrukcja invokedynamic

    Wyrażenia lambda w działaniu

    Tworzenie wyrażeń lambda

    Wywoływanie wyrażeń lambda

    Odwoływanie się do metod

    Koncepcje programowania funkcyjnego w Javie

    Funkcje czyste i transparentność referencyjna

    Niemutowalność

    Typy pierwszoklasowe

    Kompozycja funkcyjna

    Ewaluacja leniwa

    Podsumowanie

  • 3. Interfejsy funkcyjne pakietu JDK

    Cztery główne kategorie interfejsów funkcyjnych

    Funkcje

    Konsumenty

    Dostawcy

    Predykaty

    Dlaczego jest tak wiele wariantów interfejsu funkcyjnego?

    Argumentowość funkcji

    Typy proste

    Wypełnianie luki między interfejsami funkcyjnymi

    Kompozycja funkcyjna

    Rozszerzanie wsparcia funkcyjnego

    Dodawanie metod domyślnych

    Bezpośrednie implementowanie interfejsu funkcyjnego

    Tworzenie statycznych metod pomocniczych

    Podsumowanie

Część II. Podejście funkcyjne

  • 4. Niemutowalność

    Mutowalność i struktury danych w OOP

    Niemutowalność (nie tylko) w programowaniu funkcyjnym

    Stan niemutowalności Javy

    java.lang.String

    Niemutowalne kolekcje

    Typy proste i obiektowe typy opakowujące

    Niemutowalna matematyka

    Java Time API (JSR-310)

    Typy wyliczeniowe

    Słowo kluczowe final

    Rekordy

    Jak osiągnąć niemutowalność?

    Powszechne praktyki

    Podsumowanie

  • 5. Praca z rekordami

    Typy agregacji danych

    Krotki

    Prosty POJO

    Od POJO do niemutowalności

    Od POJO do rekordu

    Rekordy na ratunek

    Mechanizmy wewnętrzne

    Funkcjonalności rekordu

    Brakujące funkcjonalności

    Przypadki użycia i powszechne praktyki

    Walidacja rekordów i oczyszczanie danych

    Zwiększanie poziomu niemutowalności

    Tworzenie zmodyfikowanych kopii

    Rekordy jako lokalne krotki nominalne

    Lepsza obsługa opcjonalnych danych

    Serializowanie ewoluujących rekordów

    Dopasowywanie wzorców rekordów (od Javy 19)

    Jeszcze kilka słów na temat rekordów

    Podsumowanie

  • 6. Przetwarzanie danych za pomocą strumieni

    Przetwarzanie danych za pomocą iteracji

    Iteracja zewnętrzna

    Iteracja wewnętrzna

    Strumienie jako funkcyjne potoki danych

    Funkcjonalności strumieni

    Spliterator, kręgosłup strumieni

    Budowanie potoków strumieniowych

    Tworzenie strumienia

    Wykonywanie pracy

    Kończenie strumienia

    Koszt operacji

    Modyfikowanie zachowania strumienia

    Używać strumienia czy nie?

    Podsumowanie

  • 7. Praca ze strumieniami

    Strumieniowe typy proste

    Strumienie iteracyjne

    Strumienie nieskończone

    Liczby losowe

    Pamięć nie jest nieskończona

    Od tablic do strumieni i z powrotem

    Tablice typu obiektowego

    Tablicowe typy proste

    Niskopoziomowe tworzenie strumieni

    Praca z operacjami we-wy plików

    Odczytywanie zawartości katalogów

    Przechodzenie katalogów w głąb

    Przeszukiwanie systemu plików

    Odczytywanie plików linia po linii

    Zastrzeżenia dotyczące strumieni z operacjami we-wy plików

    Obsługa daty i czasu

    Kwerendowanie typów czasowych

    Strumienie z zakresem LocalDate

    Pomiar wydajności strumienia za pomocą narzędzia JMH

    Kolektory

    Kolektory downstreamowe

    Tworzenie własnego kolektora

    Jeszcze kilka słów na temat strumieni (sekwencyjnych)

    Podsumowanie

  • 8. Równoległe przetwarzanie danych za pomocą strumieni

    Współbieżność a równoległość

    Strumienie jako równoległe potoki funkcyjne

    Strumienie równoległe w akcji

    Kiedy używać, a kiedy unikać strumieni równoległych?

    Wybór odpowiedniego źródła danych

    Liczba elementów

    Operacje strumieniowe

    Koszty ogólne strumienia i dostępne zasoby

    Przykład - jeszcze raz Wojna i pokój

    Przykład - liczby losowe

    Lista kontrolna dla strumieni równoległych

    Podsumowanie

  • 9. Obsługa wartości null za pomocą typów Optional

    Problem z zerowymi referencjami

    Jak obsługiwać wartość null w Javie (przed wprowadzeniem Optional)?

    Najlepsze praktyki w zakresie obsługi wartości null

    Kontrole null z użyciem narzędzi

    Typy wyspecjalizowane, takie jak Optional

    Typy opcyjne na ratunek

    Czym jest Optional?

    Tworzenie potoków opcyjnych

    Opcje i strumienie

    Typy opcyjne jako elementy strumienia

    Operacje terminalne strumieni

    Opcyjne typy proste

    Zastrzeżenia

    Opcje są zwykłymi typami

    Metody uwzględniające tożsamość

    Narzut związany z wydajnością

    Szczególne kwestie dotyczące kolekcji

    Opcje i serializacja

    Jeszcze kilka słów na temat referencji null

    Podsumowanie

  • 10. Obsługa wyjątków funkcyjnych

    Obsługa wyjątków Javy w pigułce

    Blok try-catch

    Różne rodzaje wyjątków i błędów

    Wyjątki sprawdzane w wyrażeniach lambda

    Wyodrębnianie kodu do postaci bezpiecznych metod

    Anulowanie sprawdzania wyjątków

    Sneaky throws

    Funkcyjne podejście do wyjątków

    Nierzucanie wyjątków

    Błędy jako wartości

    Wzorzec Próba, Powodzenie, Niepowodzenie

    Jeszcze kilka słów na temat funkcyjnej obsługi wyjątków

    Podsumowanie

  • 11. Ewaluacja leniwa

    Porównanie leniwości i gorliwości

    Jak gorliwa jest Java?

    Ewaluacja minimalna

    Struktury sterowania

    Leniwe typy pakietu JDK

    Wyrażenia lambda i funkcje wyższego rzędu

    Podejście gorliwe

    Podejście bardziej leniwe

    Podejście funkcyjne

    Opóźnianie wykonywania za pomocą typu Thunk

    Tworzenie prostego typu Thunk

    Thunk bezpieczny dla wątków

    Jeszcze kilka słów na temat leniwości

    Podsumowanie

  • 12. Rekurencja

    Czym jest rekurencja?

    Porównanie rekurencji głowowej i ogonowej

    Rekurencja i stos wywołań

    Bardziej złożony przykład

    Iteracyjne przechodzenie drzewa

    Rekurencyjne przechodzenie drzewa

    Strumienie rekurencyjne

    Jeszcze kilka słów na temat rekurencji

    Podsumowanie

  • 13. Zadania asynchroniczne

    Porównanie zadań synchronicznych i asynchronicznych

    Typy Future Javy

    Projektowanie potoków asynchronicznych przy użyciu typu CompletableFuture

    Obiecywanie wartości

    Tworzenie instancji CompletableFuture

    Komponowanie i łączenie zadań

    Obsługa wyjątków

    Operacje terminalne

    Tworzenie metody pomocniczej CompletableFuture

    Ręczne tworzenie i rozwiązywanie

    Ręczne tworzenie

    Ręczne rozwiązywanie

    Przypadki użycia dla ręcznie utworzonych i ukończonych instancji

    Pule wątków i limity czasu

    Jeszcze kilka słów na temat zadań asynchronicznych

    Podsumowanie

  • 14. Funkcyjne wzorce projektowe

    Czym są wzorce projektowe?

    (Funkcyjne) wzorce projektowe

    Wzorzec Metoda Wytwórcza

    Wzorzec Dekorator

    Wzorzec Strategia

    Wzorzec Budowniczy

    Jeszcze kilka słów na temat funkcyjnych wzorców projektowych

    Podsumowanie

  • 15. Funkcyjne podejście do Javy

    Porównanie zasad OOP i FP

    Funkcyjny sposób myślenia

    Funkcje są typami pierwszoklasowymi

    Unikanie skutków ubocznych

    Funkcyjne przetwarzanie danych za pomocą mapowania, filtrowania i redukcji

    Implementacje opierają się na abstrakcjach

    Budowanie funkcyjnych pomostów

    Ułatwienie równoległości i współbieżności

    Uwaga na potencjalny narzut

    Architektura funkcyjna w świecie imperatywnym

    Od obiektów do wartości

    Separacja zagadnień

    Różne rozmiary FC/IS

    Testowanie FC/IS

    Jeszcze kilka słów na temat funkcyjnego podejścia do Javy

    Podsumowanie

Гарантии

  • Гарантии

    Мы работаем по договору оферты и предоставляем все необходимые документы.

  • Лёгкий возврат

    Если товар не подошёл или не соответсвует описанию, мы поможем вернуть его.

  • Безопасная оплата

    Банковской картой, электронными деньгами, наличными в офисе или на расчётный счёт.

Отзывы о товаре

Рейтинг товара 0 / 5

0 отзывов

Russian English Polish