Re: Когда императивность переходит в декларативность...
От: Ночной Смотрящий Россия  
Дата: 09.08.23 11:25
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Все гениальное — просто.


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

Button blueButton = new Button();
blueButton.Color = _options.Colors.Button;

...

Button blueButton = new Button();
blueButton.Color = _options.HasBlue ? Colors.Blue : Colors.Gray;

...

if (_options.HasBlueButton)
{
Button blueButton = new Button();
blueButton.Color = _options.Colors.Button;
mainForm.Children.Add(blueButton);
}


Перепишешь в своем гениальном стиле?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Когда императивность переходит в декларативность...
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.08.23 11:45
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Перепишешь в своем гениальном стиле?


Form [
    when(options.hasBlueButton) [
        Button(
           Color: Colors.Blue
        )
    ]
]
Re[3]: Когда императивность переходит в декларативность...
От: Ночной Смотрящий Россия  
Дата: 09.08.23 11:49
Оценка: +1
Здравствуйте, Pauel, Вы писали:

P>
P>Form [
P>    when(options.hasBlueButton) [
P>        Button(
P>           Color: Colors.Blue
P>        )
P>    ]
P>]
P>


Вот, уже появляются специальные конструкции, а не просто подмена синтаксиса. А если дальше пойти — анимация, data binding и т.п. — такие конструкции становятся все изощренние и изощренние, и получаем XAML.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Когда императивность переходит в декларативность...
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.08.23 12:07
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>>Все гениальное — просто.

G>>Ага, и придумано давно.

S>Тогда зачем придумали XAML, если можно было на этом построить GUI?

А тем, что количество строк меньше при использовании конвертеров, стилей, шаблонов, триггеров
https://metanit.com/sharp/wpf/2.3.php

DataTriggers
https://stackoverflow.com/questions/9049197/conditional-datatemplate

В свое время для Xamarin не было визуального редактора. Все в коде. Не понравилось.
Но вот Flutter как раз на дарте и использует программный подход
и солнце б утром не вставало, когда бы не было меня
Re[4]: Когда императивность переходит в декларативность...
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.08.23 13:07
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

P>>
P>>Form [
P>>    when(options.hasBlueButton) [
P>>        Button(
P>>           Color: Colors.Blue
P>>        )
P>>    ]
P>>]
P>>


НС>Вот, уже появляются специальные конструкции, а не просто подмена синтаксиса.


Здесь нет специальной конструкции ради where — все ровно то же, что и для обычных тегов
1 идет тег
2 необязательные круглые скобки с параметрами,
3 или фигурные скобки, с именоваными свойствами,
4 или квадратные, как alias для Children

На такой основе можно нагородить всё что хошь.
Re[5]: Когда императивность переходит в декларативность...
От: Ночной Смотрящий Россия  
Дата: 09.08.23 13:30
Оценка: +1
Здравствуйте, Pauel, Вы писали:

P>Здесь нет специальной конструкции ради where — все ровно то же, что и для обычных тегов


Что такое when?

P>На такой основе можно нагородить всё что хошь.


Содержимое when в студию.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Когда императивность переходит в декларативность...
От: B0FEE664  
Дата: 09.08.23 13:30
Оценка:
Здравствуйте, Shmj, Вы писали:

  Скрытый текст
S>Вот императивный способ создания GUI и это плохо:

S>
S>Form mainForm = new Form();

S>Button blueButton = new Button();
S>blueButton.Color = Colors.Blue;

S>mainForm.Children.Add(blueButton);
S>


S>А если всего чуток изменить, то можно без особой переделки сделать чтобы все было декларативно. А именно:

S>
S>Form(
S>   Children: [
S>      Button(
S>         Color: Colors.Blue
S>      )
S>   ]
S>)
S>


S>Т.е. делаем new не обязательным, создание объекта без него. И даем возможность задать в конструкторе свойства. И все!

