|
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. |