Pull to refresh

Comments 4

Кажется, скаловский sumScala и джавовский sumResultsFromDifferentMonads делают разное: первый приводит к Option, а второй - к Try.
Если приводить к Option, то, вроде можно ещё проще:

    def sumScala(i1: Option[Int], i2: Try[Int]) : Option[Int] = {
      (i1, i2) match {
        case (Some(x1), Success(x2)) => Some(x1 + x2)
        case _ => None
        }
    }

Не очень удачные примеры, лучше было бы рассмотреть какой-нить реальный кейс и ооп/функциональные варианты решений. У вас же получился пример конвертирования ооп в функциональные рамки, причем без особой на это надобности, при этом вы замаскировали исключение, а не обработали его. Конечно, иногда это может быть требованием задачи, но чаще является ошибкой и примером того, как не нужно писать код.

Опять же, исключения выбрасываются не для маскировки, а для обработки. И обрабатывать их нужно на том уровне, где это имеет смысл. Если вы не знаете, что делать с исключением, то вы просто отдаете его дальше, там разберутся. Но что делать в ваших функциональных примерах? Мы ожидали значение, а получили empty. Что произошло? Как на это реагировать? Зачем писать код таким образом? Какую конструкцию для корректной обработки придумать? Есть ли хороший паттерн для таких случаев?

Конечно, ваш подход вполне применим, но вы не смогли убедительно показать где и как его можно и нужно правильно использовать. Попробуйте взять реальную задачу(проблему), которую вы решали и показать как удобно её можно решить вашим способом, думаю так статья станет лучше.

Как на побаловаться, то пойдет.

Странно видеть код port == -1 ? Optional.empty() : Optional.of(port) от фаната ФП... Уж извольте делать код нечитабельным до конца Optional.of(port).filter(p -> p != -1)

>> i1.flatMap(x1 -> i2.map(x2 -> sum(x1, x2)));

>> Этот идиоматичный прием FP следует изучить, запомнить и применять в каждом удобном случае.

Я сам не против иногда написать что-то такое же нечитабельное в ФП стиле, но публично рекомендовать это как-то перебор ))

... Уж извольте делать код нечитабельным до конца Optional.of(port).filter(p -> p != -1)

Спасибо, правильно ;)

Sign up to leave a comment.

Articles