Что делать, если по нажатию кнопки в Children надо добавить ещё одну кнопку?
И каждый день — без права на ошибку...
Re[2]: Когда императивность переходит в декларативность...
От: Shmj Ниоткуда  
Дата: 09.08.23 14:45
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Перепишешь в своем гениальном стиле?


В простейших случаях можно использовать свойство Visible.

Но когда требуется императивное поведение — то этот гениальный подход позволяет простым образом его использовать. Это же просто код.

Попытка представить в декларативном виде императивное поведение — сделает только хуже и все усложнит.
Re[2]: Когда императивность переходит в декларативность...
От: Shmj Ниоткуда  
Дата: 09.08.23 14:47
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Что делать, если по нажатию кнопки в Children надо добавить ещё одну кнопку?


Это уже императивное поведение, не имеет смысла писать декларативно — будет только хуже. Вы нагородите кучу абстракций — а проще не будет.

Приведенный мной образец — это же просто код, просто иначе записан. Там можно и функцию добавить.
Re[6]: Когда императивность переходит в декларативность...
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.08.23 15:00
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

P>>Здесь нет специальной конструкции ради where — все ровно то же, что и для обычных тегов


НС>Что такое when?


Обычный тег, с таким же синтаксисом, как и все остальные теги. Его задача обеспечивать условный рендеринг контента.

P>>На такой основе можно нагородить всё что хошь.


НС>Содержимое when в студию.


В отличие от других тегов, у него нет собственного представления, он чилдов передаёт паренту 1 в 1. Можета сами понаобъявлять таких сколько угодно.
Отредактировано 09.08.2023 15:03 Pauel . Предыдущая версия .
Re[3]: Когда императивность переходит в декларативность...
От: SkyDance Земля  
Дата: 09.08.23 19:19
Оценка:
S>Тогда зачем придумали XAML, если можно было на этом построить GUI?

Не надо искать злой умысел там, где достаточно некомпетентности.
Re[2]: Когда императивность переходит в декларативность...
От: Разраб  
Дата: 10.08.23 03:00
Оценка:
Здравствуйте, B0FEE664, Вы писали:

S>>Т.е. делаем new не обязательным, создание объекта без него. И даем возможность задать в конструкторе свойства. И все!

BFE>Что делать, если по нажатию кнопки в Children надо добавить ещё одну кнопку?

Без проблем, это есть так называемая Elm-архитектура с MVU-паттерном. В языках где все есть выражение представление лишь функция составленная из выражений, в том числе условных.

https://elm-lang.org/try
https://safe-stack.github.io/docs/component-elmish/
https://github.com/fabulous-dev/Fabulous (декларативный прямо по описанию )
https://fsbolero.io/docs/Elmish
Вообщем, подход довольно популярный
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Когда императивность переходит в декларативность...
От: karbofos42 Россия  
Дата: 10.08.23 05:59
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Это уже императивное поведение, не имеет смысла писать декларативно — будет только хуже. Вы нагородите кучу абстракций — а проще не будет.


S>Приведенный мной образец — это же просто код, просто иначе записан. Там можно и функцию добавить.


А в итоге одни разработчики выдумывают свой DSL для декларативного описания, прикручивают кодогенерацию из него в основной язык, создают всякие инструменты для отладки всего этого добра.
Другие разработчики потом начинают этим пользоваться, сначала учат как замечательно это всё декларативно делается,
а потом выясняют как убого это всё прописывается императивно и гуглят: "как создать кнопку программно?".
Может лучше иметь один нормальный механизм на одном языке?
Re[2]: Когда императивность переходит в декларативность...
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 10.08.23 07:37
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:


https://learn.microsoft.com/en-us/dotnet/api/system.windows.controls.itemscontrol.itemtemplateselector?view=windowsdesktop-7.0&amp;redirectedfrom=MSDN#System_Windows_Controls_ItemsControl_ItemTemplateSelector

