Hello Yusuke,

On 2010/10/08 21:29, Yusuke ENDOH wrote:
> Hi,
>
> 2010/10/8 "Martin J. Dst"<duerst / it.aoyama.ac.jp>:
>> I would understand that if it were [a, b, c].included? x
>> But it's include?, so the order seems just fine. Easy to read as
>> "does [a, b, c] include x?". Any other order would feel strange, wouldn't
>> it?
>
> I'm not talking about English, but a "subject" of a sentence.
> Because I think that the "subject" of this sentence is "x", I want to
> write "x" first, such as "is x included in [a, b, c]?".

[a, b, c] includes x, not the other way round. Of course, you can change 
the verb to passive voice (includ*ed*) and make the former object (x) a 
grammatical subject. But how do you expect people to deduce that you 
think about it in the passive voice from the method name 'include'?


> Consider Python's join:  '-'.join(["a", "b", "c"])
> I think that it is awkward NOT because it is unnatural English word order,
> but because an array (that is the "subject" of this sentence) appears
> later.

I think that you can both say "'-' joins the array" and "the array joins 
itself with the '-'", so both Ruby and Python have a point. I think the 
awkwardness (which I feel too) is mainly because we are used to Ruby, 
not to Python.


>> Also, an 'in?' method on Object has been proposed, so that you can write
>> x.in? [a, b, c]
>> That's very short, and fully object oriented pure Ruby, no syntactic sugar
>> necessary.
>
> Some people say that it is against OO.  They say that Object class should
> not have "in?" method because "in?" is not a property of Object.

Given that collections of various kinds are extremely important in 
programming, it may not be too far-fetched to say that it's a property 
of any Object in Ruby to be (potentially) included in a collection.


>>>    2) the idiom is too long (even though it is often used)
>>
>> I don't think Ruby method names are optimized according to usage frequency.
>
> Though there are many exceptions, Ruby certainly has a design principle
> ("akr theory" called in [ruby-dev:33558]) that encouraged methods should
> have short names.

Yes. Everything else being equal, that's a good policy to follow. But 
Ruby naming doesn't go as far as dropping vowels and such the way Unix 
commands do.


> An extreme example is [ruby-dev:33553].  matz once suggested String#sg
> that is a reformed version of String#gsub.  Though it was not committed.

Good programmers know that program readability is important, and 'sg' is 
definitely not readable.


>> Another way to do it would be:
>>     case http_request.http_method
>>     when :get, :post, :put, :delete
>>       ...
>>     end
>
> I agree that case statement is a good idea.  When I imformally suggested
> "in?" operator (on IRC or twitter), some people also suggested me to use
> case statement, and I was satisfied once.
>
> But there is still two problems; case cannot be postpositive, and cannot
> be used in else clauses (like "elsif").
>
>
> An extreme example again: I heard that Sasada-san even created a patch for
> postpositive case statement:
>
>    p "foo" case http_request.http_method when :get, :post, :put, :delete
>
> I believe that this shows that many people suffer from the word order
> problem, though "in" operator is much better than this syntax :-)

That case statement would in my view not be as bad as the 'in' proposal. 
The case statement just completes the postpositive versions of 
if/unless/while. The 'in' is a totally new construction.


Regards,   Martin.


-- 
#-# Martin J. Dst, Professor, Aoyama Gakuin University
#-# http://www.sw.it.aoyama.ac.jp   mailto:duerst / it.aoyama.ac.jp