juan_gandhi: (VP)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2014-03-10 10:56 am
Entry tags:

introduced a constant

(fixed)

type Outcome = Result[Any]

val OK:Outcome = Good("OK")


Turned out, have tons of it everywhere. Weird actually.

And no, I'm not saying it's good. I'm just seeing a pattern that worries me a little bit, but I don't know why.

E.g.
  def executeJS(js: String): Result[Unit] = runJS(js) map asScala filter
    ("OK"==, wrong => s"Wrong response from browser: <<$wrong>>")

[identity profile] justy-tylor.livejournal.com 2014-03-11 01:10 pm (UTC)(link)
А почему бы не исключения+контекст?

Была у меня сходная задача - импорт данных из экселевских таблиц. Каждое чтение оформлялось в виде таких требований:
p2type = row.known("Type", alltypes)
content = row.nonempty("Content")
...
Всё это сидело в замыканиях, а над замыканиями хитрый map. В случае невозможности выполнить требование автоматически создавалось человекочитаемое сообщение об ошибке, с координатами листа, (опционально) ряда и (опционально) столбца. И бросалось в виде исключения. Хитрый map исключения ловил, текст ошибки в окно репорта направлял, а также принимал решение в зависимости от координат ошибки - продолжить импорт со следующего ряда, со следующего листа, или вообще остановить процесс импорта.

Так обработка всех видов Bad ушла из юзерского кода в требования и контекст обхода.