1

Rubyでは、他の言語で必要であるが冗長であると感じられた多くのものが言語仕様から削除されています。その中で、1つの重要な例はセミコロンです。ステートメントを連続して配置する場合を除いて、セミコロンは省略できます。

しかし、私が通常冗長だと感じ、Rubyでまだ必要とされている別の文字があります。それがコンマです。メソッド引数、配列要素、またはハッシュ要素が同じ行に連続して配置されている場合や、異なる行にある場合でも括弧のペアで囲まれている場合など、コンマは冗長ではありませんか?シェルスクリプトのようにRubyにコンマを付けずに、メソッド引数/配列要素/ハッシュ要素が次の行に続くことを示すためにオプションでのみ使用できないのはなぜですか?Matzが続けてセミコロンをオプションにした場合、なぜ彼はコンマに対してそれをしなかったのですか?

私が締めくくりに投票したこの質問は、私にこの質問について考えさせました。

4

1 に答える 1

4

できなかった理由はありません

Haskellにはメソッド引数用のコンマはありませんが、配列要素の区切りにはコンマがあります。

Smalltalkには、Rubyにコンマがどのように存在するかという意味で、コンマはまったくありません。RubyはSmalltalkの影響を受けていることを考えると、コンマを追加することは意図的な言語の選択だったようです。(この場合も、Smalltalkのパラメーターリストスタイルは、引数付きのハッシュを渡すようなものですが、それでもコンマはありません。)

ただし、Rubyには、リテラルを使用したコンマのない配列があります。

%w[I don't have any commas!]  #=> ["I", "don't", "have", "any", "commas!"]

結局のところ、質問するのは、コンマを使用することで、物事がより明確になり、精神的に解析しやすくなるかどうかだと思います。たとえば、これはどの程度明確ですか。

foo bar baz

それですかfoo (bar baz)、それともfoo (bar (baz))?それとも((foo) bar) baz)(とにかく関数型でない言語ではおそらくあまり意味がないかもしれませんが)?優先順位が何であるかを明らかに知っていると、これを理解できますが、カンマを使用すると違いが明確になりますが、かっこをより頻繁に含める必要がある場合もあります。

foo bar baz   # foo(bar(baz))
foo bar, baz  # foo(bar, baz)

明らかに、Rubyで括弧を省略すると、あいまいさが生じることもありますが、多くの場合、優先順位に依存するのではなく、構文エラーが発生します。

最終的には、Matzらが行った言語の選択です。それが他の方法ではあり得なかった理由はありません、それは彼らが最も理にかなっていると思ったものです。

于 2012-03-11T22:47:38.400 に答える