Менеджер Сниппетов И Генератор Кода В Одном Флаконе

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

И тут приходит начальник и говорит: «Подожди.

Где тестыЭ» И ты такой: «Черт!» И вы садитесь писать тесты.

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

Например, комментарии в специальном формате.

И тогда увлекательное программирование превращается в скучную рутину.

Когда я начал программировать в Apex для Salesforce, я был поражен объемом подготовительной работы, которую нужно было проделать, чтобы запустить код в производство.

Здесь уже не начальник, а сама система требует, чтобы код был покрыт минимум 75% тестов.

А еще есть передовая практика, которая не просто «делаю, если хочу, но не хочу», а имеет почти статус конституции.

Например, «объединить все», потому что вы думаете, что код будет вызываться один раз, а в одной транзакции он будет вызываться 200 раз, и лимиты губернатора Salesforce с вами попрощаются.

То же самое делают работодатель и клиенты.

Да и сам Apex тоже довольно многословен.

Что значит создание пустого массива в 21 веке? Список accs = новый список (); Ну да ладно, Apex by Apex, но, конечно, все описанное выше, превращающее праздник в рутину, относится и к индустрии профессионального программирования в целом.

Тесты должны быть написаны, руководства также должны быть выполнены на любом языке.

Таким образом, создание простого класса, который выводит на консоль «Hello, world», оборачивается необходимостью писать десятки или даже сотни строк шаблонного кода.

Естественно, никто в здравом уме в данном случае не пишет с нуля.

Копировать/Вставить — это все.

При этом программирование превращается в еще более увлекательное занятие по исправлению имен, типов, констант, комментариев и т. д. в скопированном куске.

Да-да, RegExp и все такое, но с регулярным выражением гораздо веселее? Я мучился-мучился и решил написать сниппет-менеджер своей мечты.

Какие были предпосылки:

  1. Писать нужно быстро, вечера за 10-15.
  2. Сниппеты должны храниться в сети, а не в централизованной базе данных, потому что я не хочу содержать серверную инфраструктуру.

    Никакого серверного скрипта быть не должно.

  3. Менеджер сниппетов должен иметь встроенный движок какого-нибудь языка программирования, например Python или JavaScript, на котором можно писать что-то вроде макросов.

  4. Макросы должны выполняться в интерактивном режиме, выдавая результаты мгновенно по мере их записи.

    Это не так, что пишешь полчаса, потом нажимаешь кнопку «Выполнить» и еще полчаса тратишь на исправление ошибок.

  5. Браузер — единственное, что необходимо для работы менеджера сниппетов.

    Никаких установок, локальных баз, работы с файловой системой и т.п.

После долгой внутренней борьбы было принято решение писать на Flutter для веба.

На мой взгляд, Flutter на сегодняшний день является настоящим чемпионом по созданию высокоскоростных приложений.

Около полутора лет назад я посмотрел на него и был поражен гармонией общей концепции фреймворка и современностью языка Dart. Однако в то время Flutter для веба работал в экспериментальном режиме, поэтому веб-приложения казались сырыми.

Но Flutter для Интернета недавно был выпущен в стабильную версию, так что, вероятно, пришло время попробовать его в производственном режиме.

За две недели это не получилось, но за месяц нам удалось написать первую версию менеджера сниппетов, готовую к реальному использованию.

Он доступен по ссылке https://apexwidget.com .



Менеджер сниппетов и генератор кода в одном флаконе

Рис.

1. Интерфейс Фрагмент — это просто фрагмент кода, который хранится в ApexWidget и который можно скопировать и вставить.

Но сам фрагмент также является макросом, который выполняется встроенным интерпретатором JavaScript. Все, что вы напишете в редакторе, мгновенно отобразится во вьювере.

Напишем: «Привет, мир».



Менеджер сниппетов и генератор кода в одном флаконе

Рис.

2.Привет, мир Как видите, всё работает, но удовольствия нет, хотя даже в таком виде уже можно что-то сохранить и куда-нибудь скопировать-вставить.

Но давайте напишем что-нибудь поинтереснее: Результат: ${2+2*2}

Менеджер сниппетов и генератор кода в одном флаконе

Рис.

3. Результат 6 Интерпретатор выполнил код внутри блока ${.

} и вернул зрителю готовый результат. На самом деле интерпретатор воспринял содержимое блока ${.

} как js-выражение и выполнил его.

Но что, если мы хотим написать что-то более сложное и большее, чем одно выражение? Для этого ApexWidget поддерживает <%.

%> блоки.

Внутри этих блоков вы можете написать любой код JavaScript.

Менеджер сниппетов и генератор кода в одном флаконе

Рис.

4. Джон Доу Это очень похоже на то, как работает средство рендеринга html ejs для Node.js. Или старые страницы asp работали аналогичным образом: код внутри <%.

%> блок был выполнен на сервере, и все, что находится за пределами этого блока, транслировалось клиентскому браузеру как есть.

Даже страницы PHP сегодня работают аналогичным образом.

Только в ApexWidget вместо сервера стоит Редактор, а вместо браузера — Просмотрщик, поэтому скрипт выполняется мгновенно.

Также приведу пример работы с циклами.

<% let name = ['Росс', 'Рэйчел', 'Моника', 'Чендлер', 'Фиби', 'Джоуи']; %> Всем привет! <% для (пусть я = 0; я < names.length; i++) {%> ${names[i]} <%}%>
В ApexWidget программисту доступен объект набора данных, который представляет собой совокупность различных данных: мужских и женских имен, фамилий, набора фраз, списка отелей с данными геолокации и т. д. Посмотреть весь набор данных можно, введя команду ${JSON.stringify(dataset, undefined, 4)} в редакторе.

Все это нужно для генерации фейковых данных для тестов.

ApexWidget может выводить результат не только в программу просмотра, но и в браузер, что очень полезно для автоматического формирования документации.

Чтобы управлять форматом вывода в средстве просмотра или браузере, программист имеет доступ к глобальной логической переменной inBrowser. Сниппеты хранятся в базе данных в сети, а не в централизованной.

Чтобы использовать ApexWidget, вам необходимо создать собственную базу данных на Airtable.com. Airtable позволяет бесплатно хранить 1200 строк в вашей базе данных.

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

Или вы можете купить подписку на Airtable, но я надеюсь, она вам никогда не понадобится, потому что мне пока сложно представить, кому понадобится больше 1200 сниппетов.

ApexWidget имеет очень подробное руководство о том, как открыть учетную запись на Airtable.com и создать базу данных.

Конечно, это займет у вас некоторое время (минут 10), но в этом есть свое преимущество.

База данных, которую вы создадите, — это не моя база данных, а ваша собственная.

Я не контролирую это, потому что у меня нет к этому доступа, только вы контролируете это.

Не знаю, как вы, а меня очень впечатляют возможности, которые открывает ApexWidget:

  1. Вы можете написать макросы сниппетов любой сложности для любых нужд. Я ввел несколько параметров и сразу получил целую кучу шаблонов классов и тестов, разве это не здорово?
  2. Вы можете написать небольшие утилиты для собственного использования, которые всегда будут под рукой.

    Например, построитель коронных выражений или какой-нибудь нестандартный калькулятор.

  3. Вы даже можете создавать веб-страницы и небольшие веб-приложения.

    Руководство для ApexWidget в виде веб-страницы создано целиком само по себе.

Буду рад любым предложениям и конструктивной критике.

Теги: #программирование #тестирование #flutter #dart #tdd #salesforce #Apex #snippets

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.