@scala_ru

Страница 899 из 1499
Mikhail
23.08.2017
08:07:35
Но реакт только частично декларативный. Циклов всяких там хоть отбавляй

Oleg
23.08.2017
08:07:53
@odomontois Помоги мне. Ты имеешь объяснять. Михаил не понимает.
я тоже не понмаю, почему @rudogma зациклился на том, что for - это какой-то признак императивности

Alexey
23.08.2017
08:08:39
Google
Mikhail
23.08.2017
08:09:41
я тоже не понмаю, почему @rudogma зациклился на том, что for - это какой-то признак императивности
Если использование цикла не считать за признак императивности в шаблоне, то тогда html со вставками php для рендеринга записей - тоже декларативен по самые гланды.

Nick
23.08.2017
08:10:16
каких циклов? это же просто state -> virtual dom
Внутри реакта есть циклы. Все - это императивщина! Шах и мат

Oleg
23.08.2017
08:10:28
Потому что нужно было назвать do
если брать статистическое среднее императивной семантики в теле по гитхабовским источникам , то ставлю, что do оно будет выше, чем у for

Nick
23.08.2017
08:10:44
А зачем цикл в шаблоне?
К примеру часто юзает чтоб вывести row в табличке

Aleksey
23.08.2017
08:11:04
Вот смотри. Взял первый попавшийся пример из вуе. <div id="app-4"> <ol> <li v-for="todo in todos"> {{ todo.text }} </li> </ol> </div> Здесь попытка запихать императивный цикл в декларативную обертку. Пусть и выглядит декларативно, но все та же императивщина. Только теперь выглядит как кусок говна. А теперь вспомни про Flex (я знаю, что ты про него знаешь не по наслышке). Вспомни как там решались эти вопросы. Помнишь? <DataGroup dataProvider="{$data}"><Component name="itemRenderer">....</Component><DataGroup> Тут уже никакой императивщины)
Я выше описал в чем дело. MXML/XAML/GWT пытались копировать идею DOM. Язык опеисания декларативный, но управление императивное. Каждый узел в этом "декларативном" описании имел прмое мутабельное отображение. В королеве ничего такого нет. Вот это 'ul никак не связан с тем ui что в браузере. Ты никак не можешь найти этот ul и добавить туда элемент кроме как поменять стейт и получить новое отображение.

.
23.08.2017
08:11:13
обычная практика вот так делать например

Nick
23.08.2017
08:11:37
А как вам такая логика. Хаскель императивный, потому что он запускается на линуксе, где весь код императивный

Oleg
23.08.2017
08:11:41
Если использование цикла не считать за признак императивности в шаблоне, то тогда html со вставками php для рендеринга записей - тоже декларативен по самые гланды.
for - это просто объявление (declaration), что каждый элемент вот этой последовательности (sequence) элементов состояния будет отображён (map) на элемент разметки

Max
23.08.2017
08:12:58
мне кажется или тут путаница между понятиями "управляющая конструкция" и "императивщина"?

Mikhail
23.08.2017
08:13:16
каких циклов? это же просто state -> virtual dom
'ul( // Look at that. You just map data to view friends map { friend => 'li(friend) } В элемент ул, вставляется список li который получается с использованием цикла. Это не чисто декларативный подход. Чисто декларативный это как в ExtJS, Flex

Google
Oleg
23.08.2017
08:13:21
Mikhail
23.08.2017
08:14:01
В королеве же используется цикл для прямого отображения Данных в Элемент-Шаблона и это не под капотом, а человек сам при написании шаблона это херачит

Oleg
23.08.2017
08:14:54
'ul( // Look at that. You just map data to view friends map { friend => 'li(friend) } В элемент ул, вставляется список li который получается с использованием цикла. Это не чисто декларативный подход. Чисто декларативный это как в ExtJS, Flex
А я говорю - нет элемент ul объявляется как содержащий последовательность из элементов li, каждый из которых будет получаться ровно из одного элемента friends на основе шаблона, где соответствующий элемент обозначе как friend

Aleksey
23.08.2017
08:14:54
Если использование цикла не считать за признак императивности в шаблоне, то тогда html со вставками php для рендеринга записей - тоже декларативен по самые гланды.
Давайте для точности разделим описание (декларацию) и управление. XML + XSLT это декларация данных и декларация отбражения. Управление этим ходяцством через JS это императивное упраление.

Aleksey
23.08.2017
08:16:56
В королеве же используется цикл для прямого отображения Данных в Элемент-Шаблона и это не под капотом, а человек сам при написании шаблона это херачит
Под капотом там нет элементов. Королев-шаблон не разворачивается в val myUl = new HtmlElemet("ul"); friends foreach { x => myUl.append( ... ) } если ты так подумал.

