Мое знакомство с Ruby

16.12.2012 at 18:16

13 декабря в МВЕУ прошла очередная встреча IzhDevCom, посвященная языку Ruby. Докладчик – Руслан Гатиятов из казанской компании DroidLabs.

1 часть доклада была посвящена языку Ruby. Эта часть мне понравилась больше всего. Ruby предоставляет очень широкие возможности для сокращения количества кода, но вместе с тем и огромное количество способов ”выстрелить себе в ногу”. Вот некоторые особенности языка, показавшиеся мне наиболее любопытными:
Возможность доопределить метод классу:

# Класс кошки.
class Cat
  # Мяукнуть.
  def Meow()
    p "Meow-Meow"
  end
end

# Создаем новый экземпляр кошки и мяукаем.
cat = Cat.new()
cat.Meow()

# Доопределяем кошке метод "заснуть".
class Cat
  def Sleep()
    p "Z-z-z-z-z-z"
  end
end

# Вызываем метод у экземпляра, созданного до изменения класса.
cat.Sleep()

Возможность обработать вызов несуществующего метода:

# Враппер кошки. Конструктор принимает в параметрах кошку.
# Враппер пытается делегировать все вызовы внутреннему объекту.
class CatWrapper
  attr_reader :cat
  def initialize(cat)
    @cat = cat
  end

  # Этот метод будет вызван, если у объекта
  # попытаются вызвать метод, которого у него нет.
  def method_missing(method_name, *args)
    # Если такой метод есть у внутреннего объекта,
    if @cat.respond_to?(method_name)
      # Вызываем этот метод у внутреннего объекта.
      @cat.send(method_name, *args)
    else
      super
    end
  end
end

# Создаем враппер и вызываем
# метод внутреннего объекта сначала у внутреннего объекта,
# потом у самого враппера - результат одинаковый.
catWrapper = CatWrapper.new(cat)
catWrapper.cat.Meow()
catWrapper.Meow()

2 и 3 части доклада были посвящены фреймворку Ruby on Rails и архитектуре веб приложений, создаваемых на его основе. Так как я не веб разработчик, эта часть меня мало заинтересовала. Хотя, конечно, понравилась возможность создавать базовый функционал веб приложения без написания кода.

Мне очень нравятся встречи IzhDevCom, проводимые в этом году. Вместо двух коротких докладов теперь один, но больше и интереснее. Да и количество слушателей потихоньку растет. Надеюсь, в следующем году орги смогут сохранить качество докладов.