Давайте начнем с того, что поймем разницу м/у императивным и декларативным UI. Понять разницу можно легко через аналогию. Допустим вы хотите заказать сэндвич в кафе.
В императивном стиле это выглядит так: "Нужно взять белый батон, разрезать его пополам, затем намазать хлеб кетчупом, после нарезать колбасы и положить на батон, затем добавить сыр, нарезать помидор и положить на сыр, после добавить лук и накрыть его другом куском хлеба"
В декларативном стиле: "Хочу сэндвич с колбасой".
Из примера должно быть понятно что отличия в том, что в одном случае мы описываем как хотим получить результат, во втором случае описываем лишь результат, а система должна уже сам решить как его достигать.
Касательно интерфейсов индустрия прошла немалый путь. Изначально как вы помните интерфейсов как таковых не было, была командная строка и всем ее хватало. Затем начали появляться оконные системы потому как был запрос на удобный способ взаимодействия с компом без запоминания тысячи команд.
В этот же момент начали появляться объектно ориентированные языки программирования, и оказалось что довольно удобно при помощи объектов описывать UI элементы вроде кнопок, текста, чекбоксов и т.д.
Затем разработчики поняли что все равно приходится дублировать код, а еще приходится постоянно кучу раз перезапускать сборку, чтобы понять, а стоит ли кнопка в том месте в котором должна.
Появилась идея, давайте описывать UI в специальном формате, чтобы можно было, не пересобирая приложение, понять стоит ли кнопка там где нужно. Появились специальные языки разметки, в вэбе с которого все началось это html, в Android xml, в iOS xib и еще многие другие для разных платформ. Так или иначе мы пришли к тому, что делать интерфейсы из кода не удобно, охото иметь возможно быстро накидать верстку, проверить специальным инструментом для preview все ли стоит там где нужно, а уже потом прикручивать логику.
И вот тут казалось бы можно и остановится, ведь интерфейсы уже стали декларативными. Ведь мы уже не говорим как именно рисовать интерфейс, мы описываем просто результат который хотим получить при помощи верстки. Почему тогда декларативными называют только недавно вышедшие SwiftUI, Compose и React?
Основная проблема в том, что требования к интерфейсам со временем тоже поменялись. Если раньше нас устраивала статичная страница, то сейчас мы хотим красивые анимации, кучу плавных переходов, красивые всплывающие окна. Интерфейсы уже давно не статичные, они должны меняться в ответ на действия пользователя, все должно быть максимально интерактивно. Получается что у нас есть верстка, а также есть код который её меняет.
Появляется код в приложении который добавляет элементы, удаляет, что-то скрывает или анимирует. В этот момент наш UI перестает быть декларативным, потому как мы явно прописываем в коде, что конкретно нужно поменять. Вот тут сдвинуть кнопку, а вот эту перекрасить вот в такой цвет, а вот этот чекбокс сделать disable. Думаю суть вы уловили.
При всем при этом UI становится сложнее, появляется куча элементов которые уже не опишешь через язык вёрстки. Вспомните сколько нужно написать кода, чтобы показать список в котором будет еще список с горизонтальным скролом?
У каждой большой компании появляется своя выделенная команда, которая делает свои UI элементы. И вы только вдумайтесь, отдельная команда задача которой разрабатывать свои кнопки немного отличающиеся по поведению от стандартных. Сука кнопки!
Сложность появляется там, где ее по идее быть не должно. Эпоха языков вёрстки подходит к концу. Они уже давно не помогают решить проблемы которые у нас возникают. Технологии уже давно позволяют быстро компилировать участи кода, чтобы показывать preview верстки даже если она описана не через xml или html. Поэтому xml уже сдает позиции, да и языки исключительно для верстки тоже.
Давайте начнем с того, что поймем разницу м/у императивным и декларативным UI. Понять разницу можно легко через аналогию. Допустим вы хотите заказать сэндвич в кафе.
В императивном стиле это выглядит так: "Нужно взять белый батон, разрезать его пополам, затем намазать хлеб кетчупом, после нарезать колбасы и положить на батон, затем добавить сыр, нарезать помидор и положить на сыр, после добавить лук и накрыть его другом куском хлеба"
В декларативном стиле: "Хочу сэндвич с колбасой".
Из примера должно быть понятно что отличия в том, что в одном случае мы описываем как хотим получить результат, во втором случае описываем лишь результат, а система должна уже сам решить как его достигать.
Касательно интерфейсов индустрия прошла немалый путь. Изначально как вы помните интерфейсов как таковых не было, была командная строка и всем ее хватало. Затем начали появляться оконные системы потому как был запрос на удобный способ взаимодействия с компом без запоминания тысячи команд.
В этот же момент начали появляться объектно ориентированные языки программирования, и оказалось что довольно удобно при помощи объектов описывать UI элементы вроде кнопок, текста, чекбоксов и т.д.
Затем разработчики поняли что все равно приходится дублировать код, а еще приходится постоянно кучу раз перезапускать сборку, чтобы понять, а стоит ли кнопка в том месте в котором должна.
Появилась идея, давайте описывать UI в специальном формате, чтобы можно было, не пересобирая приложение, понять стоит ли кнопка там где нужно. Появились специальные языки разметки, в вэбе с которого все началось это html, в Android xml, в iOS xib и еще многие другие для разных платформ. Так или иначе мы пришли к тому, что делать интерфейсы из кода не удобно, охото иметь возможно быстро накидать верстку, проверить специальным инструментом для preview все ли стоит там где нужно, а уже потом прикручивать логику.
И вот тут казалось бы можно и остановится, ведь интерфейсы уже стали декларативными. Ведь мы уже не говорим как именно рисовать интерфейс, мы описываем просто результат который хотим получить при помощи верстки. Почему тогда декларативными называют только недавно вышедшие SwiftUI, Compose и React?
Основная проблема в том, что требования к интерфейсам со временем тоже поменялись. Если раньше нас устраивала статичная страница, то сейчас мы хотим красивые анимации, кучу плавных переходов, красивые всплывающие окна. Интерфейсы уже давно не статичные, они должны меняться в ответ на действия пользователя, все должно быть максимально интерактивно. Получается что у нас есть верстка, а также есть код который её меняет.
Появляется код в приложении который добавляет элементы, удаляет, что-то скрывает или анимирует. В этот момент наш UI перестает быть декларативным, потому как мы явно прописываем в коде, что конкретно нужно поменять. Вот тут сдвинуть кнопку, а вот эту перекрасить вот в такой цвет, а вот этот чекбокс сделать disable. Думаю суть вы уловили.
При всем при этом UI становится сложнее, появляется куча элементов которые уже не опишешь через язык вёрстки. Вспомните сколько нужно написать кода, чтобы показать список в котором будет еще список с горизонтальным скролом?
У каждой большой компании появляется своя выделенная команда, которая делает свои UI элементы. И вы только вдумайтесь, отдельная команда задача которой разрабатывать свои кнопки немного отличающиеся по поведению от стандартных. Сука кнопки!
Сложность появляется там, где ее по идее быть не должно. Эпоха языков вёрстки подходит к концу. Они уже давно не помогают решить проблемы которые у нас возникают. Технологии уже давно позволяют быстро компилировать участи кода, чтобы показывать preview верстки даже если она описана не через xml или html. Поэтому xml уже сдает позиции, да и языки исключительно для верстки тоже.
Ng was convicted in April for conspiracy to incite a riot, public nuisance, arson, criminal damage, manufacturing of explosives, administering poison and wounding with intent to do grievous bodily harm between October 2019 and June 2020. The SUCK Channel on Telegram, with a message saying some content has been removed by the police. Photo: Telegram screenshot. Some Telegram Channels content management tips “[The defendant] could not shift his criminal liability,” Hui said. Other crimes that the SUCK Channel incited under Ng’s watch included using corrosive chemicals to make explosives and causing grievous bodily harm with intent. The court also found Ng responsible for calling on people to assist protesters who clashed violently with police at several universities in November 2019.
from us