Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Ruby - Примеры14 мая 2011Оглавление: 1. Ruby 2. Хронология выхода версий 3. Философия 4. Семантика 5. Возможности Ruby 6. Примеры 7. Реализация 8. Поддержка IDE 9. Библиотеки В Ruby есть немало оригинальных решений, редко или вообще не встречающихся в распространённых языках программирования. Можно добавлять методы не только в любые классы, но и в любые объекты. Например, вы можете добавить к некоторой строке произвольный метод.
# всё от символа # и до конца строки - комментарий
# = является оператором присваивания,
# символы в «"» - строка, которой можно манипулировать средствами языка
str = "Привет" # здесь создаётся переменная str, типа String
# def - ключевое слово для объявления функции
def str.bye # str. указывает, кому принадлежит метод
# bye - имя метода, за ним может следовать необязательный, заключённый в
# круглые скобки список параметров функции
"Пока!" # из метода возвращается последнее вычисленное значение
end # ключевым словом end заканчиваются практически все инструкции Ruby
# puts - метод,
# str.bye - обращение к методу bye объекта str
# значение, полученное из метода bye передаётся методу puts
# который выводит на экран информацию
puts str.bye #=> Пока!
Этот пример также демонстрирует, как в Ruby можно использовать синглтон. В этом примере синглтоном является объект Любая конструкция в Ruby возвращает значение. Например:
# конструкция if вычисляет выражение после него, и, если оно истинно,
# возвращает результат выражения между then и else, иначе между else и end
puts #=> Одно
# происходит присваивание значения переменной var, и операция присваивания
# возвращает значение переменной var, которая выводится на экран
puts #=> 5
КонтейнерыРабота с массивами — одна из сильных сторон Ruby. Они автоматически изменяют размер, могут содержать любые элементы, и язык предоставляет мощные средства для их обработки.
# создаём массив
a = * 3]
# =>]
# обращение по индексу
a # => 3.14
# «разворачиваем» все внутренние массивы, удаляем одинаковые элементы
a.flatten.uniq # =>
# пытаемся найти индекс элемента со значением 4
a.index # => nil
# предыдущая попытка найти элемент неудачна - все предыдущие функции
# возвращают копии, но Ruby почти для всех функций предоставляется
# аналог с тем же названием, но заканчивающийся на «!»,
# который модифицирует контейнер
a.flatten! # =>
a.index # => 5
Процедурные объекты и итераторыВ языке есть 2 эквивалентных способа записи блоков кода:
{ puts "Hello, World!" }
do puts "Hello, World!" end
Сопрограммы применяются с большинством встроенных методов:
File.open {|file| # открытие файла «file.txt» для записи
file.puts 'Wrote some text.'
} # Конструкция устраняет неопределённость с закрытием файла: закрывается здесь при любом исходе
Следующий пример показывает использование сопрограмм и итераторов для работы с массивами, который показывает краткость записи на Ruby многих достаточно сложных действий:
# для работы требуется ruby 1.9
.collect{|v| v ** 2 }.select{ rand.zero? }.map.with_index {|*v| v }
Классы, примеси, методы, перегрузка операторовСледующий пример определяет класс с именем
class Person # объявление класса начинается с ключевого слова class, за которым
# следует имя
include Comparable # подмешивается к классу
# и добавляет методы <, <=, ==, >=, > и between?
# с использованием нижеопределённого
# в классе <=>
#
@@count_obj = 0 # переменная класса для подсчёта числа созданных объектов
#
# конструктор для создания объектов с помощью new
def initialize # name, age - параметры метода
# название переменных объекта начинается с @
@name, @age = name, age # создаём объекты и увеличиваем счётчик на 1
@@count_obj += 1
end
def <=> # переопределение оператора <=>
#
@age <=> person.age # из метода возвращается последнее вычисленное выражение,
end
def to_s # для форматированного вывода информации puts
"#{@name}" # конструкция #{x} в 2-х кавычках замещается в Ruby значением x
end
def inspect # похож на to_s, но используется для диагностического вывода
"<#{@@count_obj}:#{to_s}>"
end
# пример метапрограммирования: добавляет методы для доступа к
# переменным объекта
attr_reader :name, :age
end
# создаём массив объектов
group = [ Person.new,
Person.new,
Person.new ]
# =>
# здесь при работе с irb автоматически вызывается метод inspect
# вызываем методы массива сортировка и разворачивание его в обратном порядке
puts group.sort.reverse # Печатает:
# Markus
# John
# Ash
# обращаемся к функции, которая была добавлена
# автоматически при включении Comparable
group.between? # => true
ИсключенияИсключения возбуждаются с помощью конструкции raise ArgumentError, "Неверный аргумент", caller # caller - метод, возвращающий текущий стек выполнения Обрабатываются исключения с использованием конструкции begin # ... rescue RuntimeError => e # обрабатываем конкретный тип ошибок puts e # напечатаем сообщение об ошибке rescue # можно писать rescue => e чтобы получить объект исключения # обрабатываем все исключения else # сработает, если исключений не было ensure # сработает в любом случае end Просмотров: 10901
|