Домой / Социальные сети / Draw io на русском языке. Операторы, доступные в языке Io

Draw io на русском языке. Операторы, доступные в языке Io

Draw.io - бесплатное приложение, предназначенное для моделирования диаграмм и блок-схем бизнес-процессов. Присутствует возможность интеграции с Google Документами, Dropbox, OneDrive, JIRA, Confluence, Chrome и GitHub. Дополнение для серверов Confluence и JIRA Cloud являются платными. Онлайн-версия для синхронизации с Google Диском предлагается в 2 вариантах - с поддержкой Google Apps и без неё. Помимо веб-версии существует программа для установки на ПК, которая поддерживает ОС Windows, MacOS и Linux.

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

С помощью редактора можно создавать любые схематические изображения - от схем электрических цепей до структур бизнес-моделей. В числе возможностей - построение диаграмм, графиков и UML-моделей. В библиотеке форм присутствует несколько десятков фигур, сгруппированных по категориям. Объекты можно форматировать, меняя шрифты, цвет, градиент, толщину линий, уровень прозрачности. Благодаря возможности синхронизации с Google Диском над документами могут одновременно работать несколько пользователей. Готовые изображения можно сохранять на жёстком диске ПК или вставлять в вики-сайты и блоги. Доступные форматы для экспорта - PDF, GPG, SVG, XML и JPG.

Ключевые особенности

  • Бесплатная интеграция с сервисами Google
  • Платная интеграция с Confluence и JIRA Cloud
  • HTML клиент с поддержкой IE 6-8
  • Поддержка смартфонами и планшетами
  • Экспорт документов в форматы PDF, GPG, SVG, XML и JPG
  • Оффлайн приложение для Windows, MacOS и Linux
  • Поддержка 27 языков

Я наконец то нашел то что искал. Бесплатное средство моделирования, которое поддерживает возможности описания бизнес-процессов — Draw.io

Draw.io это инструмент для создания диаграмм и блок-схем онлайн. При этом огромное число шаблонов, которые позволяют нарисовать все что душе угодно. Инструментарий Draw.io очень напоминает MS Visio и возможно сделан под него, однако приложение от Microsoft программа платная, а онлайн сервис Draw.io — совершенно бесплатный, и главное не требует регистрации.

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

Мнение о Draw.io

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

Чтобы создать блок модель онлайн, нужно всего-то создать новый документ в инструментарии.

В панели объектов, как и в MS Visio нужно выбрать категорию и перенести объект на поле модели, курсором мыши. Объектов очень много, так что их вполне хватит для создания полноценной модели бизнес-процесса (в отличии от , в котором набор объектов и моделей серьёзно ограничен).

Чтобы соединить объекты модели друг с другом, требуется выделить объект и навести указателем мыши на другой, после чего появиться зеленый флажок, который нужно перетащить на объект.

Самое главное, что после создания модель бизнес-процесса возможно экспортировать на свой компьютер в формате изображение (PNG, GIF, JPG, PDF) через меню: Файл – Экспортировать.

Ну и конечно облачная фишка — сервис Draw.io синхронизируется с Google Диском, что дает возможность сохранять проект прямо на диск Google.

В целом инструмент мне понравился, похоже Draw.io вполне пригоден для отрисовки бизнес-процессов online. И хотя в больших проектах федерального уровня пока конкуренции почти нет, для небольших компаний, которые описывают свои бизнес-процессы — вполне пригодный инструмент.

Работа любого инженера, IT-специалиста, маркетолога, бизнес-аналитика, менеджера связано с необходимостью создания различных диаграмм, блок-схем и графиков. Для данных целей замечательно подойдет сервис «draw», доступный по ссылке .

Его главное достоинство – бесплатность. За пользование ресурсом не взнимается плата, что делает его ещё более приятным. Кроме того, для полноценной работы не нужно проходить регистрацию и проходить нудный процесс авторизации на сайте.

При входе на главную страницу предстоит выбрать путь для сохранения проекта. Конечные результаты можно хранить на удаленном хранилище – «облаках» («Google Drive», «Dropbox», «OneDrive») , на ресурсе «GitHub», на жёстком диске устройства «Device» или непосредственно в среду для управления разработкой веб-приложений и программ «Trello».

По умолчанию, стоит включённой галочка для сохранения выбранных настроек в дальнейшем.

Чтобы упростить задачу по ознакомлению с возможностями онлайн-сервиса, изменим язык интерфейса, нажав на «Language».

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

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

Можно открыть пустое поле и создать схему самостоятельно или воспользоваться библиотекой различных графических шаблонов. «Диаграммы Исикавы» (она же «рыбий хвост»), «Схемы для описания бизнес-процессов», «Структурные графики», «Блок-схемы», «Электрические схемы», «Программные блоки» - это лишь малая часть того, что уже присутствует в качестве заготовок.

Большой интерес пользователей вызывает возможность описание бизнес-процессов с помощью сервиса draw.io.

Для начала работы выберем «Пустую диаграмму» среди категории шаблонов «Базовый».

В качестве примера опишем основные бизнес-процессы, связанные с работой современного не крупного интернет-магазина.

Для графической части работы нам потребуются разделы «BPMN Общие» и «BPMN Events».

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

Создадим на схеме событие – поступление заявки менеджеру, который занимается обслуживанием интернет-магазина, для чего перетянем мышкой значок конверта, символизирующий поступление заявки (входящего сообщения) и контейнера «Задачи», описывающий реакцию на обращение.

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

Для удобства использования онлайн-инструмента draw.io, имеется верхняя панель управления, содержащая кнопки отмены действий, масштаба, прокрутки и управления слоями, а также наиболее используемые элементы (опорные точки, стрелки установления связей).

Двойным щелчком левой кнопки мышки отредактируем текст на блоке, переименовав «Task» в «Проверка наличия заказанных товаров на складе». Именно с этого шага, менеджер интернет-магазина должен начинать анализ заказа, так как от него зависит дальнейшие шаги по коммуникации с клиентом.

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

* Важно помнить, что бизнес-процессы пишутся не для бумаги, а для обычных людей, работников компании. Чем детальнее и подробнее будет произведена проработка, тем меньше ошибок, будет происходить в будущем. От постановки задачи зависит 80% успеха её выполнения.

При наличии товара на складе можно перейти к «Проверке корректности заполненных данных пользователем», при отсутствии к «Уточнению точной даты поставки». Для того, чтобы написать комментарий над каким-либо блоком или стрелкой нужно выбрать вкладку «Общие» и элемент «Text». В рассматриваемом случае это указания направлений «Да/нет».

Разберем отрицательную ветку и нанесем на схему все дальнейшие шаги действий.

Добавятся один вспомогательный блок «Связаться с поставщиком, запросить точные сроки отправки», два основных «Подобрать альтернативные варианты товаров, которые есть в наличии и можно предложить, как замену», «Проверка корректности заполненных данных пользователя» и блок связи с клиентом «Связаться по телефону и обсудить детали доставки». Важно быть заранее подготовленным к любому исходу и потому прорабатывать альтернативы. В нашем случае мы создали бизнес-процесс в сервисе draw.io, связанный с подборкой альтернатив, что поможет удержать клиента в случае его несогласия со сроками доставки. Вспомогательные блоки изображаются в виде пунктира, доступны во вкладке «BPMN Общие».

Если магазин работает над лояльностью своих клиентов, то возможно добавить ещё один блок, связанный с предоставлением персональной скидки на альтернативный товар, в случае если сроки затягиваются по вине интернет-магазина (например, некорректно отобразились остатки товара (на сайте «в наличии», а по факту товар закончился)).

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

Таким образом, потратив всего 5 минут времени, мы проработали бизнес-процессы в сервисе draw.io, относящиеся к менеджеру по продажам. Аналогичным образом можно составить на отдельных листах схемы для остальных подразделениях, участвующих в деятельности интернет-магазина, а также произвести обобщение всех служб компании в целом.

Чтобы открыть документ в будущем, достаточно просто зайти на сайт сервиса, и, выбрав «Открыть существующую диаграмму», найти сохраненный ранее xml-проект.

Кроме конечных результатов в указанном ранее формате, возможно экспортировать диаграммы и схемы как pdf и html документы, а также в виде картинок и векторной графики (SVG).

С недавнего времени появилась возможность скачать draw.io в виде программы на ПК (работает на операционных системах Windows, MacOs, Chrome OS, Linux), а также установить как мобильное приложение, работающее, как на iOS, так и на Android.

Для данных целей необходимо на панели управления нажать кнопку «Дополнительно» и в раскрывшемся меню выбрать «Скачать».

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

При возникновении трудностей, всегда можно ознакомиться с инструкциями и официальной документацией, представленной на сайте онлайн-сервиса.

Здравствуйте, уважаемые Хабражители. Представляю вашему вниманию перевод статьи From Draw.io to Vue.js app автора Francesco Zuppichini.


Это моя первая публикация на Хабре и я решил начать с перевода статьи об одном классном инструменте, который позволяет сгенерировать Vue.js приложение из UML диаграммы.
Удивлены? Я был просто восхищен, когда наткнулся на него.


Конечно же, как и в любой бета версии, там есть над чем поработать. Например первым делом я связался с автором и сказал, что хочу внести исправления в структуру шаблона компонентов и именование путей. Автор вышел в течении часа на связь, выложил код на GitHub и написал небольшой туториал. После принятия PR было получено разрешение на перевод статьи, с указанием ссылки на оригинал.


Кому интересно - прошу под кат.

Из Draw.io в Vue.js приложение


Создание приложения должно быть таким же легким, как нарисовать граф в draw.io
Франческо Саверио

Что, если я скажу вам, что вы можете трансформировать это:






Получился проект Vue.js со всеми файлами и импортами, которые вам нужны для начала создания своего клевого продукта. Круто, да?


Я сделал небольшое демо-видео, которое вы можете посмотреть здесь:


Веб-приложение - это всего лишь граф

Каждое веб-приложение может быть выражено в виде графа
Давайте немного подумаем. Когда вы используете фреймворк, такой как React, Angular или Vue, у вас всегда есть один корневой компонент.


В нашем примере корневой компонент - это компонент App , все остальное - всего лишь узел графа. Мы можем идентифицировать на первом уровне Home и Index nodes как прямые дочерние элементы App .


Общим стандартом при разработке веб-приложений является хранение компонентов в структуре каталогов на основе графов. Поэтому обычно для каждого компонента создается каталог с тем же именем, где размещается сам компонент и все его дочерние элементы.


Например, Index - это корень подграфа, составленного самим собой, User и Post . Поэтому имеет смысл имитировать эту абстракцию в структурах приложения.




Это дает два преимущества: масштабируемость, поскольку подграфы являются независимыми, и легкое понимание структуры и логики приложения.


Кроме того, всегда можно видеть общую структуру приложения, просто глядя на граф.

От графа к приложению

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


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


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


В JavaScript файлы импортируются примерно так:


import italy from "italy" // import whole module import { Spaghetti} from "italy" // import a single entity in italy

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

Drawio2Vuejs

Я создал пакет, который позволяет вам нарисовать ваше приложение в draw.io и использовать экспортированный XML-файл для создания приложения Vue.js. Он называется graph2app-drawio2vuejs .


Пакет можно найти здесь:



На самом деле, это не новая идея, я разработал некоторое время назад способ сделать практически то же самое, используя python:



Но имейте в виду, что эта новая версия пакета npm намного лучше .


Поэтому, прежде всего, установите пакет глобально с помощью npm:


$ npm i -g graph2app-drawio2vuejs

Теперь можно использовать его в терминале с помощью команды:


$ drawio2vuejs

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


$ drawio2vuejs --help Usage: drawio2vuejs scaffold Vuejs app from Draw.io Options: -V, --version output the version number -d, --dist Output destination -x, --xml xmlPath -h, --help output usage information

Обязательно нужно передать путь к xml-файлу draw.io.


Пришло время рисовать! Перейдите на draw.io , выберите UML на левой панели и нажмите на Object :




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




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




Теперь мы хотим, чтобы Home был дочерним элементом App . Так что нажмите на Home и используйте стрелку для подключения к App .





Что делать, если мы хотим также в App импортировать Home в качестве зависимости? Нажмите на use arrow в разделе UML слева и поместите его из App в Home .




Хорошо! Вы создали свой первый граф! Давайте используем его для создания приложения Vuejs на его основе.


Мы сказали, что нам нужен файл xml , поэтому экспортируйте его без сжатия . Нажмите Файл > Экспортировать как > XML > Сжатый (нет) .


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


$ vue init webpack app

После того, как вы это сделаете, мы готовы сгенерировать приложение из графа:


$ drawio2vuejs --xml=Dist=

Для меня будет такая команда:


$ drawio2vuejs --xml=/Users/VaeVictis/Desktop/app.xml --dist=/Users/VaeVictis/Desktop/app/src

Если все работает правильно, вы должны увидеть следующий результат:



Файл App.vue будет обновлен, поскольку он уже был там, добавив правильный импорт для Home . Также будет создан новый компонент Home . Если мы откроем App.vue , мы должны увидеть:



Компонент правильно импортируется, и папка Home с файлом Home.vue была правильно создана!

graph2app

Пакет drawio2vuejs разработан с использованием другого пакета, который я разработал: graph2app .



Скоро я собираюсь сделать статью о этом, как применить модуль, используя три части:

  • GraphBuilder

App , где основная логика, создает каталог и файлы из графа. Граф выполнен с использованием экземпляра GraphBuilder . В нашем случае я создал DrawIoGraphBuilder , который расширяет его, чтобы проанализировать XML-файл из draw.io.
graph2app-drawio-graph-builder


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


File - это абстракция узлов на графе. Он имеет шаблон , из котороо генерируется компонент. Таким образом, когда graph2app получает граф, ему также нужен экземпляр File , чтобы вызвать метод рендеринга на нем и сохранить файл правильно.



Как видите, пакет имеет модульную структуру. Мы могли бы использовать тот же DrawIoGraphBuilder с другим экземпляром File для создания, например, React приложений из того же графа draw.io.

Вывод

Надеюсь, вам понравится эта статья. Я твердо убежден, что визуализация приложения может повысить производительность. Библиотека по-прежнему является бета-версией, и ей нужно некоторое улучшение. Я думаю, что людям понравится эта идея и они будут способствовать развитию.


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


Франческо Саверио

Теги: Добавить метки

Io - компактный объектно-ориентированный язык программирования

Часть 1. Обзор возможностей и синтаксиса языка Io

Серия контента:

В группе языков, основанных на парадигме объектно-ориентированного программирования, Io выделяется своей простотой и лаконичностью. Идеальных программ, полностью свободных от каких бы то ни было недостатков, не бывает, тем более, когда речь идёт о реализации языка программирования. Именно поэтому необходимо достаточно подробно изучить возможности и особенности любого языка программирования (в данном случае - Io), а также области его применения, прежде чем выносить окончательное суждение о его необходимости, эффективности, удобстве для разработчика и т.д.

История появления языка Io

Язык Io появился в 2002 году, когда его автор Стив Декорт (Steve Dekorte), пытаясь лучше понять принципы функционирования и реализации языков программирования, решил совместить теорию с практикой и написать собственный простой и лаконичный язык. Декорт спроектировал Io, как чистый объектно-ориентированный язык, основанный на прототипах, с динамической типизацией, в котором устранено различие понятий "класс" и "экземпляр". В Wikipedia отмечается влияние на Io таких языков, как Smalltalk (принцип "всё есть объект" и динамическая типизация), Self и NewtonScript (объектная модель, основанная на прототипах), Lisp (равнозначность инструкций и данных в коде программы), а также Lua и Act1.

Общие сведения

Код программ на языке Io транслируется и выполняется с помощью компактной, легко переносимой виртуальной машины. Пакеты Io для различных платформ расположены на его Web-сайте . Язык Io распространяется в соответствии с условиями лицензии BSD/MIT.

Основными свойствами данного языка, которые подчёркивает сам автор, являются концептуальная простота и лаконичность, встраиваемость (возможность объединения с кодом, написанным на других языках) и расширяемость, возможность динамически изменять внутренние объекты во время выполнения, интроспективность, а также реализация концепции параллелизма.

