Что если мы хотим сказать “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 так же просто, как просто упомянуть его имя в коде. Если метод не принимает параметры – это все что вам нужно сделать. Вы можете добавить пустые скобки, если вам так нравится, но это не обязательно.
Что если мы хотим сказать hello одному человеку, а не всему миру?
Просто переопределим метод 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Итак, это работает… но давайте на секунду задумаемся, что здесь происходит.
Места для интерполяции в String
Что такое #{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 (Приветствующего)
Что если мы хотим создать реального приветствующего, того кто запомнит ваше имя и поприветствует вас и всегда будет относиться к вам с уважением? Вы можете использовать для этого объект. Давайте создадим класс “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 работать? Создадим объект.