Selon Robert Klemme <bob.news / gmx.net>:

>
>  - boolean query method identifiers end with a question mark "?"
> ([].empty?)
>

And? Are there some that aren't?

>  - destructive method identifiers end with an exclamation mark
>

No! The exclamation mark indicates *dangerous* methods, i.e. methods that have
any kind of dangerous behaviour (modifying the object they apply to is just one
of those dangerous behaviours), *when it's not clear from their name that they
are dangerous.* So if the name of the method already indicates a dangerous
behaviour (a destructive behaviour for instance), there is *no* need to add an
exclamation mark.

> >> a=[1,2,3]
> => [1, 2, 3]
> >> b=a.reverse
> => [3, 2, 1]
> >> a
> => [1, 2, 3]
> >> a.reverse!
> => [3, 2, 1]
> >> a
> => [3, 2, 1]
> >> a.delete! 2
> NoMethodError: undefined method `delete!' for [3, 2, 1]:Array
>         from (irb):14
>
> Ooops!
>
> >> a.delete 2
> => 2
> >> a
> => [3, 1]
>
> Ah!
>

And that is *correct* use of the exclamation mark, because delete, by
definition, can *only* be destructive. Since it is clear from its name that it
is a dangerous method, the ! is unnecessary and unused. It's not a case of a
broken convention, but of you misunderstanding the convention.

Now you may disagree with that convention, and argue it should change. But you
can't call that a convention break when it is not.
--
Christophe Grandsire.

http://rainbow.conlang.free.fr

It takes a straight mind to create a twisted conlang.