Hi --

On Sun, 2 Dec 2007, Pat Maddox wrote:

> On Dec 1, 2007 10:55 AM, samppi <rbysamppi / gmail.com> wrote:
>> As a novice in Ruby, I love its elegance and consistence; it's now one
>> of my favorite languages. One of my favorite features is the practice
>> of ending the names of mutating methods with an exclamation point to
>> distinguish them from similar accessor methods, like "reverse" vs.
>> "reverse!"
>>
>> I'm curious, though, about an apparent inconsistency with this rule in
>> Array: push, pop, shift, and unshift. All four methods modify objects
>> in-place, yet they don't have an "!". Why is this?
>>
>> The only reason I can think of is that they lack "!"s in other
>> languages, which is a pretty tenuous reason at best--not many
>> languages name their methods "empty?" or "map!" instead of "is_empty"
>> or "map"...and in any case, Ruby is different enough in syntax and
>> style that it shouldn't even matter.
>>
>>
>
> ! doesn't signify a mutating method, it signifies a destructive
> version of a method.  Per your example, #reverse revers the array
> without changing it, whereas #reverse! is destructive.  #push and #pop
> do not have a nondestructive version.

For more along the same lines, see:
http://dablog.rubypal.com/2007/8/15/bang-methods-or-danger-will-rubyist


David

-- 
Upcoming training by David A. Black/Ruby Power and Light, LLC:
    * Intro to Rails, London, UK, December 3-6 (by Skills Matter)
See http://www.rubypal.com for details and 2008 announcements!