From: matz@... (Yukihiro Matsumoto) Date: 2000-10-22T00:32:38+09:00 Subject: [ruby-talk:5736] Re: Array#insert Hi, In message "[ruby-talk:5716] Re: Array#insert" on 00/10/21, Aleksi Niemel� writes: |I think I'm following matz ideas when I named it to be "insert" instead of |"insert!". And the reasoning is that currently the methods are not named |with exclamation mark (!) if | |1) the name clearly indicates the receiving object is going to change and/or |2) there's no corresponding method with implicit dup. | |In this case the name indicates the receiver is going to be changed, and |there's no !-version (just like Array#delete_at doesn't have exclamation |mark). | |My understanding is that a method which changes receiver can be named |without !. But a method which does not change receiver can't be named with |!. |Also a method which has a non-receiver-mutating version too has to be named |with !. | |I'm sure matz will correct me here, if I'm mistaken or the "rules" are |incorrect. I'm also willing to create insert *and* insert! if it's thought |to be necessary or the current way confusing. I don't feel so (yet :). You're right. Did you scan my brain lately? And: In message "[ruby-talk:5721] Re: Array#insert" on 00/10/21, Mark Slagell writes: |This is in fact one of the first things that startled me when learning |about ruby. I'll give three reasons for wishing we were consistent about |!/? naming: | |A. Least Surprise is not well served by the inconsistency, IMO. I'd love |to be able to reliably know, when seeing the name of an unfamilar |method, whether it is can be trusted not to change the receiver. | |B. Getting used to having garbage collection has made me more |comfortable with programming in a functional style, as it's easier to |reason about the behavior of non-destructive methods. So it is a nice |convenience for me when destructive methods routinely turn out to have |non-destructive equivalents. I guess what I'm saying is that "clearly |indicates" is anything but clear much of the time, and is open to honest |disagreement based on differing styles; for instance, you might not see |a use for a non-destructive array insert whereas to me it might sound |just as natural and sensible as non-destructive string concatenation. | |C. (related to B, but this applies even if you don't consistently prefer |functional style) Naming a destructive method without the ! ties our |hands - what can we do if we later change our mind later about the need |for a non-destructive equivalent? Well, your resolution is consistent and simpler, but it makes Ruby programs full of bang signs, that makes programmers (at least me) unhappy. Although current rule is more complex than you expect, but most human brain can handle it easily; I'm sure. matz.