Top.Mail.Ru
Заказать консультацию
специалиста 1С
Отправить заявку

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

Язык программирования от 1С: в «1С: Исполнитель» и «1С:Предприятие.Элемент»

Воякин Данил Посмотреть все статьи >> Старший программист 1С франчайзинговой сети "ИнфоСофт".
25.12.2023
1002
Время прочтения - 8 мин.
Заказать консультацию

На дату написания статьи готовится к выходу в публичный доступ технология «1С:Предприятие.Элемент». В данный момент большое количество разработчиков следят за развитием новой технологии «1С: Исполнитель» и ожидают полноценного выхода «1С:Предприятие.Элемент».

В обеих технологиях используется совершенно новый язык программирования. В данной статье будут рассмотрены новые возможности языка «Исполнитель». Поскольку примеры будут приводится с использованиям интерпретатора «1С:Исполнитель», далее по тексту будем называть этот язык «Исполнитель». Однако этот материал будет актуален и для будущей технологии «1С:Предприятие.Элемент».

В первую очередь речь пойдет о принципиально новых функциях, которые отсутствовали в языке «1С: Предприятие», поэтому статья будет полезна 1С разработчикам, которые хотят подготовиться к выходу новых технологий и расширить свой технологический стек за пределы основной платформы.


Что запускаем?

При написании материала использовался «1С:Исполнитель» версии 4.0.5.1. «1С:Исполнитель» выбран как платформа для изучения нового языка поскольку это самый доступный из всех новых технологий 1С – за счет небольшого количества объектов, поставляемых в стандартной библиотеке, приложение уже доступно для скачивания.

Для запуска скриптов используется стандартная поставка для операционной системы Windows и плагин для интеграции с Visual Studio Code. Поскольку «1С:Исполнитель» представляется как средство для выполнения задач системного администрирования, каждый скрипт не зависит от какого-либо внешнего контекста и может запускаться самостоятельно.

В версии языка, используемого в текущей итерации «1С:Исполнитель», нет поддержки подключения объектов из других файлов, поэтому в данный момент «Исполнитель» может работать только с одним скриптом. Возможность разделять код на части по разным файлам уже анонсирована для версии 5 продукта «1С:Исполнитель» и однозначно будет присутствовать в публичной версии технологии «1С:Предприятие.Элемент».


Один раз про основные моменты

Из-за того, что технически язык не является потомком и разрабатывался с нуля для решения задач, отличных от встроенного языка платформы «1С:Предприятие», синтаксис технологий может различаться во множестве базовых правил. Такие базовые правила не требуют дополнительных пояснений, поэтому будут в материале опущены. Например, закрытие блоков кода с помощью «;» или использование ключевых слов в нижнем регистре.

1.png

Рисунок 1 – Закрытие блоков кода с помощью “;”, ключевые слова в нижнем регистре и новый синтаксис тернарной операции

 

Строгая типизация

Заметным нововведением является появление статической типизации. Она позволяет разработчику сразу видеть доступные поля объекта, поскольку среда разработки получила возможность видеть контекст типа и, как следствие, в процессе написание кода «защищает» разработчика от ситуаций, когда он не знает, что вернет функция. В языках с динамической типизацией программисту требуется изучить документацию и/или для начала проанализировать, как работает вызываемый алгоритм, чтобы обезопасить себя от непредсказуемого поведения кода.

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

2.png

Рисунок 2 – Объявление типов


Также объявления типа требуют функции и процедуры. В языке такие команды, как «Функция» и «Процедура» отсутствуют. Вместо них используются общее понятие «Метод». Метод с указанным типом возвращаемого значения при объявлении выполняет роль функции, метод без указания типа – процедуры.

3.png

Рисунок 3 – Объявление типов у методов

  

Перегрузка и интерполяция строк

Появилась возможность полноценной реализации полиморфизма за счет перегрузки методов. Во встроенном языке 1С нельзя было объявить два метода с одинаковыми именами.

