Хеши против множественных параметров?

В Ruby очень часто можно увидеть методы, которые получают хэш параметров вместо того, чтобы просто передавать параметры методу.

Мой вопрос: когда вы используете параметры для своего метода, а когда - хеш параметров?

Можно ли сказать, что использование хэша параметра является хорошей практикой, когда метод имеет более одного или двух параметров?


person Shay Friedman    schedule 28.08.2009    source источник


Ответы (5)


Я использую хэши параметров всякий раз, когда они представляют собой набор параметров, которые семантически принадлежат друг другу. Любые другие параметры, которые являются прямыми (часто необходимыми) аргументами функции, я передаю один за другим.

person Matthias    schedule 28.08.2009
comment
+1 - в хеш-параметре ничего не требуется. Необязательные параметры могут быть названы со значениями по умолчанию, но я обычно передаю их в виде хеша и при необходимости устанавливаю значения по умолчанию в теле метода. - person Sarah Mei; 28.08.2009

Вы можете использовать хеш, когда есть много необязательных параметров или когда вы хотите принимать произвольные параметры, как вы можете видеть во многих методах рельсов.

person giorgian    schedule 28.08.2009

если у вас более 2-х аргументов. вам следует подумать об использовании хеша. Это хорошая практика, четко объясненная в чистом коде в тексте ссылки

person Subba Rao    schedule 28.08.2009

Один из очевидных вариантов использования - когда вы переопределяете метод в дочернем классе, вы должны использовать хэш-параметры для параметров родительского метода при его вызове.

person aehlke    schedule 28.08.2009

С другой стороны, и это относится не только к Ruby, но и ко всем языкам:

В постоянно изменяющихся API-интерфейсах иногда бывает полезно объявить некоторые или все параметры функции как один объект параметров (в Ruby это могут быть хэши, в структурах C и т. Д.), Чтобы поддерживать стабильность API в случае набор допустимых аргументов изменится в будущих версиях. Однако очевидным недостатком является то, что читабельность резко снижается, и я бы никогда не стал использовать этот «шаблон», если бы мне действительно не пришлось.

person Matthias    schedule 28.08.2009