Ruby Methods
Методы Ruby очень похожи на функции любого другого языка программирования, можно сказать, если стремиться к простоте, что в других языках они так и называются - функциями. Методы Ruby используются для объединения одного или нескольких повторяемых операторов, инструкций (statement) в единый блок. Если стремиться к "красивым" академическим определениям, то Метод - зто поименованный блок параметризированного кода, связанный с одним или более объектами. В "вызове" метода указывается его имя, объект, для которого он вызывается (получатель) и ноль или более значений аргументов, которые присваиваются поименованным параметрам метода. Значением выражения вызова метода становится последнее вычесленное в методе значение. Методы не единственная имеющаяся в Ruby форма параметризированного исполняемого кода есть еще и блоки, блоки не имеющие имен и вызываемые косвенным образом через метод-итератор.
Методы определяются с помощью ключевого слова def (от define соответственно "определять"), далее следует имя метода и дополнительный список параметров, заключенный в круглые скобки. За перечнем следует ruby-код, состовляющий тело метода и окончание помеченное словом end: имена методов должны начинаться с строчной буквы. Если вы начинаете имя метода с заглавной буквы, Ruby может подумать, что это константа, и, следовательно, может неправильно проанализировать вызов. Если вы хотите, чтобы при вызове вашего метода передавались аргументы, в определение метода необходимо добавить параметры. Параметры следуют после имени метода и заключаются в круглые скобки. (При отсутствии параметров круглые скобки можно не указывать.) Каждый аргумент в вызове метода сохраняется в одном из параметров внутри метода. Тело метода состоит из одной или нескольких команд Ruby, которые выполняются при вызове метода. Методы должны быть определены перед их вызовом, иначе Ruby вызовет исключение при вызове неопределенного метода.
Синтаксис:
def method_name [( [arg [= default] ] ... [ , * arg [ , & expr ]])]
expr ..
end
Итак, вы можете определить простой метод следующим образом:
def method_name
expr ..
end
Вы можете представить метод, который принимает такие параметры:
def method_name (var1, var2)
expr ..
end
Вы можете установить значения по умолчанию для параметров, которые будут использоваться, если метод вызывается без передачи обязательных параметров:
def metod_name (var1 = value1, var2 = value2)
expr ..
end
Всякий раз, когда вы вызываете простой метод, вы пишете только имя метода следующим образом:
method_name
Однако, когда вы вызываете метод с параметрами, вы пишете имя метода вместе с параметрами, например:
method_name 25, 30
Самый важный недостаток использования методов с параметрами заключается в том, что вам нужно помнить количество параметров всякий раз, когда вы вызываете такие методы. Например, если метод принимает три параметра, а вы передаете только два, Ruby отображает ошибку.
Пример:
#!/usr/bin/ruby
def test (a1="Ruby", a2="Perl")
puts "Язык программирования #{a1}"
puts "Язык программирования #{a2}"
end
test "C" , "C ++"
test
Это даст следующий результат:
Язык программирования C
Язык программирования C ++
Язык программирования Ruby
Язык программирования Perl
Return Values from Methods (Возвращаемые значения из методов):
Каждый метод в Ruby по умолчанию возвращает значение. Это возвращаемое значение будет значением последнего оператора. Например:
def test
i = 100
j = 10
k = 0
end
Этот метод при вызове вернет последнюю объявленную переменную k.
Ruby return Statement:
Оператор(statement) return в ruby используется для возврата одного или нескольких значений из метода Ruby.
Синтаксис:
return [ expr(выражение) [`, ' expr ...]]
Если дано более двух выражений, массив, содержащий эти значения, будет возвращаемым значением. Если выражение не задано, возвращается значение nil.
Пример:
return
OR
return 12
OR
return 1 , 2 , 3
Взгляните на этот пример:
#!/usr/bin/ruby
def test
i = 100
j = 200
k = 300
return i, j, k
end
var = test
puts var
Это даст следующий результат:
100
200
300
Variable Number of Parametrs (Переменное количество параметров):
Предположим, вы объявляете метод, который принимает два параметра. Всякий раз, когда вы вызываете этот метод, вам необходимо передать вместе с ним два параметра.
Однако Ruby позволяет объявлять методы, которые работают с переменным числом параметров. Давайте рассмотрим пример этого:
#!/usr/bin/ruby
def sample (* test)
puts "Количество параметров #{test.length}"
for i in 0 ... test.length
puts "Параметры #{test [i]}"
end
end
sample "Zara" , "6" , "F"
sample "Mac", "36" , "M" , "MCA"
В этом коде вы объявили образец метода, который принимает тест с одним параметром. Однако этот параметр является переменным параметром. Это означает, что этот параметр может принимать любое количество переменных. Таким образом, приведенный выше код даст следующий результат:
Количество параметров - 3
Параметры - Zara
Параметры - 6
Параметры - F
Количество параметров - 4
Параметры - Mac
Параметры - 36
Параметры - M
Параметры - MCA
Class Mrthods Методы класса:
Когда метод определен вне определения класса, метод по умолчанию помечается как закрытый. С другой стороны, методы, определенные в определении класса, по умолчанию помечены как общедоступные. Видимость по умолчанию и закрытая отметка методов могут быть изменены на общедоступные или закрытые для модуля.
Всякий раз, когда вы хотите получить доступ к методу класса, вам сначала нужно создать экземпляр класса. Затем, используя объект, вы можете получить доступ к любому члену класса.
Ruby дает вам возможность получить доступ к методу без создания экземпляра класса. Давайте посмотрим, как объявляется метод класса и как к нему обращаются:
class Accounts
def reading_charge
end
def Accounts.return_date
end
end
Посмотрите, как объявлен метод return_date. Он объявляется с именем класса, за которым следует точка, за которой следует имя метода. Вы можете получить доступ к этому методу класса напрямую следующим образом:
Accounts.return_date
Чтобы получить доступ к этому методу, вам не нужно создавать объекты класса Accounts.
Ruby alias Statement (Заявление о псевдониме Ruby):
Это дает псевдонимы методам или глобальным переменным. Псевдонимы не могут быть определены в теле метода. Псевдоним метода сохраняет текущее определение метода, даже если методы переопределены.
Создание псевдонимов для пронумерованных глобальных переменных ($ 1, $ 2, ...) запрещено. Переопределение встроенных глобальных переменных может вызвать серьезные проблемы.
Синтаксис:
alias method-name method-name
alias global-variable-name global-variable-name
Пример:
alias foo bar
alias $MATCH $&
Здесь мы определили псевдоним foo для bar, а $ MATCH - псевдоним для $ &.
Ruby undef Statement:
Это отменяет определение метода. Undef не может появиться в теле метода.
Используя undef и alias, интерфейс класса может быть изменен независимо от суперкласса, но обратите внимание, что это может привести к поломке программ из-за внутреннего вызова метода self.
Синтаксис:
undef method-name
Пример:
Чтобы отменить определение метода с именем bar, сделайте следующее:
undef bar