Sometimes I see methods in Ruby that have "?" and "!" at the end of them, e.g:
name = "sample_string"
It's "just sugarcoating" for readability, but they do have common meanings:
!perform some permanent or potentially dangerous change; for example:
Enumerable#sortreturns a sorted version of the object while
Enumerable#sort!sorts it in place.
ActiveRecord::Base#savereturns false if saving failed, while
ActiveRecord::Base#save!raises an exception.
Kernel::exitcauses a script to exit, while
Kernel::exit!does so immediately, bypassing any exit handlers.
?return a boolean, which makes the code flow even more intuitively like a sentence —
if number.zero?reads like "if the number is zero", but
if number.zerojust looks weird.
In your example,
name.reverse evaluates to a reversed string, but only after the
name.reverse! line does the
name variable actually contain the reversed name.
name.is_binary_data? looks like "is
name binary data?".