Методы
Метод — это определенное действие объекта.
Методы свойственны только объектно-ориентированному программированию. Метод это один из многих способов структурирования кода, служит чтобы действие объекта вынести отдельно и использовать несколько раз.
Методы
Объявление метода происходит при помощи выражения def после которого следует имя метода и перечень аргументов необходимых для него, пример:
Для методов не нужно явно указывать возвращаемое значение, они вернут результат выполнения посленей строки своего кода, однако иногда полезно явно указывать возвращаемое значение, при помощи выражения return.
Это явное указание методу, что нужно вернуть. Еще return следует использовать тогда, когда вас не устаивает то, что метод возвращает результат выполнения последней строки. Пример использования return:
Иногда нужно вернуть больше одного значения, поэтому возвращают массив. Чтобы всегда возвращался массив используют оператор splat «*»
По такому шаблону [*array]. Пример
Аргументы методов
Аргументы методов — это параметры, которые передаются в метод и с которыми метод выполняет определенные действия или из-за которых метод изменяет свое поведение. Аргументы бывают предопределенными (необязательными), действие по умолчанию, если аргумент не получен и не предопределенными. Предопределенные аргументы используются тогда, когда, например значение аргумента в большинстве случаев одинаково, однако, пользователю метода может понадобится его изменить.
Не предопределенные аргументы были приведены в примерах выше. Когда вы используете не предопределенные аргументы метода, например в количестве 2, но при вызове метода передаете только один аргумент, то метод вернет ошибку: ArgumentError: wrong number of arguments (1 for 2), если же один из двух аргументов будет предопределенным, то значение автоматически присваивается аргументу, который является не предопределенным. Пример предопределенных аргументов:
Обратите внимание мы указали только первый аргумент, то есть a = 15, остальные аргументы получили свои значения из аргументов по умолчанию, указанные при объявлении метода!
Если вы будете использовать другой порядок следования аргументов, то присвоение аргументам значения будет происходить несколько неожиданно:
Методы в Ruby могут принимать не только предопределенное количество аргументов, но и произвольное их количество. Если быть совсем точным, то один из аргументов метода мы объявляем коллекцией значений(массивов или хешом) при помощи оператора splat «*». В методе может быть всего один такой аргумент. Пример:
При передаче аргументов в метод в виде массива мы также должны использовать оператор *, который превращает массив в набор значений, иначе аргументу strings будет определено одно значение — массив, что нас не устраивает.
Еще пример, где можно передавать не определенные аргументы в метод, и делать над ними действия.
При создании методов с произвольным количеством аргументов следует обратить внимание на такое правило: аргумент реализующий прием множественного количества аргументов должен быть представлен последним в списке аргументов метода. Примеры:
В метод на самом деле передается набор аргументов: 5,1,2,3,4,5, поэтому аргумент a получает значение 5, аргумент b получает значение 1, а аргумент с получает все остальные значения. При таком положении дел предопределенные аргументы становятся бесполезными, так как если метод получает произвольное количество параметров, то они могут быть переписаны.
Выход из ситуации простой: не использовать предопределенные аргументы и аргументы получающие коллекцию значений в одном методе. Произвольное количество значений вы можете изначально передавать в виде коллекции. Пример:
Приемники методов
Метод принадлежащий объекту имеет приемник — объект, которому он принадлежит. Если метод вызывается без указания приемника, то это означает, что приемником является текущий объект,то есть тот, в контексте которого вызывается метод. Примеры:
Трюки с методами
В Ruby существует возможность вызывать методы не на прямую, а через метод #send передавая ему в качестве аргумента символ соответствующий имени метода, пример:
Во всех остальных случаях следует использовать стандартный синтаксис объявления методов при помощи def.
#method_missing — используется для обработки ошибки NoMethodError, которая возвращается при попытке вызвать несуществующий метод. То есть #method_missing не объявляет методы, а обрабатывает ошибки. В контексте #method_missing вы можете на основании имени вызываемого метода обработать ошибку, то есть с имитировать существование метода или нескольких методов.
singleton методы — это индивидуальные методы объекта, которые хранятся в singleton классе объекта по той простой причине, что объекты не хранят методы.
Методы
Метод — это определенное действие объекта.
Методы свойственны только объектно-ориентированному программированию. Метод это один из многих способов структурирования кода, служит чтобы действие объекта вынести отдельно и использовать несколько раз.
Методы
Объявление метода происходит при помощи выражения def после которого следует имя метода и перечень аргументов необходимых для него, пример:
Для методов не нужно явно указывать возвращаемое значение, они вернут результат выполнения посленей строки своего кода, однако иногда полезно явно указывать возвращаемое значение, при помощи выражения return.
Это явное указание методу, что нужно вернуть. Еще return следует использовать тогда, когда вас не устаивает то, что метод возвращает результат выполнения последней строки. Пример использования return:
Иногда нужно вернуть больше одного значения, поэтому возвращают массив. Чтобы всегда возвращался массив используют оператор splat «*»
По такому шаблону [*array]. Пример
Аргументы методов
Аргументы методов — это параметры, которые передаются в метод и с которыми метод выполняет определенные действия или из-за которых метод изменяет свое поведение. Аргументы бывают предопределенными (необязательными), действие по умолчанию, если аргумент не получен и не предопределенными. Предопределенные аргументы используются тогда, когда, например значение аргумента в большинстве случаев одинаково, однако, пользователю метода может понадобится его изменить.
Не предопределенные аргументы были приведены в примерах выше. Когда вы используете не предопределенные аргументы метода, например в количестве 2, но при вызове метода передаете только один аргумент, то метод вернет ошибку: ArgumentError: wrong number of arguments (1 for 2), если же один из двух аргументов будет предопределенным, то значение автоматически присваивается аргументу, который является не предопределенным. Пример предопределенных аргументов:
Обратите внимание мы указали только первый аргумент, то есть a = 15, остальные аргументы получили свои значения из аргументов по умолчанию, указанные при объявлении метода!
Если вы будете использовать другой порядок следования аргументов, то присвоение аргументам значения будет происходить несколько неожиданно:
Методы в Ruby могут принимать не только предопределенное количество аргументов, но и произвольное их количество. Если быть совсем точным, то один из аргументов метода мы объявляем коллекцией значений(массивов или хешом) при помощи оператора splat «*». В методе может быть всего один такой аргумент. Пример:
При передаче аргументов в метод в виде массива мы также должны использовать оператор *, который превращает массив в набор значений, иначе аргументу strings будет определено одно значение — массив, что нас не устраивает.
Еще пример, где можно передавать не определенные аргументы в метод, и делать над ними действия.
При создании методов с произвольным количеством аргументов следует обратить внимание на такое правило: аргумент реализующий прием множественного количества аргументов должен быть представлен последним в списке аргументов метода. Примеры:
В метод на самом деле передается набор аргументов: 5,1,2,3,4,5, поэтому аргумент a получает значение 5, аргумент b получает значение 1, а аргумент с получает все остальные значения. При таком положении дел предопределенные аргументы становятся бесполезными, так как если метод получает произвольное количество параметров, то они могут быть переписаны.
Выход из ситуации простой: не использовать предопределенные аргументы и аргументы получающие коллекцию значений в одном методе. Произвольное количество значений вы можете изначально передавать в виде коллекции. Пример:
Приемники методов
Метод принадлежащий объекту имеет приемник — объект, которому он принадлежит. Если метод вызывается без указания приемника, то это означает, что приемником является текущий объект,то есть тот, в контексте которого вызывается метод. Примеры:
Трюки с методами
В Ruby существует возможность вызывать методы не на прямую, а через метод #send передавая ему в качестве аргумента символ соответствующий имени метода, пример:
Во всех остальных случаях следует использовать стандартный синтаксис объявления методов при помощи def.
#method_missing — используется для обработки ошибки NoMethodError, которая возвращается при попытке вызвать несуществующий метод. То есть #method_missing не объявляет методы, а обрабатывает ошибки. В контексте #method_missing вы можете на основании имени вызываемого метода обработать ошибку, то есть с имитировать существование метода или нескольких методов.
singleton методы — это индивидуальные методы объекта, которые хранятся в singleton классе объекта по той простой причине, что объекты не хранят методы.
Ruby on Rails на русском
Еще один блог о веб-разработке
Функции (методы) в Ruby
Функции (методы) в Ruby
В этом посте мы рассмотрим:
Функции и методы
Технически, функция определяется за пределами класса, а метод определяется внутри класса.
В Ruby, каждый метод/функция имеет как минимум один класс, к которому он пренадлежит.
Таким образом, каждая функция на самом деле является методом в Ruby.
Методы
Методы могут иметь скобки, но они полностью опциональны как при определении метода, так и при вызове метода.
Скобки используются для ясности, хотя это и не необходимо.
В этом примере мы определили метод simple без скобок, но мы его можем вызвать как со скобками, так и без, — и это полностью разрешено. То же самое относится и к методу simple1.
Возврат
Выразительные имена методов
Имена методов могут оканчиваться на:
Аргументы по умолчанию
Методы могут иметь аргументы по умолчанию.
Splat
Splat — это интересная концепция.
* идет перед параметром в определении метода
Он почти похож на указатель, как указатель в C, но это не так. Это похоже на var args, переменные аргументы в Java.
Итак, у вас есть много параметров которые вы хотите передать, но вы не знаете сколько, или вам неважно сколько. Вы хотите, чтобы все параметры обрабатывались как один параметр, и все эти параметры становятся одним большим массивом внутри метода.
И интересная часть заключается в том, что он может относиться к среднему параметру, а не только к последнему параметру метода.






