Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ООАП.doc
Скачиваний:
9
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Арифметические Операторы:

Умножение c * d

Деление c / d

Остаток c % d

Сложение c + d

Вычитание c - d

Операторы Сравнения:

Меньше чем c < d

Больше чем c > d

Меньше или равно c < =d

Больше или равно c > = d

Равно c == d

Не равно c != d

Побитовое И c and d

Побитовое ИЛИ c or d

Логическое И c && d

Логическое ИЛИ c || d

Оператор выбора (условный оператор)

if...else

if conditional [then]

code...

[elsif conditional [then]

code...]...

[else

code...]

end

Циклы

while

while conditional [do]

code…

end

for

for variable [, variable ...] in expression [do]

code

end

until

until conditional [do]

code

end

Зарезервированные слова

BEGIN

END

alias

and

begin

break

case

class

def

defined?

do

else

elsif

end

ensure

false

for

if

in

module

next

nil

not

or

redo

rescue

retry-

return

self

super

then

true

undef

unless

until

when

while

yiel

В Ruby есть немало оригинальных решений, редко или вообще не встречающихся в распространённых языках программирования. Можно добавлять методы не только в любые классы, но и в любые объекты. Например, вы можете добавить к некоторой строке произвольный метод.

# всё: от символа # и до конца строки — комментарий

# = является оператором присваивания,

# символы в «"» - строка, которой можно манипулировать средствами языка

str = "Привет" # здесь создаётся переменная str, типа String

# def - ключевое слово для объявления функции

def str.bye # str. указывает, кому принадлежит метод (по умолчанию Object)

# bye - имя метода, за ним может следовать необязательный, заключённый в

# круглые скобки список параметров функции

"Пока!" # из метода возвращается последнее вычисленное значение (здесь - строка)

end # ключевым словом end заканчиваются практически все инструкции Ruby

# puts - метод,

# str.bye - обращение к методу bye объекта str

# значение, полученное из метода bye передаётся методу puts

# который выводит на экран информацию

puts str.bye #=> Пока!

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

Любая конструкция в Ruby возвращает значение. Например:

# конструкция if вычисляет выражение после него, и, если оно истинно,

# возвращает результат выражения между then и else, иначе между else и end

puts( if 5 > 3 then "Одно" else "Другое" end ) #=> Одно

# происходит присваивание значения переменной var, и операция присваивания

# возвращает значение переменной var, которая выводится на экран

puts( var = 5 ) #=> 5

Объектно-ориентированное программирование

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

Переменные Ruby содержат не сами объекты, а ссылки на них. Присваивание — это не передача значения, а копирование ссылки на объект. Для программиста, привычного к распространённым гибридным языкам программирования, некоторые эффекты такого решения могут показаться неожиданными. Например:

a = "abcdefg" => "abcdefg"

b = a => "abcdefg"

b => "abcdefg"

a[3] = 'R' => "R"

b => "abcRefg"

то есть при изменении значения переменной a неявно изменилось и значение b, так как они содержат ссылку на один объект. С другой стороны, это более логично, чем ситуация, когда для переменных разных типов присваивание действует по-разному (как, например, в Object Pascal).

Ruby не поддерживает множественное наследование, но вместо него есть мощный механизм примесей. Все классы (напрямую или через другие классы) выведены из класса Object, следовательно, любой объект может использовать определённые в нем методы (например, class, to_s, nil?). Процедурный стиль также поддерживается, но все глобальные процедуры неявно являются закрытыми методами класса Object.

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