Как стать автором
Поиск
Написать публикацию
Обновить

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

Публикации