Почему имя переменной не может заканчиваться на `?`, А имя метода может? - PullRequest
51 голосов
/ 27 марта 2011

Имя метода может заканчиваться знаком вопроса ?

def has_completed?
  return count > 10
end

, но имя переменной не может.

В чем причина?Разве не удобно, чтобы имена переменных тоже заканчивались одинаково?Учитывая, что мы обычно не можем определить, является ли foobar методом или переменной, просто взглянув на имя foobar, почему исключение для случая ??с этим?Может быть, всегда использовать has или is в коде?

if process_has_completed
  ...
end

if user_is_using_console
  ...
end

Ответы [ 2 ]

34 голосов
/ 27 марта 2011

Вы должны попросить Матца получить авторитетный ответ.Тем не менее,

  • Ruby является нетипизированным языком программирования, а переменная типа finished? подразумевает определенный тип (булево), который мне кажется несколько противоречивым.получатель (который может ответить на вопрос).У метода должен быть получатель (объект, к которому вызывается метод), поэтому вопросительный знак имеет смысл.Переменная с другой стороны не имеет получателя, это просто контейнер.
5 голосов
/ 27 марта 2011

Теперь это всего лишь мысль, но я думаю, что методы с именами, такими как empty?, предполагают, что какая-то проверка должна выполняться внутри объекта или класса (в зависимости от контекста).Эта проверка или оценка означает, что действие должно быть выполнено.В целом, поскольку мы запрашиваем (таким образом, ?) объект для некоторого состояния, это означает, что существует вероятность того, что состояние объекта может изменяться в течение жизненного цикла приложения.Переменная может быть устаревшей, но ? -метод (проверка) будет выполнен в определенный момент, предоставляя, таким образом, актуальную информацию о каком-либо состоянии, которая может быть представлена ​​в логической форме.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...