Reputation: 151036
A method name can end with a question mark ?
def has_completed?
return count > 10
end
but a variable name cannot.
What is the reason for that? Isn't it convenient to have variable names ending the same way too? Given that we usually can't tell whether foobar
is a method or a variable just by looking at the name foobar
anyway, why the exception for the ?
case?
And how should I work with this? Maybe always to use has
or is
in the code?
if process_has_completed
...
end
if user_is_using_console
...
end
Upvotes: 71
Views: 18315
Reputation: 3454
You'd have to ask Matz to get an authoritative answer. However,
finished?
would imply a specific type (boolean) which appears somewhat contradictory to me.Upvotes: 47
Reputation: 227
Now this is just a thought, but I think methods with names like empty?
suggest that a some sort of check has to be made inside and object or a class (depending on the context). This check or evaluation means an action must be done. Overall, since we are asking (thus, ?
) object for some state, means there is a possibility that object's state could change throughout the application's lifecycle. A variable could be outdated, but ?
-method (check) will be done in the specific moment, thus providing an up-to-date information on some state that could be presented in a boolean form.
So I'd like to think that this is a design constraint provided by the architect (Matz) to enforce a more logical, close-to-real-life coding approach.
Upvotes: 6