Как да направим така, че да изписваме “Hello World” когато си поискаме, без да пишем низа всеки път ? Трябва да дефинираме метод !
irb(main):010:0> def h
irb(main):011:1> puts "Hello World!"
irb(main):012:1> end
=> nil
Кодът започва с израза def
, което обозначава началото на метода. Това
указва на Ruby, че искаме да дефинираме метод с име h
. Следващият ред
е тялото на метода, като то съдържа кода, който видяхме в Част 1: puts
"Hello World"
. Дефинирането на метода приключва с ключовата дума end
.
Използване на метод
Нека извикаме метода няколко пъти:
irb(main):013:0> h
Hello World!
=> nil
irb(main):014:0> h()
Hello World!
=> nil
Извикването на метод е толкова лесно, колкото самото изписване на името му. Ако методът не приема параметри, може да пропуснем скобите.
Изниква въпросът: как да кажем ‘Hello” на определен човек, а не на целия свят ? Просто трябва да дефинираме метода да приема параметър:
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
Чудесно, работи. Но нека видим как точно.
Изпълнение на код в низ
Изразът #{name}@ представлява начин за вмъкване на променлива/метод в
низ. Можем също така да приложим методът към нашата променлива name
:
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
Нещата, които тук се забелязват са употребата на методът с и без параметър. Ако извикаме методът с параметър, който сме въвели, стойността по подразбиране ще бъде пренебрегната.
Еволюиране в “Посрещач”
Ако искаме да сме наистина учтиви, да помним името на “госта” и да го поздравяваме и отнасяме с уважение към него, може да използваме обект. Нека напишем клас “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
.
Продължаваме с Част 3, където може да видим класът в действие и създаването на обект