metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-01-17 04:59 pm
Entry tags:

Немножко динамической типизации и кложури

Макрос with-db-comment выполняет указанную функцию с параметрами в контексте коннект+транзакция, с логом комментария к транзакции в БД.
dump-seq-debug скармливает последовательность в log4j для отладки.

вот такое падает с NPE:
(with-db-comment "(get-subaccounts 20)"
(dump-seq-debug (get-subaccounts "20")))

вот такое работает:
(with-db-comment "(get-subaccounts 20)"
dump-seq-debug (get-subaccounts "20"))

Можно ли увидеть разницу с первого раза и понять, откуда там NPE? :)

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

[identity profile] http://users.livejournal.com/_slw/ 2013-01-17 02:02 pm (UTC)(link)
драмматической типизации

[identity profile] swizard.livejournal.com 2013-01-17 02:35 pm (UTC)(link)
Ну на самом деле, если использовать slime и нормально форматировать код, то таких проблем не возникает. А синтаксис малознакомых макросах лично я всё время макроэкспандом просматриваю перед отправкой на компиляцию.

[identity profile] artureg.livejournal.com 2013-01-17 02:35 pm (UTC)(link)
всё очевидно же

(Anonymous) 2013-01-17 02:43 pm (UTC)(link)
Так такой строки в лиспе:
[code]
dump-seq-debug (get-subaccounts "20"))
[/code]
при форматировании получиться никак не может.
то, что она некорректна, видно при первом же беглом взгляде на код.
в реальном коде может быть только такое:
[code]
(with-db-comment "(get-subaccounts 20)"
(dump-seq-debug (get-subaccounts "20")))

(with-db-comment "(get-subaccounts 20)"
dump-seq-debug
(get-subaccounts "20"))
[/code]
и тут разница сразу понятна.

с правильным форматированием пропустить скобки сбалансированным образом просто нельзя, а несбалансированные еще ридер подсветит.

[identity profile] thedeemon.livejournal.com 2013-01-17 02:52 pm (UTC)(link)
Вот поэтому мне и непонятно, как вообще люди в эту кложу ввязываются. Мало, что недотипизация, так и еще и недосинтаксис, порождающий такие вот ошибки.

[identity profile] jakobz.livejournal.com 2013-01-17 03:08 pm (UTC)(link)
А вот нельзя в парсер этих ваших скобочек прикрутить хоть проверку на количество параметров? Можно же наверняка в 90% случаев выпалить сколько у тебя функция жрет, и сколько ей скармливают. Или это уже попахивает строгой типизацией и не богоугодно?
Edited 2013-01-17 15:09 (UTC)

[identity profile] andrew kondratovich (from livejournal.com) 2013-01-17 03:15 pm (UTC)(link)
потому что нужно или в стркоу все параметры писать или по однмоу переносить =)

[identity profile] theiced.livejournal.com 2013-01-17 04:30 pm (UTC)(link)
видно с первого взгляда же

[identity profile] blackyblack.livejournal.com 2013-01-17 06:17 pm (UTC)(link)
Да, я тоже понял, что в лиспах форматирование кода - неотъемлемая часть языка. Правда недокументированная.

[identity profile] vit-r.livejournal.com 2013-01-17 06:37 pm (UTC)(link)
Нужно всегда выносить непарную скобку на новую строчку.
(  abc
   (def)
   g
   )

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