ISBL для чайников и не только

7 1

Несколько слов перед тем, как начать

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

Как уже было сказано ранее, ISBL – встроенный в платформу IS-Builder высокоуровневый интерпретируемый язык программирования, предназначенный главным образом для описания алгоритмов решения прикладных задач. Что это значит? В первую очередь то, что внутри системы DIRECTUM на ISBL можно сделать всё (ну или почти всё, поскольку существует такая вещь, как ограничения платформы) при наличии хотя бы небольшого опыта в программировании. Но и отсутствие такого опыта серьёзным препятствием для изучения ISBL не станет: у него несложный синтаксис и развитая документация. Опытных же разработчиков порадует встроенный редактор текста ISBL с развитым CodeInsight и отладчик с возможностью отслеживания длительности выполнения фрагментов кода.

Особенности ISBL

Как всякий уважающий себя язык программирования, ISBL включает в себя поддержку констант, переменных, многомерных массивов, функций, циклов и операторов ветвления. Плюсом ко всему этому прилагается возможность использования COM-объектов, что позволяет программно работать, например, с документами MS Word и Excel, а в последние версии входит библиотека NPOComputer.DocumentProcessing.dll, которую можно применять для работы с документами Open Office и Libre Office.

Основной синтаксис

С чего начинается знакомство с новым языком программирования? Разумеется, с его синтаксиса, без знания которого будет затруднительно написать даже классический вывод на экран строки "Hello, world!". И у ISBL, как уже упоминалось, синтаксис довольно прост.

Комментарии

Сам по себе факт наличия такого элемента, как комментарии, вряд ли нуждается в разъяснениях. Комментарии позволяют как раскрыть туманный смысл участка выполняемого кода, так и временно заблокировать его выполнение без удаления. ISBL поддерживает комментарии двух видов:

	  // Всё, что написано после '//' и до конца строки – однострочный комментарий.
  /* Всё, что написано между символами '/*' и '*/',
  считается комментарием, включая переносы строк. Кстати, символ '*/' в 
  строке выше считается окончанием комментария несмотря на кавычки, 
  то есть при желании можно закомментировать таким образом часть одной строки */

Типы данных, переменные и константы

Для того, чтобы объявить и инициализировать переменную, в неё достаточно записать любое значение. При этом явно указывать тип данных в большинстве случаев не требуется, так как ISBL поддерживает динамическую типизацию. Это означает, что переменная будет иметь тип, определяемый присваиваемым значением. Указать тип переменной можно и явно (например, для корректной работы CodeInsight), но только если определяемый тип данных не является простым. Ниже перечислены основные типы данных, используемые в ISBL:

  • Числовой. Может принимать целые, дробные и экспоненциальные значения:
    	  100500
    	146.95
      	4.2e-3
  • Строковый. Может содержать произвольное количество символов, заключённых в кавычки или апострофы:

    	  ‘Строка в апострофах’
    	“Ещё одна строка, теперь в кавычках”
  • Дата и время. Содержит значение даты и времени в секундах, которое можно отформатировать для вывода на экран по любому шаблону встроенной функцией FormatDate:
    	  “31.12”
      	“01.01.2018”
      	“31.12.2017 23:59:59”
  • Логический. Используется для представления логических значений True и False, при этом в числовом представлении True = -1, а False = 0, о чём следует помнить при выводе значений такого типа на экран и при сравнении их с числами.

Константой называется любое постоянное в рамках определённого участка кода значение. В ISBL константы делятся на явные (заданные разработчиком) и системные (зарезервированные имена со строго определёнными значениями). Системные константы – это NULL, nil, FALSE, SYSREQ_NAME и т.д.

Структуры данных

Каждый раз, когда некоторое количество данных, объединённых каким-либо признаком, необходимо сохранить в одном месте, для этого можно и нужно использовать структуры данных. ISBL поддерживает следующие из них:

  • Списки IList – набор пар значений <Name>; <Value>, где Name – уникальный строковый идентификатор, а Value – значение любого типа. Значения элементов списка можно перебирать в цикле, а можно получать доступ к ним по индексу или по имени.
  • Списки строк IStringList – набор строковых значений. Обладает всеми свойствами простого списка, кроме доступа по имени, и позволяет получить значение всех строк, входящих в него, разом через определённый разделитель.
  • Массивы – набор значений одного типа. Доступ к значениям осуществляется по индексу или перебором в цикле. ISBL поддерживает как одномерные, так и многомерные массивы, причём количество измерений не ограничено. Для работы с массивами используются следующие встроенные функции:
    	  CreateArray() //Создаёт многомерный массив
    	ArrayOf() //Создаёт одномерный массив
      	ArrayDimCount() //Получает количество измерений массива
      	ArrayHighBound() //Получает верхнюю границу измерения массива
      	ArrayLowBound() //Получает нижнюю границу измерения массива
      	ArrayReDim() //Изменяет размерность массива

    Подробнее об этих функциях и параметрах, которые они принимают на входе, можно прочесть в справке по ним в компоненте «Функции ISBL».

