Почему имя переменной не может заканчиваться символом `?`, А имя метода может?
Имя метода может заканчиваться вопросительным знаком ?
def has_completed?
return count > 10
end
но имя переменной не может.
В чем причина этого? Не так ли удобно, чтобы имена переменных заканчивались одинаково? Учитывая, что мы обычно не можем определить, является ли foobar
метод или переменная, просто глядя на имя foobar
, почему исключение для случая ?
?
И как мне с этим работать? Может быть, всегда использовать has
или is
в коде?
if process_has_completed
...
end
if user_is_using_console
...
end
Ответы
Ответ 1
Вам нужно попросить Маца получить авторитетный ответ. Однако
- Ruby - это нетипизированный язык программирования, а переменная типа
finished?
будет означать определенный тип (логический), который выглядит несколько противоречивым мне.
- Вопрос несколько требует приемника (который может ответить на вопрос). Метод должен иметь приемник (объект, на который вызывается метод), поэтому вопросительный знак имеет смысл. С другой стороны, переменная не имеет приемника, это просто контейнер.
Ответ 2
Теперь это всего лишь мысль, но я думаю, что методы с именами, такими как empty?
, предполагают, что какой-то чек должен быть сделан внутри, а также объект или класс (в зависимости от контекста). Эта проверка или оценка означает, что необходимо выполнить действие. В целом, поскольку мы запрашиваем (например, ?
) объект для некоторого состояния, означает, что существует возможность изменения состояния объекта на протяжении жизненного цикла приложения. Переменная может быть устаревшей, но ?
-метод (check) будет выполнен в определенный момент, таким образом, предоставляя обновленную информацию о каком-либо состоянии, которое может быть представлено в виде булина.
Поэтому я хотел бы подумать, что это конструктивное ограничение, предоставляемое архитектором (Matz), для обеспечения более логичного подхода к кодированию, близкого к реальному.