[an error occurred while processing this directive]
[an error occurred while processing this directive]


One Language - All PlatformsTM

 

REBOL in Ten Steps

Данный документ представляет краткое описание языка REBOL. Для ознакомления с базовыми принципами языка вам потребуется всего несколько минут. Более детальную информацию можно найти в REBOL User's Guide.

 

1. Значения

Значения - это данные с которыми может работать REBOL. Различные типы данных могут быть записаны непосредственно средствами языка REBOL. Вы уже знакомы с большинством из них. Вот несколько примеров:

Числа:
1234 -432 3.1415 1.23E12
0,01 1,2E12 (НЕ-Британский формат)
Время:
12:34 20:05:32 0:25.34
Дата:
20-Apr-1998 20/Apr/1998 (US формат)
20-4-1998 1998-4-20 (интернациональный формат)
1980-4-20/12:32 (дата и время)
1998-3-20/8:32-8:00 (с часовым поясом)
Деньги:
$12.34 USD$12.34 CAD$123.45 DEM$1234,56
Кортеж:
3.1.5 (Номер версии)
255.255.0 (код цвета)
199.4.80.7 (
IP адрес)
Строки:
"Пример строки"
{Пример строки, содержащей
кавычки или записанной в
несколько линий}
Тэги:
<title> </body>
<font size="2" color="blue">
Email-адрес:
info@rebol.com
pres-bill@oval.whitehouse.gov
URLs:
http://www.rebol.com (web сайт)
ftp://ftp.rebol.com/sendmail.r (передача файла)
mailto:info@rebol.com (электронная почта)
Файлы:
%DAta.txt
%images/photo.jpg
%../scripts/*.r
Номер:
#707-467-8000 (номер телефона)
#0000-1234-5678-9999 (номер кредитной карточки)
#MFG-932-741-A (номер модели)
Число в указанной системе счисления:
#{0A6B14728C4DBEF5} (шестнадцатеричное число)
64#{45kLKJOIU8439LKJklj}
(число в сист. счисл. с основанием 64)

Там где это возможно, 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 &COPY; 1999 REBOL Technologies. All Rights Reserved. REBOL and The Internet Messaging Language are trademarks of REBOL Technologies.
Contact us at
info@rebol.com Web problems: webmaster@rebol.com Translation by ETF: etf@aip.mk.ua


[an error occurred while processing this directive]


[an error occurred while processing this directive]