Частичные функции
В этой статье мы рассмотрим фундаментальную, и вместе с тем очень полезную фичу Scala: частичные функции.
Частичная функция (в отличие от полной) — это функция, которая определена не для всех возможных входных данных. Частичная функция g: A => B — это функция, для которой существуют некоторые значения a в области A такие, что g(a) не определена. Scala имеет хорошую поддержку частичных функций.
Цепочка ответственности
На Devoxx France 2023 Эдсон Янага (Edson Yanaga) выступил с докладом, в котором он пересмотрел паттерны проектирования GoF, используя новые возможности Java. Вот его реализация паттерна «Цепочка ответственности». По ходу доклада я подумал, что в Scala это еще проще.
Для иллюстрации возьмем пример ката FizzBuzz.
Вот реализация на языке Scala:
object FizzBuzz extends App { val multipleOfThree: PartialFunction[Int, String] = { case i if i % 3 == 0 => "Fizz" } val multipleOfFive: PartialFunction[Int, String] = { case i if i % 5 == 0 => "Buzz" } val multipleOfBoth: PartialFunction[Int, String] = { case i if i % 3 == 0 && i % 5 == 0 => "FizzBuzz" } val default: PartialFunction[Int, String] = { case i => i.toString } val fizzBuzz = List(multipleOfBoth, multipleOfThree, multipleOfFive, default) .reduce(_ orElse _) (1 to 100).foreach(i => println(fizzBuzz(i))) }
Цепочка ответственности реализуется с помощью метода orElse для цепочки вызовов.
Я также часто использую данную технику для имплементации своей эвристики в соревнованиях по программированию ботов на codingame. Это позволяет мне легко менять приоритеты действий, просто поменяв порядок в списке.
Ссылки
Как скрестить http4s и ZIO? Поговорим об этом 22 июня на открытом уроке, который пройдет в рамках курса «Scala-разработчик». На этой встрече мы:
— узнаем oб основных компонентах REST-сервиса;
— сформируем представление о http4s (http-библиотека) и ZIO (библиотека асинхронного функционального эффекта);
— попрактикуемся в создании полноценного простого http-сервиса (сервер, эндпоинты, логика).
Урок подойдет всем, кто уже знаком со Scala и хочет писать веб-сервисы, используя наиболее популярные решения из экосистемы функционального программирования. Записаться на урок можно по ссылке.
ссылка на оригинал статьи https://habr.com/ru/companies/otus/articles/741704/
Добавить комментарий