1 | 2 | 3 | 4

Ruby за двадцять хвилин

Як сказати “Hello” багато разів, не втомлюючи пальці? Потрібно визначити метод!

irb(main):010:0> def hi
irb(main):011:1> puts "Hello World!"
irb(main):012:1> end
=> :hi

Код def hi починає визначення методу. Він повідомляє Ruby, що ми визначаємо метод і що його назва — hi. Наступний рядок — це тіло методу, той самий рядок, який ми бачили раніше: puts "Hello World". Нарешті, останній рядок end повідомляє Ruby, що ми завершили визначення методу. Відповідь Ruby => :hi говорить, що він зрозумів завершення. Ця відповідь могла б бути => nil для Ruby 2.0 і попередніх версій. Але це тут неважливо, тож продовжимо.

Коротке, повторюване життя методу

Тепер спробуймо викликати цей метод кілька разів:

irb(main):013:0> hi
Hello World!
=> nil
irb(main):014:0> hi()
Hello World!
=> nil

Що ж, це було просто. Викликати метод у Ruby так само легко, як просто згадати його ім’я. Якщо метод не приймає параметрів — це все, що потрібно. Можна додати порожні дужки, якщо хочете, але вони не обов’язкові.

А що, якщо ми хочемо привітатися з однією людиною, а не з усім світом? Просто перевизначте hi, щоб він приймав ім’я як параметр.

irb(main):015:0> def hi(name)
irb(main):016:1> puts "Hello #{name}!"
irb(main):017:1> end
=> :hi
irb(main):018:0> hi("Matz")
Hello Matz!
=> nil

Отже, працює… але давайте на хвилину розберемося, що тут відбувається.

Підстановки у рядку

Що означає #{name}? Це спосіб Ruby вставити щось у рядок. Те, що між фігурними дужками, перетворюється на рядок (якщо ще не є ним), а потім підставляється у зовнішній рядок у цьому місці. Ви також можете використати це, щоб правильно капіталізувати ім’я:

irb(main):019:0> def hi(name = "World")
irb(main):020:1> puts "Hello #{name.capitalize}!"
irb(main):021:1> end
=> :hi
irb(main):022:0> hi "chris"
Hello Chris!
=> nil
irb(main):023:0> hi
Hello World!
=> nil

Тут ще дві хитрощі. Перша — ми знову викликаємо метод без дужок. Якщо очевидно, що ви робите, дужки необов’язкові. Друга — параметр за замовчуванням World. Це означає: “Якщо ім’я не передано, використовуй значення за замовчуванням "World"”.

Перетворення на привітальника

А що, якщо ми хочемо справжнього привітальника, який пам’ятатиме ваше ім’я, вітатиме вас і завжди ставитиметься з повагою? Для цього можна використати об’єкт. Створімо клас “Greeter”.

irb(main):024:0> class Greeter
irb(main):025:1>   def initialize(name = "World")
irb(main):026:2>     @name = name
irb(main):027:2>   end
irb(main):028:1>   def say_hi
irb(main):029:2>     puts "Hi #{@name}!"
irb(main):030:2>   end
irb(main):031:1>   def say_bye
irb(main):032:2>     puts "Bye #{@name}, come back soon."
irb(main):033:2>   end
irb(main):034:1> end
=> :say_bye

Нове ключове слово тут — class. Воно визначає новий клас Greeter і набір методів для цього класу. Зверніть увагу на @name. Це змінна екземпляра, доступна для всіх методів класу. Як бачите, її використовують say_hi і say_bye.

Тож як запустити цей клас Greeter? Створімо об’єкт.