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

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

Простите, пожалуйста, но про какой язык нельзя сказать, что он «действительно помогает своим разработчикам писать программы быстро, лаконично, просто и надежно»?

P. S. А где монады?
НЛО прилетело и опубликовало эту надпись здесь
Ну, всё же они (кроме Brainfuck) были созданы именно для помощи программистам — насколько это было возможно при имеющихся ресурсах.
НЛО прилетело и опубликовало эту надпись здесь
Монад пока нет, при желании можно добавить.
Простите, а можете объяснить, пожалуйста, в чем декларативность? Мне код кажется очень императивным? «Сделай а, потом б, потом в».

То, что используются процедуры, а не классы еще ведь не делает код декларативным
Тонкое замечание) спасибо за вопрос!)

Проект помогает скрыть слой циклов. Разработчику остается написать что нужно сделать с элементами коллекции. Всё остальное (по сути, только цикл) проект сделает сам.
Декларативный стиль предполагает «выполни задачу А, но я не знаю как», императивный — «сделай шаг А1, затем шаг А2». Грубо говоря императивный стиль описывает «алгоритм», а декларативный описывает «постановку задачи на формальном языке». If/else/for/while — все это признаки императивного стиля.
Согласен. Но давайте взглянем на этот проект свежим взглядом.

Возьмем достаточно примитивную задачу: сделать строку из коллекции используя заданный разделитель.

Как это сделать в императивном стиле? В императивном стиле мы должны пройти по всей коллекции и вручную соединять ее элементы с разделителем попутно формируя итоговую строку.

Как это будет выглядеть в декларативном стиле? Я себе это понимаю так, что мы говорим языку программирования «Эй, дружище, а сделай мне пожалуйста строку из вон той коллекции! И, да, кстати, вставь пожалуйста между элементами этой коллекции разделитель. Какой? Вот этот.».

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

Вначале создадим коллекцию из букв.
>s symbols = ##class(%ListOfDataTypes).%New()
>d symbols.Insert(“H”)
>d symbols.Insert(“e”)
>d symbols.Insert(“l”)
>d symbols.Insert(“l”)
>d symbols.Insert(“o”)


А теперь решим поставленную задачу.
>w $zjoin(numbers, “ ”)
H e l l o


Всего одна функция. Никакой императивности. Мы говорим что хотим и получаем это.
Разве воспользоваться библиотечной процедурой — уже декларативность? Си — декларативен?
А ваше создание коллекции из букв разве не императивность?
По-моему, вы написали обычную процедурную либу.

Сейчас почему-то модно называть стиль php 4-й версии декларативным и функциональным)
:) Создание коллекции это отдельная тема, которая в моем проекте не затрагивается. Проект работает с уже созданными коллекциями. Во всяком случае пока)

«Библиотечная процедура» — звучит очень здорово!) я понимаю к чему Вы ведете.

Я понимаю так, что «декларативность» — способ решения задачи. Если мы решаем какую-то задачу и при этом не заморачиваемся над тем, чтобы описать ее реализацию, то пожалуй это всегда здорово независимо от того как мы это будем называть) Ведь так?)

Особенно чудесно, когда язык сам дает инструменты описать решение задачи. По сути всё можно свести к вызову некоторых функций. Просто в каждом конкретном случае уровней абстракций больше или меньше.
Ниче се… какие «живые ископаемые юрского периода»:)) С того момента, как Intersystems поглатило Micronetics и запороло проект MSM WorkStation будущее MUMPS было предопределено. И все вот эти извращения, естественно не спасут.
Умерла, так умерла. Нечего к людям приставать с глупостями:)))

P.S. Лучше покажите пример с присваиванием в функцию, типа $p($s, "|", 4) = «test» вот это куда забавнее будет;) Внучкам потеха:))) Что собственно в основе всей вашей статьи лежит.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий