Io Language: Синтаксис
- Длина строки не должна превышать 80 символов (Привет, text mode!)
- Между клонированием объекта и описанием тела нового должна быть пустая строка
- Методы и свойства группируются
- Без лишней необходимости скобки на новую строку не переносятся
Синтаксис Io
В Io не существует понятия «ключевое слово», любой текст на Io — выражение состоящее из имен объектов и сообщений. Таким образом у нас нет никаких «function, def, defun, define» и прочего синтаксического мусора. Объект в Io представляет собой базовый контейнер состоящий из слотов, слот — единица хранения объектом чего-либо. Ну натурально так — слот. Вот отсюда и будем плясать. В Io существует три различных по значению операции "присваивания":- = (Обновить слот, компилируется в сообщение updateSlot, если слот куда-то делся или никогда не существовал сгенерируется исключение)
- := (Установить слот, компилируется в setSlot, создает новый слот, присваивает значение)
- ::= (Создать слот, компилируется в newSlot, создает слот, создает сеттер, устанавливает значение)
Lenin speak split reverse foreach(println)Общие правила передачи сообщений просты как три копейки: Object message. Все. Обработчик на каждое сообщение лежит в своем собственном слоте, если так можно выразиться, имя слота это образец который срабатывает при передаче определенного сообщения объекту держателю слота. Создавать слоты так же просто, как и передавать сообщения.
SomeObject someSlot := "Пройдемте в нумера?"Тут мы создаем слот someSlot объекта someObject, содержащий в себе строковое значение. (В это месте я впервые за время написания статьи почувствал себя в роли Капитана Очевидность, хехе) Таким образом можно создавать свойства объектов. Методы объектов создаются так:
SomeObject someMethod := method(SomeObject someSlot print)Причем важно заметить, что method это не ключевое слово, а стандартный метод объекта Object (А значит его тоже можно, ага...) Метод method (мой мозг...) возвращает анонимную функцию, которую можно использовать хоть прямо так, хоть присвоить ей имя и получить метод класса. Кроме метода method (ааа!!1) существует метод block, разница между ними только в том, что block лексически ограничен рамками объекта из которого вызывается. (Про систему сообщений я напишу отдельный пост, она тут нетривиальна и мегакрута). А вот теперь начинаются странные штуки.
Делаем особую магию
Основная форма методов method и block такова:method(arg1, arg2, ... ,argN, do message)То есть определение функции сложения двух чисел будет выглядеть так:
add := method(a, b, a + b)Как видно, никакого принудительного возвращения результата тут не наблюдается. Возвращается результат вычисления do message, как в lisp'е, erlang'е и вообще почти во всех языках с мощной поддержкой функциональной парадигмы. Хотя, справедливости ради, нужно заметить, что return в Io есть и работает как обычный, нормальный return. Для удобства записи обычно do-часть переносят на следующую строку, вот типа так:
add := method(a, b, a + b )То есть можно воспринимать круглые скобки как операторные, что б лишний раз не травмировать психику, хотя это не так.
Условные конструкции
Форма такая:if(condition, true-expression, else-expression)Также Io унаследовал от папы-Smalltalk'а методы ifTrue, ifFalse, etc. Можно записывать if в более привычной форме:
if(condition) then(exp) else(exp)Но обычно не нужно (:
Операторы
Операторы в Io стандартнее некуда, никакой тебе префиксной нотации польского калькулятора, все до тошноты обыкновенно:1 + 2 1 +(2) 1 +(2 * 4) etc...
Строки
В Io строки больше всего похожи на строки (Капитан очевидность, на помощь!):s := "Ленин был грибом.\nИ радиоволной."Длинные строки и строки с неэкранированными символами можно впихнуть в тройные кавычки:
s := """Дело в том, что находясь в одном из главных храмов мексиканских, я долго рассматривал фрески и обнаружил, что большинство фресок посвящены какому-то событию истории Мексики, и которое до боли напомнило мне нашу Октябрьскую революцию. Те же самые изможденные люди, вооруженные примитивными орудиями труда, которые свергают какие-то правительства - это все очень похоже, понимаете?"""Экраном служит привычный большинству «бэкслэш» «\». Непечатные символы унаследованы из Си «\n,\t,…».
Комментарии
Io поддерживает три формы комментариев: C style:/* Никогда не компилируй это! BadObject terribleMethod := method( someAwfulLogic ) */C++ style inline:
// OMFG!И Unix style inline:
# Old # SchoolПоследние в основном используются для изготовления «шебангов» (#!/usr/bin/io).
Вот, собственно, весь синтаксис Io, мало какой язык может похвастаться тем, что его описание синтаксиса влезает в одну статью. Дальше по плану статья про объектную модель Io.
Stay turned (-;
(Из моего блога)



комментарии (17)