В Ruby, правда идиоматична для имени метода, заканчивающегося вопросительным знаком?

StackOverflow https://stackoverflow.com/questions/4289629

  •  28-09-2019
  •  | 
  •  

Вопрос

Это нормально для методов с вопросительным знаком, чтобы вернуть то, что является правдой (например, числом), чтобы указать, что что-то верно, или должен true Сама возвращается?

Есть ли какие-либо примеры правдоподобности, используемые в библиотеке Ruby Standard или по рельсам?

Фон: Кто-то написал А. String#int? метод внутри Ответ на отдельный вопрос, что вернуло целое число для представления правдой, а также nil представлять ложь. Другой пользователь был удивлен, не возвращая логию.

Это было полезно?

Решение

это обычный для методов, заканчивающихся с ? вернуть тоже true или false Но это не систематичен, а основной метод не примет его.

Пример в основных классах Numeric#nonzero? который никогда возвращается true или false.

42.nonzero? # => 42

Библиотека Set имеет add? и delete? слишком. Если бы Enumerable#one? вернулся nil или false Чтобы различать случаи, когда количество равно нулю от того, когда он больше, чем один.

Аналогичный пример являются операторами сравнения (<, >, ...), который обычно возвращается только true или false. Отказ Здесь снова исключения для Moduleоператоры, которые вернутся nil Вместо этого, когда два модуля не связаны:

Array > Enumerable  # => false
Array > Fixnum      # => nil

Другие советы

Добавление? На имя метода в Ruby идиоматично, что метод вернет истинный или ложный. Объект # Nil? это хороший пример. На самом деле объект имеет много хороших примеров чеков правдопользования.

Есть два ответа на ваш вопрос, и оба действительны:

Технически, что-нибудь возвращая false или nil значение действует как ложный булевой при выполнении условного теста, так же как нельский или true Значение действует как верно. Итак, рассматриваемый метод будет работать правильно для большинства раз, когда вы хотите знать, если что-то целое число.

Но стилистически метод, который заканчивается «?» следует вернуть либо логическое true или false И только те.

Оцененный метод действительно не воспроизводится с нашими ожиданиями и не проходит через Pols («принцип наименее удивления»), потому что вы можете разумно ожидать, что возвращается логическое значение, и получить целое число или ноль. Это может привести к неприятным сюрпризам в коде, когда он не справится с неожиданным nil или значение FIXNUM.

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

Я переименован в вопрос о методе, чтобы удалить ?, что было действительно не важно для ответа на вопрос. Сканирование через основные функции, которые заканчиваются, единственные, которые я заметил, что возвращенные данные или Nil были add? и delete? Методы на наборе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top