vit_r (vit_r) wrote,
vit_r
vit_r

Про ёжика в тумане, зазнайство, языки программирования и вериги

Интересно наблюдать, как проповедники функционального подхода чуют расставленные ловушки и гордо в них не идут. Ещё интереснее, когда люди поддаются на троллинг.

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

(Почему это чистой воды провокация, написано ниже.)

После небольших препирательств _xacid_ оставил код. Это была тактическая ошибка. Потому что в ответе

...[всякая ажурная фигня]

val content = getURLContent("garbage") recover {
  case e: FileNotFoundException => Iterator("Requested page does not exist")
  case e: MalformedURLException => Iterator("Please make sure to enter a valid URL")
  case _ => Iterator("An unexpected error has occurred. We are so sorry!")
}



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

Что мы видим на картинке, если снять штукатурку и рассмотреть голую структуру?
switch error_type
  FileNotFoundException:
    "Requested page does not exist"
  MalformedURLException:
    "Please make sure to enter a valid URL"
  default:
    "An unexpected error has occurred. We are so sorry!"


То есть, пока пони какают незабудками, можно вывязывать ажурные конструкции. А как начинаются обосратушки, приходится или шагать дальше с гордо поднятой головой, не реагируя на запах и липкие штанишки (это в наше время называется «уровень качества, принятый в индустрии»), или всё-таки вызывать дядю Васю с совковой лопатой.

А иначе не получается.

[Spoiler (click to open)]
Грубо говоря, обработка ошибок - это выбор альтернативных путей преобразования данных или реакций на входящие сигналы. Если, конечно, мы рассматриваем что-то существеннее падения на спину и дрыганья лапками или сообщений пользователю, которые можно смело начинать с обращения «Ей ты, козёл!».

Для адекватного выбора этих путей надо знать не только ошибку, но и контекст, в котором она произошла. Причём, разнесение контекста и обработки по разным местам кроме создания шарад чревато ещё и фатальной рассинхронизацией.

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

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


Конечно, это не вся глубина открывающихся проблемы, а только лёгкий намёк. Математичность тянет за собой ещё много интересного.
Tags: fp, it, qa, quality, ru
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 40 comments