https://stackoverflow.com/questions/9049197/conditional-datatemplate
и солнце б утром не вставало, когда бы не было меня
Re[7]: Когда императивность переходит в декларативность...
От: Ночной Смотрящий Россия  
Дата: 10.08.23 10:16
Оценка:
Здравствуйте, Pauel, Вы писали:

НС>>Что такое when?

P>Обычный тег, с таким же синтаксисом, как и все остальные теги. Его задача обеспечивать условный рендеринг контента.

Какой такой тег? У шимжи речь шла про императивный язык.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Когда императивность переходит в декларативность...
От: Ночной Смотрящий Россия  
Дата: 10.08.23 10:16
Оценка:
Здравствуйте, Shmj, Вы писали:

НС>>Перепишешь в своем гениальном стиле?

S>В простейших случаях можно использовать свойство Visible.

Покажи.

S>Но когда требуется императивное поведение — то этот гениальный подход позволяет простым образом его использовать. Это же просто код.


Это же просто императивный код. Синтаксис просто делает его чуть удобнее. Декларативным он от этого не становится, даже если примитивные кейсы внешне похожи.

S>Попытка представить в декларативном виде императивное поведение — сделает только хуже и все усложнит.


Ну как сказать. Слышал про такую штуку как continuation monad? Вот это оно и есть, и в некоторых кейсах вполне себе работает. В частности, современная программа на C# может на 90% состоять из continuation monad.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Когда императивность переходит в декларативность...
От: Ночной Смотрящий Россия  
Дата: 10.08.23 10:18
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>https://learn.microsoft.com/en-us/dotnet/api/system.windows.controls.itemscontrol.itemtemplateselector?view=windowsdesktop-7.0&amp;redirectedfrom=MSDN#System_Windows_Controls_ItemsControl_ItemTemplateSelector

S>https://stackoverflow.com/questions/9049197/conditional-datatemplate

Как обычно невпопад. Я привел пример того, для чего нужен XAML (тут даже не про синтаксис речь, а про его модель), а ты решил опровергнуть это примерами на xaml.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Когда императивность переходит в декларативность...
От: Ночной Смотрящий Россия  
Дата: 10.08.23 10:20
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Это уже императивное поведение, не имеет смысла писать декларативно — будет только хуже.


Как ты категоричен.
А если тебе твою форму надо оттранслировать в HTML? Или, как в свое время в винфонах было, интерпретировать модель без ее предварительной компиляции?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: Когда императивность переходит в декларативность...
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.08.23 11:35
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Что такое when?

P>>Обычный тег, с таким же синтаксисом, как и все остальные теги. Его задача обеспечивать условный рендеринг контента.

НС>Какой такой тег? У шимжи речь шла про императивный язык.


Я и написал, что можно иначе. Для этого С# умеет почти всё, что нужно для такого, но всё равно синтаксического шума выйходит многовато, придется везде понадобавлять всякие new итд, что убивает на месте
Re[9]: Когда императивность переходит в декларативность...
От: Ночной Смотрящий Россия  
Дата: 10.08.23 12:00
Оценка: +1
Здравствуйте, Pauel, Вы писали:

НС>>Какой такой тег? У шимжи речь шла про императивный язык.

P>Я и написал, что можно иначе.

Где ты такое написал? Слова "иначе" в твоих ответах до этого момента не было.
Суть топика очень проста. Шымжа придумал очередную кулибинщину, имитацию декларативности при том что "без переделки ядра и без создания нового языка — мы можем писать все декларативно. Не нужен XAML или еще что". И мои примеры были предназначены для демонстрации нежизнеспособности его "гениальной" идеи.
Так при чем тут тогда твои теги?

P>Для этого С# умеет почти всё


Но C# далеко не чисто императивный язык.

P>придется везде понадобавлять всякие new итд


using static и набор обычных статических методов позволит обойтись без new.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.