Здравствуйте, Shmj, Вы писали:
S>Все гениальное — просто.
То что ты привел, это не гениальное.
Разница между декларативностью и императивностью вовсе не в синтаксисе. Декларативность это когда ты описываешь намерения, императивность — когда даешь указания что делать. В твоем примитивном примере первый вариант тоже декларативен, хоть и записан императивными конструкциями. Поэтому его легко преобразовать в декларативную форму. Проблемы у тебя начнутся как только ты реально императивный код напишешь. Например:
Button blueButton = new Button();
blueButton.Color = _options.Colors.Button;
Вот, уже появляются специальные конструкции, а не просто подмена синтаксиса. А если дальше пойти — анимация, data binding и т.п. — такие конструкции становятся все изощренние и изощренние, и получаем XAML.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Когда императивность переходит в декларативность...
Здравствуйте, Shmj, Вы писали:
S>>>Все гениальное — просто. G>>Ага, и придумано давно.
S>Тогда зачем придумали XAML, если можно было на этом построить GUI?
А тем, что количество строк меньше при использовании конвертеров, стилей, шаблонов, триггеров https://metanit.com/sharp/wpf/2.3.php
НС>Вот, уже появляются специальные конструкции, а не просто подмена синтаксиса.
Здесь нет специальной конструкции ради where — все ровно то же, что и для обычных тегов
1 идет тег
2 необязательные круглые скобки с параметрами,
3 или фигурные скобки, с именоваными свойствами,
4 или квадратные, как alias для Children
На такой основе можно нагородить всё что хошь.
Re[5]: Когда императивность переходит в декларативность...
S>Т.е. делаем new не обязательным, создание объекта без него. И даем возможность задать в конструкторе свойства. И все!
Что делать, если по нажатию кнопки в Children надо добавить ещё одну кнопку?
И каждый день — без права на ошибку...
Re[2]: Когда императивность переходит в декларативность...
Здравствуйте, Ночной Смотрящий, Вы писали:
P>>Здесь нет специальной конструкции ради where — все ровно то же, что и для обычных тегов
НС>Что такое when?
Обычный тег, с таким же синтаксисом, как и все остальные теги. Его задача обеспечивать условный рендеринг контента.
P>>На такой основе можно нагородить всё что хошь.
НС>Содержимое when в студию.
В отличие от других тегов, у него нет собственного представления, он чилдов передаёт паренту 1 в 1. Можета сами понаобъявлять таких сколько угодно.
Здравствуйте, B0FEE664, Вы писали:
S>>Т.е. делаем new не обязательным, создание объекта без него. И даем возможность задать в конструкторе свойства. И все! BFE>Что делать, если по нажатию кнопки в Children надо добавить ещё одну кнопку?
Без проблем, это есть так называемая Elm-архитектура с MVU-паттерном. В языках где все есть выражение представление лишь функция составленная из выражений, в том числе условных.
Здравствуйте, Shmj, Вы писали:
S>Это уже императивное поведение, не имеет смысла писать декларативно — будет только хуже. Вы нагородите кучу абстракций — а проще не будет.
S>Приведенный мной образец — это же просто код, просто иначе записан. Там можно и функцию добавить.
А в итоге одни разработчики выдумывают свой DSL для декларативного описания, прикручивают кодогенерацию из него в основной язык, создают всякие инструменты для отладки всего этого добра.
Другие разработчики потом начинают этим пользоваться, сначала учат как замечательно это всё декларативно делается,
а потом выясняют как убого это всё прописывается императивно и гуглят: "как создать кнопку программно?".
Может лучше иметь один нормальный механизм на одном языке?
Re[2]: Когда императивность переходит в декларативность...
Здравствуйте, Pauel, Вы писали:
НС>>Что такое when? P>Обычный тег, с таким же синтаксисом, как и все остальные теги. Его задача обеспечивать условный рендеринг контента.
Какой такой тег? У шимжи речь шла про императивный язык.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Когда императивность переходит в декларативность...
Здравствуйте, Shmj, Вы писали:
НС>>Перепишешь в своем гениальном стиле? S>В простейших случаях можно использовать свойство Visible.
Покажи.
S>Но когда требуется императивное поведение — то этот гениальный подход позволяет простым образом его использовать. Это же просто код.
Это же просто императивный код. Синтаксис просто делает его чуть удобнее. Декларативным он от этого не становится, даже если примитивные кейсы внешне похожи.
S>Попытка представить в декларативном виде императивное поведение — сделает только хуже и все усложнит.
Ну как сказать. Слышал про такую штуку как continuation monad? Вот это оно и есть, и в некоторых кейсах вполне себе работает. В частности, современная программа на C# может на 90% состоять из continuation monad.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Когда императивность переходит в декларативность...
Как обычно невпопад. Я привел пример того, для чего нужен XAML (тут даже не про синтаксис речь, а про его модель), а ты решил опровергнуть это примерами на xaml.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Когда императивность переходит в декларативность...
Здравствуйте, Shmj, Вы писали:
S>Это уже императивное поведение, не имеет смысла писать декларативно — будет только хуже.
Как ты категоричен.
А если тебе твою форму надо оттранслировать в HTML? Или, как в свое время в винфонах было, интерпретировать модель без ее предварительной компиляции?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: Когда императивность переходит в декларативность...
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>>>Что такое when? P>>Обычный тег, с таким же синтаксисом, как и все остальные теги. Его задача обеспечивать условный рендеринг контента.
НС>Какой такой тег? У шимжи речь шла про императивный язык.
Я и написал, что можно иначе. Для этого С# умеет почти всё, что нужно для такого, но всё равно синтаксического шума выйходит многовато, придется везде понадобавлять всякие new итд, что убивает на месте
Re[9]: Когда императивность переходит в декларативность...
Здравствуйте, Pauel, Вы писали:
НС>>Какой такой тег? У шимжи речь шла про императивный язык. P>Я и написал, что можно иначе.
Где ты такое написал? Слова "иначе" в твоих ответах до этого момента не было.
Суть топика очень проста. Шымжа придумал очередную кулибинщину, имитацию декларативности при том что "без переделки ядра и без создания нового языка — мы можем писать все декларативно. Не нужен XAML или еще что". И мои примеры были предназначены для демонстрации нежизнеспособности его "гениальной" идеи.
Так при чем тут тогда твои теги?
P>Для этого С# умеет почти всё
Но C# далеко не чисто императивный язык.
P>придется везде понадобавлять всякие new итд
using static и набор обычных статических методов позволит обойтись без new.