Ruby: с нуля – часть 2: классы и объекты

 

ruby_logoПредыдущая часть – часть 1: синтаксис.

Создание класса

Классы в Ruby описываются при помощи ключевого слова class, например:

$ irb
irb(main):001:0> class RubyClass
irb(main):002:1> puts "This is class"
irb(main):003:1> end
This is class
=> nil

Класс всегда завершается оператором end.

Переменные в классах Ruby

  • Локальные переменные: это переменные, описанные в методе класса и недоступны вне этого метода. Локальные переменные всегда начинаются с символа подчеркивания “_“.
  • Переменные экземпляра класса: это перкменные, доступные всем методам экземпляра класса. Такие переменные начинаются с символа “@“.
  • Переменные класса: переменные, доступ к которым есть у всех экземпляров класса. Имена таких перменных начинаются с “@@“. Хороший пост на тему разницы между переменными класса и переменными экземпляра класса есть тут>>>.
  • Глобальные переменные: переменные класса недоступны напрямую другим классам. Что бы определить переменную, доступ к которой будет у всех классов – можно определить глобальную пемренную, которая начинается с символа “$“.

Создание объекта класса – метод new

Для создания нового экземпляра класса в Ruby используется встроенный метод класса new, например:

irb(main):004:0> class TestClass
irb(main):005:1>   puts "This is test class"
irb(main):006:1> end
This is test class
=> nil
irb(main):009:0> ex1 = TestClass.new
=> #<TestClass:0x007fd6d4949370>
irb(main):010:0> ex2 = TestClass.new
=> #<TestClass:0x007fd6d4951fe8>

Создание объекта класса – метод initalize

Если вам требуется создать новый экземпляр класса и передать ему какие-то аргументы – вам необходимо создать метод initalize. Он будет вызываться каждый раз, когда будет создаваться новый объект класса.

Например:

$ cat init.rb
#!/usr/bin/env ruby

class Customer
   @@no_of_customers=0
   def initialize(id, name, addr)
      @cust_id=id
      @cust_name=name
      @cust_addr=addr
   end

   def exec
      puts @cust_id, @cust_name, @cust_addr
   end
end

c = Customer.new("id", "somename", "someaddr")
c.exec

Тут объявляется специальный метод initialize, который принимает три аргумента для трех локальных переменных – @cust_id@cust_name и @cust_addr:

$ ./init.rb
id
somename
someaddr

Методы классов

Каждый метод начинается с ключевого слова def, а имена методов указываются строчными буквами.

Завершается метод ключевым словом end. Например:

class Sample
   def function
      statement 1
      statement 2
   end
end

Тут statement 1 и statement 2 являются операторами – телом метода function класса Sample.

Продолжение – часть 3: переменные, константы и литералы.