Теперь разработчик может описать две разных реализации для одного метода, отличающиеся составом параметров, например:

4.png

Рисунок 4 – Демонстрация перегрузки методов и интерполяции строк

5.png

Рисунок 5 – Шуточная иллюстрация перегрузки методов на примере разных человечков

Подпишитесь на дайджест!
Подпишитесь на дайджест, и получайте ежемесячно подборку полезных статей.

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

Также в демонстрационном методе приведен пример интерполяции строк – небольшое, но очень полезное нововведение, которое позволит сэкономить разработчику большое количество времени. Любая строка в «Исполнителе» анализируется на наличие символов «%» или «$». В случае вхождения символа в строку исполнитель самостоятельно подставляет параметр, соответствующий набору символов, следующим за знаком. Больше не требуется использовать функции замены или разделять строки – язык сделает это самостоятельно.


Функциональные типы и лямбда - выражения

В «1С:Исполнитель» разрешается присваивать переменной значение функционального типа – ссылку на собственный метод или существующий из стандартной библиотеки.

Функциональные типы увеличивают гибкость кода, повышая актуальность библиотечного подхода разработки. Как пример, можно описывать более абстрактные методы, которые будут оперировать числом и математической функцией как входными параметрами. Параметр - функция в таком случае будет представлена в виде «анонимной функции» - новым термином для 1С разработчиков.

Анонимная функция не имеет имени, уникальной ссылки и, соответственно, конкретной реализации. Это лишь описание входных и выходных параметров метода. Любой метод, типы параметров которого совпадают с описанием анонимной функции, может быть назначен переменной функционального типа. Таким образом, разработчик может передать не только объект, но и операцию, которую необходимо провести над объектом:

6.png

Рисунок 6 – Пример использования анонимных функций в качестве параметра


Сама переменная функционального типа описана с помощью следующего нововведения – ламбда-операции. Это особая синтаксическая конструкция, с помощью которой разработчик может описывать входные и выходные типы у метода, без явного его определения. Рассмотрим несколько примеров:

(тип_входного_параметра) -> тип_выходного_параметра – в левой части выражения количество входных параметров может быть произвольное, соответственно разработчик может указывать типы через запятую в скобках. В правой части указывается возвращаемое значение, если оно имеется.

(Конфигурация) -> Конфигурация – в рамках данного скрипта я определил произвольную структуру под названием «Конфигурация». Нам не так важно, что она в себе содержит, главное, что теперь это наш тип, который мы ожидаем получить в результате выполнения метода.

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

(Число) -> Строка

(Строка, Число, Объект) -> Строка

В последнем примере разработчик на встроенном языке программирования 1С увидит знакомый термин «Объект». В синтаксисе «Исполнителя» реализована строгая иерархия типов, где все большая часть типов расширяет базовый тип «Объект». Поэтому не стоит ожидать от этого типа привычной для встроенного языка 1С логики. Здесь «Число», «Строка», «Булево» и даже определенная мной структура «Конфигурация» - это всё «Объект». Здесь наступает момент, когда пора познакомиться с иерархией типов – новой парадигмой в языке «1С:Исполнитель».


Иерархия типов

В языке каждый собственный или библиотечный тип является производным от более базовых, заранее описанных разработчиками. Рассмотрим иерархию типа «Булево» из официальной документации, находящейся в общем доступе:

7.png

Рисунок 7 – Иерархия типа «Булево»


«Булево» является производной сразу от двух типов – «Сравнимое» и «Представляемое». От «Сравнимое» ему досталась возможность проводить сравнение через метод Сравнить() или через операции <, >, >=, <=. А тип «Представляемое» говорит, что значение переменной типа может быть выведено в понятном для пользователя виде.

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

8.png

Рисунок 8 – Иерархия типа «Массив»


Заказать консультацию специалиста 1С
Оставьте заявку и наши эксперты проконсультируют вас по данной статье.
Отправить заявку

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

Рассказать друзьям
Для разработчиков 1С 1С:Предприятие.Элемент
Вам может быть интересно: