Как стать автором
Обновить
13
6
Сергей А. Копылов @sergeykopylov

Java разработчик

Отправить сообщение

Прагматичное функциональное программирование в Java

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров1.9K

Прагматичное функциональное программирование в Java при помощи монады XResult<T>, которая сочетает в себе свойства Optional<T>, Result<T> и Either<L,R>

Читать далее ...

Обработка исключений в Java с использованием сопоставления с образцом (pattern matching)

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров7.4K

Обработка исключений в Java с использованием сопоставления с образцом (pattern matching).


Данная статья является логическим продолжением статей



В данной статье рассмотрим способы обработки исключений Java при помощи pattern-matching, как это делается в других FP языках.


Пример на других языках


В функциональных языках программирования существуют удобные средства для работы с исключениями. В Kotlin и Rust это класс Result, в Scala и Haskell — Try. Обработка успешного результата или ошибки может производится при помощи pattern-matching как на примерах ниже.


Scala


val result = divideWithTry(10, 0) match {
  case Success(i) => i
  case Failure(DivideByZero()) => None
}

Rust


    let greeting_file_result = File::open("hello.txt");
    let greeting_file = match greeting_file_result {
        Ok(file) => file,
        Err(error) => panic!("Problem opening the file: {:?}", error),
    };

Использование pattern-matching является естественным (idiomatic) в функциональных языках. А как дело обстоит в Java?

Читать дальше →

Неблокирующий повтор (retry) в Java и проект Loom

Время на прочтение4 мин
Количество просмотров8.2K

Неблокирующий повтор (retry) в Java и проект Loom


Введение


Повтор (retry) операции является старейшим механизмом обеспечения надежности программного обеспечения. Мы используем повторы при выполнении HTTP запросов, запросов к базам данных, отсылке электронной почты и проч. и проч.

Читать дальше →

Ускоряем Groovy скрипты

Время на прочтение4 мин
Количество просмотров3.7K

AST (Abstract Syntax Tree) преобразование для исполнения Groovy скриптов с @CompileStatic


Введение


Предположим у Вас есть некоторый скрипт который работает с некоторым бизнес объектом, скажем Person.


Groovy script


    person.name = 'Peter'

У Groovy есть замечательная фича @CompileStatic, которая заставляет компилятор Groovy компилировать скриптовый код статически (как это делает компилятор Java), что значительно ускоряет исполнение скрипта, но к сожалению в нашем случае простого (plain) скрипта у нас просто нет места где мы можем применить эту аннотацию. Вы знаете что @CompileStatic применяется либо к методу или классу. Давай сначала попробуем решить эту проблему вручную.

Читать дальше →

Обработка исключений в Java в функциональном стиле. Часть 2

Время на прочтение4 мин
Количество просмотров8.5K

Обработка исключений в Java в функциональном стиле. Часть 2.


В предыдущей статье была рассмотрена функциональная обработка исключений с помощью интерфейса Try<T>. Статья вызвала определенный интерес читателей и была отмечена в "Сезоне Java".


В данной статье автор продолжит тему и рассмотрит простую и "грамотную" (literate) обработку исключений при помощи функций высшего порядка без использования каких либо внешних зависимостей и сторонних библиотек.

Читать дальше →

Обработка исключений в Java в функциональном стиле

Время на прочтение4 мин
Количество просмотров27K

В данной статье автор предоставит информацию о собственной библиотеке для обработки исключений (Exception) в функциональном стиле.

Предпосылки

В Java начиная с версии 8 появились новые возможности в виде функциональных интерфейсов и потоков (Stream API). Эти возможности позволяют писать код в новом функциональном стиле без явных циклов, временных переменных, условий ветвления и проч. Я уверен что этот стиль программирования станет со временем основным для большинства Java программистов.

Читать далее

Информация

В рейтинге
860-й
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность

Специализация

Backend Developer
Lead
От 250 000 ₽
Java
Git
OOP
Docker
Database