Как стать автором
Обновить

Комментарии 23

Боже что это?
Это лисп.
Концептуально красиво, но без стакана не разобрать.
Это не совсем Lisp. Смотрите внимательней на теги, это Clojure.
Я походу C-зависимый)) Стиль лиспа вызывает немного отвращения)) Сори за спам…
Вы просто не привыкли. Меня тоже он когда-то раздражал, но потом я его пощупал, пописал немного и он уже не кажется таким страшным ;)
в некоторых языках такая проблема даже не стоИт, т.к. вопрос «что выбрать, коды возврата или исключения» в таком языке является низкоуровневым


Судя по всему я таки забыл лисп :). Насколько я понимаю, основная разница в использовании кодов возврата и исключений состоит в том, что при использовании кодов возврата мы тем или иным способом проверяем большинство вызовов методов (например, с помощью мекроса ENSURE()), а при использовании исключений проверки расставлены только в местах реакции на ошибки, тоесть при правильном дизайне это несколько меньше кода.

В lisp, насколько я помню, special form throw действительно передает управление на парный catch, который может быть в другом месте кода. Но ведь для кодов возврата придется использовать process-retcode-answer для каждой функции — это как бы полный аналог ENSURE? Либо я чего-то не понял, либо всемогущие синтаксические макросы лиспа тут не дают никакой разницы.
Есть один вариант, когда стоит предпочесть исключения, а не коды ошибок.
Это случай возврата из нескольких вложенных функций. В этом случае протягивать коды ошибок намного более громоздко и шатко, нежели использование исключений.
> Т.к. для программиста, использующего тот же «foreach»,
> нет никакой разницы, использовали ли создатели языка while или for

Если на то пошло, в имплементации while и for нет никакой разницы :-)
Может стоит для жалких смертных не знакомых с макросами Clojure добавить их перевод на русский? Сдаётся мне примерно 95% прочитавших так же как и я не поняли код собственно обработки кодов и исключений.
Реализация самих операторов, где использовались макросы, приведена только для тех, кому интересно. Для понимания поста это не нужно.
Между исключениями и кодами возврата есть существенная разница: исключения позволяют выполнять нелокальные переходы управления.
И как такие нелокальные переходы отлаживать «в голове», без использования отладчика, при чтении кода?
Код с большим количеством нелокальных переходов управления труднее читать и поддерживать!
Это не так для структурных переходов («вперед и вверх»), к которым как раз и относятся исключения.
Он не пишет паттерны снова и снова. Он просто «создает» язык, в котором может наиболее естественно, наглядно и кратко сформулировать решение поставленной перед ним задачи. Профессия становится не ремеслом, а искусством.

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

По теме, зачем ставить такой выбор, исключения против кодов, ведь можно совместить. На пример в эрланге стандартная практика возвращать что типа {ok, Value} или {error, Reason}: тут тебе и коды возвратов (атомы как енумы), и полезная нагрузка. Паттерн матчинг таких возвратов в случае успеха выполнит нужную логику, в случае неудачи автоматом пробросит ошибку дальше(let it crash)
Не понял про готовые решения. Макросы для меня имеют такой же смысл, что и простые функции — повторное использование кода и уменьшение сложности.

Никакого противопоставления нет. Наоборот, важнен паттерн, а его реализация для пользователя не важна и даже не видна.
Статья написаная ценителем лиспа для ценителей лиспа ;(
Знаете, у меня примерно такие же чувства возникают когда кто-то без малейшего комментария выдаёт статью с полотном на, например, C#.

Так что не нойте, а гляньте введение в синтаксис. Не вставлять же в начало каждой статьи о ЯП с хоть одним примером учебник по основам используемого в них языка.
основы лиспа я ещё с института смутно припоминаю, могу нагуглить вспомнить, но зачем? )

по моему скромному мнению смешение в статье двух сущностей — перебор.
Где вы две сущности нашли? Тема статьи указана в заголовке и больше ничего в ней нет. Попробуйте поискать „lisp“, „лисп“, „clojure“ в тексте. Их нет. Какой-то же язык надо было выбрать для примеров и в любом случае нашлись бы те кто его не понимает.
Перечисляю:
1. паттерны
2. clojure

Меня заинтересовала статья, но огорчило необходимость «продираться» сквозь нестандартный синтаксис. Учитывая, что сейчас изучаю две новые для меня платформы — третья откровенно не лезет)

Вообще примеры на C++ или даже питоне предпочтительнее.
И правильно — многие дальше своего мирка не видят. А так, глядишь, есть повод заинтересоваться.
Ваш внутренний мир, наверно таки больше «мирка»? Простите, но в вашей фразе где-то скрыто ЧСВ.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации