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