1 | 2 | 3 | 4

Ruby за двадцать минут

Что если мы хотим сказать “Hello” без утомления наших пальцев? Мы должны создать метод!

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

Код def h означает начало объявление метода. Он говорит Ruby, что мы определяем метод, имя которого h. Следующая строка – тело метода, та же строка, что мы видели раньше: puts "Hello World". И, наконец, последняя строка, end, говорит Ruby, что мы завершили объявление метода. Ответ от Ruby, => nil, говорит нам, что он понял, что мы завершили объявление метода.

Кратко о повторяющихся жизнях метода

Теперь давайте попробуем вызвать метод несколько раз:

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

Ну, это было просто. Вызвать метод в Ruby так же просто, как просто упомянуть его имя в коде. Если метод не принимает параметры – это все что вам нужно сделать. Вы можете добавить пустые скобки, если вам так нравится, но это не обязательно.

Что если мы хотим сказать hello одному человеку, а не всему миру? Просто переопределим метод h, чтобы он принимал имя как параметр.

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

Итак, это работает… но давайте на секунду задумаемся, что здесь происходит.

Места для интерполяции в String

Что такое #{name} в коде выше? Это способ Ruby вставить что-либо в строку. Кусок кода между фигурными скобками превратится в строку (если это еще не строка) и потом подставится во внешнюю строку в этом месте. Вы также можете использовать это, чтобы убедиться, что имя будет с большой буквы:

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

Вы должны здесь отметить несколько других приемов. Один из них, что мы опять вызываем метод без скобок. Если очевидно то, что вы хотите сделать – скобки не обязательны. Другой прием – это параметр по умолчанию World. Это означает что, “Если имя не передано в качестве параметра, используй параметр по умолчанию World”.

Эволюционируем в Greeter (Приветствующего)

Что если мы хотим создать реального приветствующего, того кто запомнит ваше имя и поприветствует вас и всегда будет относиться к вам с уважением? Вы можете использовать для этого объект. Давайте создадим класс “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
=> nil

Новое ключевое слово здесь - class. Оно служит для объявления нового класса, который мы назвали Greeter и несколько методов для этого класса. Также заметьте @name. Это переменная объекта и она доступна для всех методов в классе. Как вы можете видеть, она используется методами say_hi и say_bye.

Итак, как мы сможем заставить этот класс Greeter работать? Создадим объект.