В Io все сущности представляют собой объекты, которые обладают возможностью изменяться во время выполнения программы. Код любой программы компонуется из выражений, которые также могут быть модифицированы в процессе выполнения программы. В свою очередь выражения фактически представляют собой инструкции передачи сообщений. Реализован механизм контекстных областей видимости объектов на уровне функций и блоков кода. Для управления параллельными вычислениями применяются акторы (actors).

Выполнение программ

В программах на языке Io не требуется обязательного присутствия функции main() или какого-либо специального объекта, с которого должно начаться выполнение. Таким образом, Io-программы в определённой степени можно считать сценариями (скриптами – англ. scripts).

Запуск программы из командной строки выполняется следующим образом:

io projects/io/my_first_prog.io

Также можно работать в интерактивном режиме интерпретатора Io, как показано в листинге 1.

Листинг 1. Использование интерпретатора Io в интерактивном режиме
$ io Io 20070410 Io> "It"s Io interpreter" println It"s Io interpreter ==> It"s Io interpreter Io>

В интерактивном режиме выводится не только результат выполнения введённого выражения, но и возвращаемое этим выражением значение, обозначаемое префиксом "==> ". В данном случае результат выполнения выражения совпадает с возвращаемым значением.

Следует отметить, что в интерактивном режиме вводимые выражения выполняются в общем контексте верхнего уровня, соответствующем объекту с именем Lobby.

Листинг 2. Содержимое контекста верхнего уровня Io-программы
$ io Io 20070410 Io> print Object_0x9898a88: Lobby = Object_0x9898a88 Protos = Object_0x9898550 args = method(...) exit = method(...) forward = method(...) launchPath = "/home/alexs/projects/io" ==> Object_0x9898a88: Lobby = Object_0x9898a88 Protos = Object_0x9898550 args = method(...) exit = method(...) forward = method(...) launchPath = "/home/alexs/projects/io" Io>

В интерактивном режиме также можно выполнять программы, которые хранятся в отдельных файлах, как показано ниже:

doFile("my_first_prog.io")

Указанная программа по умолчанию будет выполнена в контексте всё того же объекта Lobby . Если необходимо выполнить загружаемую программу в контексте какого-либо другого объекта, то имя этого объекта указывается перед вызовом метода doFile() , а в терминах языка Io - объекту передаётся сообщение:

myMainObject doFile("my_first_prog.io")

Синтаксис языка Io

Первое, что обращает на себя внимание при ознакомлении с синтаксисом языка Io, - это отсутствие зарезервированных ключевых слов и операторов, знакомых по другим языкам. Исходный код любой программы записывается исключительно с помощью выражений, составляемых из сообщений, каждое из которых представляет собой объект, доступный (и изменяемый) в любой момент выполнения программы.

Для большей ясности можно воспользоваться нестрогой нотацией формы Бэкуса-Наура (в кавычках записаны литералы), приведенной в листинге 3.

Листинг 3. Нотация языка Io
выражение::= { сообщение | терминатор } терминатор::= "\n" | ";" сообщение::= символ [ аргументы ] символ::= идентификатор | число | строка аргументы::= "(" [выражение [ { "," выражение } ] ] ")"

В языке Io поддерживаются три наиболее широко используемых формата комментариев: //, /* */ и # . Способы их практического применения очевидны.

Сообщение может включать список аргументов, которые передаются, как обычные выражения, и вычисляются объектом, принимающим сообщение.

Листинге 4. Использование сообщения для организации цикла
Io> for(i, 1, 5, i println) 1 2 3 4 5 ==> 5 Io>

В список аргументов можно включать и условные выражения, как показано в листинге 5.

Листинг 5. Использование условных выражений в сообщении
Io> beta:= 7 ==> 7 Io> alpha:= if(beta > 5, beta, 5) ==> 7 Io>

Следует ещё раз обратить внимание на то, что в первом случае литерал for и во втором случае литерал if не являются специальными формами или зарезервированными ключевыми словами, а представляют собой просто сообщения.

Операторы, доступные в языке Io

Оператор – это сообщение, в имени которого отсутствуют алфавитно-цифровые символы (за исключением знаков препинания и символа подчёркивания). К операторам также относятся литералы: and, or, return . Пример использования оператора:

1 + 2