Операторы

Данные любого типа бессмысленны, если ими нельзя манипулировать: читать, изменять, записывать, создавать и удалять. Для базовой работы с данными в ISBL поддерживаются следующие операторы:

  • Арифметические (+, -, *, /);
  • Строковые (&);
  • Логические (and, or, not);
  • Операторы сравнения (<, >, <=, >=, =, <> для чисел и <<, >>, <<==, >>==, ==, <<>> для строк);
  • Оператор присваивания (=).

Помимо этого, в ISBL поддерживаются операторы ветвления и цикла:

  • Условное ветвление:
    	  if <Condition>
        <TrueOperationsBlock>
      else
        <FalseOperationsBlock>
      endif
  • Цикл по значениям:

    	  foreach <Element> in <ElementList>
        <SomeOperations>
      endforeach


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

  • Цикл по условию:
    	  while <Condition>
        <SomeOperations>
      endwhile

А также есть две конструкции для обработки исключений:

  try
    <SomeOperations>
  except
    <ExceptionOperations>
  endexcept

и

  try
    <SomeOperations>
  finally
    <FinallyOperations>
  endfinally

Подробнее обработка исключений с их помощью будет разобрана в следующей статье, а пока можно отметить, что разница между ними заключается в том, что вычисления блока except выполняются только при возникновении исключения в блоке try, а вычисления блока finally выполняются всегда, независимо от возникновения исключений в блоке try.

Встроенные функции

Классически, функция в программировании – это именованный блок кода, который может вызываться по своему имени из других частей кода несколько раз. В ISBL есть множество встроенных функций и возможность создания собственных в компоненте «Функции ISBL». Для большинства встроенных функций есть справка, просмотреть которую можно по нажатию Ctrl+F1 из редактора текстов ISBL, установив перед этим курсор на имя функции.

Объекты и объектная модель

Значительным преимуществом ISBL является уже упомянутая выше возможность работы с COM-объектами. Это позволяет обратиться как к объекту, скажем, MS Word из текста вычислений на ISBL, так и к объекту DIRECTUM из текста каких-либо внешних вычислений. Соответственно, с точки зрения разработчика ISBL, все объекты можно поделить на два вида: внутренние, составляющие объектную модель IS-Builder, и внешние, например MS Excel. Каждый объект имеет свой собственный набор свойств и методов для работы с ним. Синтаксис обращения к методам и свойствам объектов в ISBL ничем не отличается от такового в других ЯП:

  <ObjectName>.<PropertyName>[(<PropertyArguments>)]
  <ObjectName>.<MethodName>[(<MethodArguments>)]

Внутренняя объектная модель IS-Builder позволяет работать с практически любыми элементами системы DIRECTUM: электронными документами и подписями, записями справочников, задачами, пользователями и даже элементами интерфейса. Подробный список доступных объектов содержится в справке по ссылке: https://club.directum.ru/webhelp/directum/5.5/index.html?om_obekty_directum.htm.

Редактор текста ISBL

Для того, чтобы программисту на ISBL было немного легче и приятнее работать, в IS-Builder есть встроенный редактор текстов на ISBL. От обычного текстового редактора его отличает:

  • Подсветка синтаксиса: все элементы исходного кода имеют разное форматирование, что значительно облегчает его восприятие.
  • CodeInsight: всплывающие подсказки по именам функций, переменных и констант (Ctrl+Space), аргументам функций и методов (Ctrl+Shift+Space), а также по свойствам и методам объектов.
  • Справка по элементам языка, вызываемая по нажатию Ctrl+F1 при курсоре, установленном на элементе.
  • Переход в карточку функции (с возможностью последующего перехода к её тексту) по Ctrl+F4 при курсоре, установленном на имя функции.
  • Вставка элементов объектной модели IS-Builder: имён реквизитов справочников и электронных документов, кодов типов справочников и записей справочников и т.д. Вставка доступна по соответствующим кнопкам на ленте, на закладке «Вставка».

Отладчик ISBL

Процесс отладки и альфа-тестирования кода на ISBL был бы невыносим без возможности построчного выполнения кода с отслеживанием значений переменных. Такую возможность предоставляет отладчик ISBL – утилита STDbg.exe. Помимо непосредственно отладки он также позволяет анализировать производительность вычислений – на отдельной вкладке «Профилирование» разработчик может посмотреть, сколько времени выполняется любой фрагмент кода, и при получении неудовлетворительных результатов оптимизировать вычисления.

Вместо заключения

Всё вышесказанное представляет собой довольно сжатый обзор возможностей ISBL. Его имеющиеся преимущества, такие как низкий порог вхождения, хорошая документированность и широкие возможности модификации любых систем на базе IS-Builder, делают его практически идеальным инструментом сопровождения этих систем, доступным как «чайникам», так и их более продвинутым коллегам.

7
Авторизуйтесь, чтобы оценить материал.
3
Дмитрий Тарасов

Авторизуйтесь, чтобы написать комментарий