One Language - All PlatformsTM |
|
REBOL in Ten StepsДанный документ представляет краткое описание языка REBOL. Для ознакомления с базовыми принципами языка вам потребуется всего несколько минут. Более детальную информацию можно найти в REBOL User's Guide.
1. ЗначенияЗначения - это данные с которыми может работать REBOL. Различные типы данных могут быть записаны непосредственно средствами языка REBOL. Вы уже знакомы с большинством из них. Вот несколько примеров: Числа: Время: Дата: Деньги: Кортеж: Строки: Тэги: Email-адрес: URLs: Файлы: Номер: Число в указанной системе счисления: Там где это возможно, REBOL позволяет использовать интернациональную форму записи, такую как запись десятичного числа, денег и даты. Дополнительную информацию о типах данных можно найти в User's Guide. 2. СловаСлова - это символы языка REBOL. Они используются для обозначения чего-либо непосредственно или косвенно в качестве переменной (подробней смотрите далее). Вы пишите слова аналогично тому как это делается в обычном языке: Show next picture Carl Cindy Brenda Joe Dan Install all files here country state city street zipcode on off true false one none Дефис и некоторые другие специальные символы могут использоваться как часть слова. number? time? date! image-files connection-times file-size ++ -- == +- ***** *new-line* left&right Конец слова обозначается пробелом, концом строки или одним из следующих символов: [ ] ( ) { } " : ; / Кроме того, эти символы нельзя использовать внутри слова: / @ # $ % ^ , Дополнительную информацию о словах можно найти в User's Guide.
3. БлокиЗначения и слова группируются вместе, образуя блоки. Начало и конец блока обозначаются символами '[' и ']' соответственно. Слова и значения в блоке могут располагаться в произвольном порядке и занимать несколько строк. REBOL предоставляет свободный формат внутри блока для создания баз данных, каталогов, таблиц, множеств, наборов, кодов, функций, и др. [white red green blue yellow orange black] ["Spielberg" "Back to the Future" 1:56:20 MCA] [ "Bill" billg@ms.com #315-555-1234 "Steve" jobs@apl.com #408-555-4321 "Ted" ted@gw2.com #213-555-1010 ] [ "John" 6894 0:55:68 "Dion" 68861 0:61:35 "Floyd" 46001 0:50:12 ] Блоки используются как для представления текста программы, так и для размещения данных: if time > 10:30 [send jim news] loop 100 [print/only "*"] sites: [ http://www.rebol.com [save %reb.html data] http://www.cnn.com [print data] ftp://www.amiga.com [send cs@org.foo data] ] foreach [site action ] [ data: read site do action ] Дополнительную информацию о блоках можно найти в User's Guide. 4. ВычислениеЗначение блока может быть вычислено. Значения и слова в блоке вычисляются слева на право. Следующий пример демонстрирует как это происходит, если ввод осуществляется в командной строке REBOL. (При вводе в командную строку создается блок, даже если не указаны скобки [ ] ):. print "Hello REBOL" Hello REBOL send friend@rebol.com "Hello REBOL" color: [red green blue] pick color 3 blue loop 10 [prin "*"] ;(not a typo, see manual) ********** if today = 6-Jun-1999 [ send friend@rebol.com "Happy 40th birthday" ] loop 20 [ wait 8:00 send friend@rebol.com read http://www.cnn.com ] repeat count 3 [print ["count:" count]] count: 1 count: 2 count: 3 После вычисления блока возвращается результат в виде значения: print do [2 + 3] 5 Для управления порядком вычислений можно использовать круглые скобки: (2 + 3) * (10 - 5) 25 (length? "boat") + 2 6 Дополнительную информацию о вычислениях можно найти в User's Guide.
5. ПеременныеСлова можно использовать в качестве переменных содержащих некоторое значение. Для присвоения слову значения используется двоеточие после слова: age: 22 snack-time: 12:32 birthday: 20-Mar-1997 friends: ["John" "Paul" "George"] Если после слова не следует двоеточие, то его значение вычисляется: print age 22 if current-time > snack-time [print snack-time] 12:32 print third friends George Переменные могут содержать значения любого типа. В примере приведенном выше слова print, if, > third являются переменными, содержащими функцию. Их значения предопределены языком REBOL, но они ни чем не отличаются от других слов. Переменные имеют смысл только в контексте, в котором они определены. Контекст может включать как всю программу, так и отдельный блок, объект или функцию. Age - это локальная переменная. За пределами блока она может иметь другое значение, но оно никак не влияет на значение переменной age внутри блока. use [age] [ age: "young" print age ] Локальные переменные могут создаваться в функциях так, как это описано в следующем разделе. Дополнительную информацию о переменных можно найти в User's Guide.
6. ФункцииФункция - это блок, который имеет локальные переменные, значения которым присваиваются при каждом вычислении этого блока. Эти локальные переменные являются аргументами функции. Создать функцию можно разными способами. Вот наиболее общие: sum: func [a b] [a + b] В данном случае создается новая функция, которая связывается со словом sum.Первый блок определяет аргументы функции, а второй - то, что вычисляется при вызове функции (складывает два значения и возвращает результат). Для вызова функции: print sum 2 3 5 Когда вызывается функция sum, переменной a присваивается значение 2, а переменной b- значение 3. Результат, равный их сумме, передается в качестве аргумента для функции print. Иногда, возникает необходимость использовать локальные переменные, которые не являются аргументами функции. Для этого, вместо func необходимо использовать ключевое слово function: average: function [series] [total] [ total: 0 if zero? length? series [return 0] foreach value series [total: total + value] return total / (length? series) ] Переменная series - это аргумент функции, а total - локальная переменная, необходимая для промежуточных вычислений. Необходимо отметить, что слово return используется в двух местах программы и возвращает указанное значение в качестве результата функции. Если функция не должна возвращать результат, то необходимо использовать слово exit. Безусловно, работа с функциями требует гораздо более детального рассмотрения. Дополнительную информацию можно найти в User's Guide. 7. ПутиПути используются для уточнения. Они позволяют указывать дополнительную информацию. Вам хорошо известно об использовании путей для указания места нахождения файла или адреса в сети URL. Для разделения слов в пути используется символ (/): source/images/globe.jpg http://www.rebol.com/examples/simple.r В языке REBOL, пути также используются для обращения к блокам, функциям, объектам и строкам: USA/CA/Ukiah/size (обращение к блоку) match/any (указание опции для функции) account/balance (вызов метода для объекта) names/12 (указание позиции в строке) Следующий пример демонстрирует простоту использования путей при обращении к мини-базе данных, организованной в виде блока: areas: [ Hopland [ phone #555-1234 site http://www.hopland.ca.gov ] Ukiah [ phone #555-4321 site http://www.ukiah.com email info@ukiah.com ] ] print areas/ukiah/site http://www.ukiah.com Дополнительную информацию о блоках можно найти в User's Guide.
8. ОбъектыОбъекты - это группа переменных определенных в указанном контексте. Объекты используются для организации данных имеющих сложную структуру и поведение. В качестве примера можно рассмотреть банковский счет организованный в виде объекта со своими переменными и методами (методами называются функции, необходимые для управления переменными объекта. Хорошим стилем программирования считается, когда доступ к переменным объекта осуществляется только через его методы): account: make object! [ name: "Flintstone" balance: $100 ss-number: #1234-XX-4321 deposit: func [amount] [balance: balance + amount] withdraw: func [amount] [balance: balance - amount] ] Слова name, balance, ss-number, deposit и withdraw являются локальными переменными объекта account. Переменные deposit и withdraw содержат функции-методы, локально описанные для данного объекта. Доступ к переменным объекта осуществляется с помощью путей: print account/balance $100.00 account/deposit $300 print ["Balance for" account/name "is" account/balance] Balance for Flintstone is $400.00 Создание другого счета с новым значением баланса, но с сохранением старых значений других переменных: checking-account: make account [ balance: $2000 ] Возможно создать счет, расширенный дополнительными полями для указания названия банка и даты последнего обращения: checking-account: make account [ bank: "Savings Bank" last-active: 20-Jun-1998 ] print checking-account/balance $2000.00 print checking-account/bank Savings Bank Кроме этого объекты имеют некоторые дополнительные возможности, такие как скрытые переменные. Дополнительную информацию можно найти в User's Guide. 9. СообщенияВ языке REBOL сообщения - это просто текстовый файл, пересылаемый из одного места в другое. Форма сообщения не зависит от того кто источник или приемник - компьютер, процесс или пользователь. Сообщение начинается заголовком, который помогает определить содержание, давность и атрибуты: REBOL [ Title: "Пример заголовка" Date: 1-Sep-1998 Author: "Homer Simpson" Version: 1.0.0 Purpose: "Показать пример заголовка языка REBOL" ] Заголовок может содержать дополнительную информацию, в зависимости от назначения и важности сообщения. После заголовка следует непосредственно сообщение. Как показано в предыдущих примерах, оно может состоять из данных, программы или их совокупности. Сообщения могут быть отправлены с помощью одного из существующих протоколов Internet, таких как web, e-mail (SMTP & POP), news, и ftp. Сообщения могут быть заключены в соответствующую форму, такую как web страница или файл документации. В следующем примере REBOL вычисляет сообщение, полученное с web сайта: do http://www.rebol.com/test-msg.r Rock'n and roll'n with REBOL В этом примере REBOL отправляет сообщение с помощью email: send test@rebol.com read %short-msg.r В этом примере вычисляется каждое сообщение, отосланное на ваш почтовый ящик другим REBOL: foreach mail-msg email-port [ message: import email-template mail-msg if message/x-rebol [ remove mail-msg do message/content ] ] Функция import преобразует текст электронного письма в объект языка REBOL, для облегчения доступа к нему. Если письмо содержит строку x-rebol - значит оно отослано другим REBOL. 10. ДиалектыДиалекты - это блоки содержащие указания об употреблении другой грамматики (порядка) для слов и значений. Диалекты обычно уникальны и ориентированны на решение определенных проблем. Вы уже встречались с простыми диалектами. На пример, список аргументов функции - это диалект, содержащий множество вариаций отличных от приведенных выше. Кроме того, существуют диалекты для анализа выражений и форматирования выходной информации. Далее рассмотрим несколько примеров диалектов решающих конкретные проблемы. Первый предназначен для управления программой видео-монтажа: [queue tape to 0:36:35] [roll tape] [wait until 0:37:07] [wipe tape to image with effect 3] [key title-text] Графический интерфейс пользователя: button [200 100] style-4 [play cruse-narration] button [* 120] style-4 [start scene 27] window [260 100] text-80 [select window area] Расписание футбольных команд: [team-12 plays team-32 on saturdays at 10:00] [team-12 must drive] [team-32 can play any day] [team-17 does not play on mondays] Программа инсталляции: Delete base-dir if earlier modification date Create base-dir if not existing Install %EDitor if newer Install %crash-protect if on Win32 and is newer Install %browser but never replacing existing Switch to %threads if pre-1.2-system Возможности бесконечны. Дополнительная информация будет доступна по мере развития языка REBOL. |
Distributed Computing for the Next Century |
Copyright © 1999 REBOL Technologies.
All Rights Reserved. REBOL and The Internet Messaging Language are trademarks
of REBOL Technologies. |