В соответствии с концепцией языка Io это выражение компилируется в сообщение:

1 +(2)

То есть, числовому значению 1 передаётся сообщение "+ " с аргументом 2 .

В сложных выражениях приоритет стандартных арифметических операторов соответствует приоритету аналогичных арифметических операторов языка C.

Операторы, определённые пользователем, выполняются слева направо.

В языке Io существуют три оператора присваивания:

  • ::= создаёт слот, создаёт set-метод для этого слота и присваивает слоту значение;
  • := создаёт слот и присваивает ему значение;
  • = если слот существует, то ему присваивается значение, в противном случае генерируется исключение.

Операторы присваивания при компиляции преобразовываются в соответствующие сообщения, как показано ниже:

beta::= 7 компилируется в newSlot("beta", 7) beta:= 7 компилируется в setSlot("beta", 7) beta = 7 компилируется в updateSlot("beta", 7)

Методы перечисленных выше сообщений можно переопределять (то есть заменять на свои методы). В частности, для локальных объектов методы updateSlot() переписываются таким образом, чтобы не возникало исключений в случаях присваивания значений слотам этих локальных объектов, указанных в явной форме.

Работа со строками

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

string:= "В Io отсутствует понятие \"ключевое слово\", как таковое."

В строке могут быть записаны стандартные Esc-символы (\n, \t, \a и т.д.):

string:= "Это первая строка.\nЭто вторая строка.\nЭто третья строка."

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

longstring:= """Язык Io основан на концепции "всё есть объект". Исходный код - выражения, состоящие из сообщений. Операторы тоже являются сообщениями."""

Числовые значения

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

Листинг 6. Числовые форматы, поддерживаемые в языке Io
Io> 12 + 18 ==> 30 Io> 3.14 * 2 ==> 6.2800000000000002 Io> .987 + 11.003 ==> 11.9900000000000002 Io> 2e4 - 2e3 ==> 18000 Io> 1.655e-3 - 5.112e-4 ==> 0.0011438 Io> 0xFF + 0x3 ==> 258 Io> 0XE - 0xa ==> 4 Io>

Арифметические выражения вычисляются по традиционной методике, несмотря на то, что операторы, обозначающие арифметические действия, внутри интерпретатора преобразовываются в вызовы соответствующих методов (этот механизм скрыт от пользователя):

Io> (9+5)*10-(2+3)*5 ==> 115

Для передачи результата вычислений в какой-либо объект используется метод doString() , как показано в листинге 7.

Листинг 7. Использование метода doString()
Io> myNewObject:= Object clone ==> Object_0x99336f0: Io> myNewObject doString("(18+25)*33") ==> 1419 Io>

Если перед вызовом метода doString() не указывается имя объекта, то вычисление и вывод результата выполняется в текущем контексте.

Пример Io-программы

В большинстве случаев лучше понять особенности синтаксиса языка программирования помогает исходный код программы, не очень большой по размеру и без излишних сложностей в логике. Упрощённая имитация операций с личным банковским счётом вполне подходит для первого опыта. Исходный код приведён в листинге 8.

Листинг 8. Операции с личным счётом
Account:= Object clone Account balance:= 0 Account deposit:= method(amount, balance = balance + amount) Account withdraw:= method(amount, balance = balance - 1.005 * amount) account:= Account clone account deposit(5000.00) account withdraw(250.00) account balance println Io> doFile("my_acc.io") 4748.75 ==> 4748.75 Io>

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

Управляющие конструкции

Для обеспечения работы логических управляющих конструкций в языке Io определены специальные синглтоны (singleton) true (истина) и false (ложь), а также особый синглтон nil , обозначающий неопределённое значение ("отсутствие значения").
Операции логического сравнения выполняются с помощью методов: ==!=><>=<= , которые возвращают true или false . Кроме того, существует метод compare() , возвращающий значения -1 (меньше), 0 (равно) или 1 (больше) и применяемый для реализации специализированных методов сравнения значений.

Метод if() используется в следующей форме:

if(<условие>, [, else ]) if(denominator == 0, "Error" println)

Здесь необязательная часть else опущена. Условное выражение считается истинным, если его результатом является true , а если условное выражение даёт результат false или nil , то оно ложно.

