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? Створімо об’єкт.