Oleg
23.08.2017
08:17:26
Императивный код составлен из инструкций - сделай то, сделай это. Он обладает свойством предсказуемости посдледовательности действий. Исходя из шаблона я совершенно не могу понять, в каком порядке будут "исполняться" шаблоны для каждого из friend, будут ли они исполняться параллельно или последовательно, до, после или во время обработки остального шаблона

Aleksey
23.08.2017
08:17:46
Под капотом там нет элементов. Королев-шаблон не разворачивается в val myUl = new HtmlElemet("ul"); friends foreach { x => myUl.append( ... ) } если ты так подумал.
Когда дело доходит до changes performing, от шаблона и виртуального дома уже не осталось ничего.

Oleg
23.08.2017
08:18:04
Поэтому я не могу сказать, что этот код обладает качеством императивности, безусловно полезным в определённых случаях

Mikhail
23.08.2017
08:18:37
твоей душе будет спокойнее если вот этот мап вынести из рендера в отдельную функцию?
Смотря как вынести. Если просто friends map friendToLi - ничего не поменяется. императивщина останется. Если будет 'ul ( data = friends, liTemplate = friendToLi) - это будет убого, но более декларативно.

Alexey
23.08.2017
08:19:20
Aleksey
23.08.2017
08:19:31
Разве реакт использует js dom api? Насколько я помню нет.
Что бы применить изменения конечно использует. Как иначе? И Королев использует.

Oleg
23.08.2017
08:19:47
В общем, есть слово "императивщина" в том смысле, в котором его понимает только @rudogma . Можно игнорировать это слово, т.к все остальные понимают это слово совершенно в другом смысле

Mikhail
23.08.2017
08:19:51
Под капотом там нет элементов. Королев-шаблон не разворачивается в val myUl = new HtmlElemet("ul"); friends foreach { x => myUl.append( ... ) } если ты так подумал.
В этом чате принято читать через слово. Но еще раз повторю, что я знаю что под капотом и это не важно. Потому что визуально в шаблоне есть цикл для отображения списка моделей в элемент шаблона.

Oleg
23.08.2017
08:20:29
Разве реакт использует js dom api? Насколько я помню нет.
Он вычисляет дифы на очередной рендер и применяет их с помощью именно этого API

Aleksey
23.08.2017
08:21:23
В этом чате принято читать через слово. Но еще раз повторю, что я знаю что под капотом и это не важно. Потому что визуально в шаблоне есть цикл для отображения списка моделей в элемент шаблона.
Как тебе объянить что чистое отображение != цикл, точно так же как лямбда-выражение это не просто указатель на кусок машинного кода?

Google
.
23.08.2017
08:21:48
Он вычисляет дифы на очередной рендер и применяет их с помощью именно этого API
Про диффы это всё прекрасно понятно. Я имею в виду, что на низком уровне он вроде бы использует апи браузера а не стандартный js api, но я могу ошибаться, поэтому гуглю сейчас )

Mikhail
23.08.2017
08:24:30
Как тебе объянить что чистое отображение != цикл, точно так же как лямбда-выражение это не просто указатель на кусок машинного кода?
Зачем мне это обьяснять? Я топлю за то, что подход в шаблонах королева - это не чистый декларатив уи. Декларатива там не больше чем в обычном html + embedded php. И есть довольно существенная разница с более декларативными подходами.

Oleg
23.08.2017
08:26:55
node.innerHTML = html; в общем-то это DOM API https://www.w3schools.com/jsref/prop_html_innerhtml.asp

Nick
23.08.2017
08:27:29
А html не декларативный? Или что есть чистый?

Oleg
23.08.2017
08:28:06
Думаю, что во вселенной Михаила декларативный - синтетический синтаксис шаблонов, без вставок кода

Если ты вставляешь код на языке, который разрешает сайд эффекты, ты типа автоматически лишаешься декларативности

.
23.08.2017
08:33:03
Если ты вставляешь код на языке, который разрешает сайд эффекты, ты типа автоматически лишаешься декларативности
Тем не менее если вызвать любой код на реакте и сделать поиск по сырцу innerHtml то его не будет.

Mikhail
23.08.2017
08:34:24
Разница такая же как между ленивым списком c map и простым массивом с циклом while. Разная семантика совершенно.
Ты зациклился на внутреннем устройстве. Для меня же при написании шаблона - важна именно визуальная часть исходного кода шаблона. И если я вижу цикл (ленивый, декларативный или еще какой но все таки цикл ручками указанный (не вызванный, а именно указанный - потому что не важно тут же он исполняется или только описывает, что в этом месте будет цикл позже)) - то, считаю что это уже не чисто-декларативный. А если эту возможность убрать из королева, то ничего кроме дсл для хтмл и не останется)

.
23.08.2017
08:34:25
Допустим взять девверсию проекта, открыть бандл скрипта и сделать в нём ctrl+f -> innerHTML