Метод if() возвращает в качестве значения сообщение, вычисленное по результату проверки, поэтому выражения, представленные ниже, являются эквивалентными:

if(sum < 100, x:= sum, x:= 100) x:= if(sum < 100, sum, 100)

Условные выражения можно также записывать в более развёрнутой форме:

if(sum < 100) then(x:= sum) else(x:= 100)

Кроме того, поддерживается метод для вложения условных выражений elseif() :

if(sum < 10) then(x:= 0) elseif(sum < 10) then(x:= 1) else (x:= sum)

Также поддерживаются методы в стиле языка Smalltalk: ifTrue() , ifFalse() , ifNil() и ifNonNil() , позволяющие записывать выражения в форме:

(sum < 100) ifTrue(x:= sum) ifFalse(x:= 100)

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

Циклы

Самый простой тип цикла - безусловный бесконечный цикл, реализуемый с помощью метода loop() :

loop("infinite loop" println)

Если цикл должен быть повторён строго определённое количество раз без проверки каких-либо условий, то применяется метод repeat() , как показано в листинге 9.

Листинг 9. Использование метода repeat()
Io> 3 repeat("Warning!" println) Warning! Warning! Warning! ==> Warning! Io>

Цикл, точное количество повторений которого заранее неизвестно, но задано определённое условие, при котором итерации должны выполняться, записывается с помощью метода while() :

while(<условное_выражение>, <сообщение>)

Особенностью этого цикла является то, что при необходимости записи в теле цикла более одного сообщения следует отделять эти сообщения друг от друга символом перехода на новую строку, а не запятой, иначе цикл будет выполняться некорректно. Кроме того, целесообразно оставить условное выражение в первой строке, а каждое сообщение в теле цикла записывать на отдельной строке. Такая форма, приведенная в листинге 10, будет выглядеть более привычно.

Листинг 10. Пример организации цикла while
Io> a:= 10 ==> 10 Io> while(a < 20,)-> a println)-> a = a + 2)->) 10 12 14 16 18 ==> 20 Io>

Метод for() позволяет организовать цикл с определёнными граничными значениями и с заданным шагом счётчика. Общая форма записи этого цикла выглядит так:

for(<счётчик>, <начальное_значение>, <конечное_значение>, [<шаг>,] <сообщение>).

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

Листинг 11. Пример организации цикла for
//в этом цикле шаг изменения счетчика не указан Io> for(i, 0, 3, i println) 0 1 2 3 ==> 3 //в данном цикле указан шаг изменения счетчика Io> for(i, 0, 10, 3, i println) 0 3 6 9 ==> 9 Io>

В теле любого из выше перечисленных циклов можно использовать методы изменения порядка выполнения: continue позволяет игнорировать оставшуюся часть тела цикла и начать новую итерацию, а break немедленно завершает выполнение всего цикла.

Листинг 12. Управление порядком выполнения цикла
Io> for(i, 1, 10,)-> if(i == 2, continue))-> if(i > 7, break))-> i print)->) 134567==> nil Io>

Следует отметить, что при нестандартном завершении цикла (с помощью метода break ) возвращаемое значение считается неопределённым (обозначается, как nil ).

Метод return позволяет осуществить выход из любой части блока кода или тела метода с требуемым возвращаемым значением, например:

Листинг 13. Использование метода return для возврата значения из метода
Io> test:= method("first" println; "second" println; return "exit"; "third" println) ==> method("first" println; "second" println; return "exit"; "third" println) Io> test first second ==> exit Io>

В языке Io реализован также цикл foreach , но его практическое применение несколько отличается от применения традиционных циклов, поэтому этот цикл будет рассматриваться в следующих статьях.

Заключение

Язык Io представляет собой чистый объектный язык, то есть реализацию концепции "всё есть объект". Его синтаксис прост и ясен, хотя на первый взгляд и может показаться непривычным. В Io реализованы все считающиеся де-факто стандартными конструкции и операторы.

В первой статье цикла были описаны общие характеристики и синтаксис языка программирования Io. Во второй статье будет рассматриваться объектная система языка, а в третьей статье - дополнительные средства и возможности Io.