Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - 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 Просмотров: 9819
|