Mikhail
23.08.2017
08:35:24
Тем не менее если вызвать любой код на реакте и сделать поиск по сырцу innerHtml то его не будет.
а откуда он там возьмется? сначала parse, потом добавление метаданных к куску домдерева, потом просто append(child)

хотя не, парсе там нет в реакте. там же наверное все на этапе компиляции в функции перефигачивается

Oleg
23.08.2017
08:36:35
Допустим взять девверсию проекта, открыть бандл скрипта и сделать в нём ctrl+f -> innerHTML
Открыл вот эту демку http://ruanyf.github.io/react-demos/demo01/ там вот такой исходник http://ruanyf.github.io/react-demos/build/react.js и всё там ищется

Возможно, что хитрые бандлы как-то хитро браузерно-зависимо минимизируют этот вызов так, что его не видно

Google
Oleg
23.08.2017
08:38:31
Думаю, что во вселенной Михаила декларативный - синтетический синтаксис шаблонов, без вставок кода

Если ты вставляешь код на языке, который разрешает сайд эффекты, ты типа автоматически лишаешься декларативности

Aleksey
23.08.2017
08:41:00
Если ты вставляешь код на языке, который разрешает сайд эффекты, ты типа автоматически лишаешься декларативности
Если Михаил имеет в виду это, то я эту точку зрения понимаю. Но я не понимаю почему высокоуровневая абстрактная концепция отображения приравниается к машинному циклу.

Mikhail
23.08.2017
08:41:38
Думаю, что во вселенной Михаила декларативный - синтетический синтаксис шаблонов, без вставок кода
именно. чисто декларативный подход к уи - это описание интерфейса используя только перечень элементов которые должны в нем присутствовать и их характеристики. и это необязательно строковый шаблон. это также могут быть инструкции языка. и используемые элементы(компоненты) могут внутри делать что угодно. циклы, ленивость, монадки или еще что - чем угодно обмазаться. но при описании непосредственно уи - только декларатив

Alexander
23.08.2017
08:43:51
ну вы тут дали, дык чё map - это уже императивщина :D

Alexander
23.08.2017
08:44:38
функтор в шоке

Mikhail
23.08.2017
08:47:36
Или ты хочешь что бы не было данных на вход?
Хочу <DataGroup dataProvider=friends></DataGroup> - на королеве это возможно, но это будет уже не фича Королева, это ручками придется написать. С этой точки зрения Королев мне не дает никакой декларативности кроме dsl для html. Но я не уверен насколько органично и удобно будут эти датагрупы смотреться в Королеве

Плюсы чистой декларативности проявляются тогда, когда начинаешь иметь дело со скинизацией и переиспользованием логики компонент. Но чтобы это использовать в Королеве - опять таки - надо кучу всего понаписать еще самому) Хотя меня воротит от одного вида html (в любом виде, что строка что дсл) в коде логики. Но это так - просто к слову) Можно закончить)

Nick
23.08.2017
08:51:18
Читай выше.
тут столько написали, что мне лень

Oleg
23.08.2017
08:56:14
Короче, переписывай королёв на фримонадки и никто уже не будет докапываться до недекларативности

Grigory
23.08.2017
09:03:48
Scalalaz #27 - с Мариной Сигаевой http://scalalaz.ru/series-27.html

Denis
23.08.2017
09:14:22
Scalalaz #27 - с Мариной Сигаевой http://scalalaz.ru/series-27.html
У Марины микрофон что ли специальный?

Oleg
23.08.2017
09:14:27
Очевидно Михаилу это будет недостаточно.
Ну сделай тогда на Free-Closed-Cartesian-Category, чтобы даже функции определять на своём DSL, тогда будет достаточно

Google
Denis
23.08.2017
09:14:30
Звук крутой

Grigory
23.08.2017
09:14:46
как опенсорс разработчик делай что тебе хочется Алексей

Grigory
23.08.2017
09:15:40
У Марины микрофон что ли специальный?
Не могу прокомментировать, у меня были фекальные проблемы обсуждать которые не очень уместно в рамках этого чата

Vasily
23.08.2017
09:31:38
Кстати, насчет Королева - это, часом, никак с Яндексом не связано?

Evgeniy
23.08.2017
09:34:37
У Марины микрофон что ли специальный?
тут скорее это связанно с голосом, высокие голоса обычно хорошо выходят на средненьких микрофонах

Aleksey
23.08.2017
09:35:24
Кстати, насчет Королева - это, часом, никак с Яндексом не связано?
Вот так делаешь-делаешь целый год, а тут раз известная компания что-то заанаонсила, даже код не показывая и все -- ты уже второй.

Michael
23.08.2017
09:40:11
@fomkin на 'github korolev' ты пока первый =)

Alex
23.08.2017
09:57:30
И яндекс Петрович

Alexey
23.08.2017
09:57:59


Страница 899 из 1499