4

議論されているか、非常に明白な場合は、このトピックを自由に削除してください。私はC#のバックグラウンドを持っており、Rubyを学ぶことを計画しています。私がそれについて読んだすべては非常に興味をそそられるようです。しかし、私は、「1つのことを行うには複数の方法がある」というRubyのこの基本的な哲学について混乱しています。誰かがこの点を明確にするために2つまたは3つの簡単な算術または文字列の例を提供できますか?たとえば、構文や論理などについてです。

ありがとう

4

3 に答える 3

7

「何かをする複数の方法」とは、あなたが望む方法で何かをするという選択をすることを意味します。そうすれば、出身地に関係なく、さまざまなプログラミングスタイルを使用できます。


forvs.ブロックを使用した反復

あなたはそのようなものの配列を繰り返すことができます。これはかなり基本的なことであり、Javaのバックグラウンドを持っている場合、これは自然な感じです。

for something in an_array
   print something
end

よりRubyに似た方法は、次のようになります。

an_array.each do |something|
    print something
end

1つ目は、かなりよく知られている方法です。2つ目は、ブロックを使用することです。これは、多くのRubyイディオムに見られる非常に強力な概念です。基本的に、配列はその内容を反復処理する方法を知っているので、これを変更して次のようなものを追加できます。

an_array.each_with_index do |something, index|
    print "At #{index}, there is #{something}"
end

このようにすることもできますが、上記の方が簡単に見えることがわかります。

index = 0
for something in an_array
    print "At #{index}, there is #{something}"
    index += 1
end

通常どおり引数を渡すか、Hashesを使用します

通常、次のような引数を渡します。

def foo(arg1, arg2, arg3)
    print "I have three arguments, which are #{arg1}, #{arg2} and #{arg3}"
end

foo("very", "easy", "classic")

=> "I have three arguments, which are very easy and classic"

ただし、ハッシュを使用して次のことを行うこともできます。

def foo(args)
    print "I have multiple arguments, they are #{args[:arg1]}, #{args[:arg2]} and #{args[:arg3]}"
end

foo :arg1 => "in a", :arg2 => "hash", :arg3 => "cool"

=> "I have three arguments, which are in a hash and cool"

2番目の形式は、RubyonRailsによって過度に使用される形式です。良い点は、パラメータに名前を付けたことです。あなたがそれらを渡すとき、あなたはそれらが何のために使われたかをより簡単に思い出すでしょう。

于 2011-06-19T08:35:36.880 に答える
4

それは、選択の自由の名の下に、多くの混乱スタイル戦争、そして微妙な違いによるバグを意味します。

于 2017-07-26T11:41:08.567 に答える
1

やや些細な例は、alias / alias_methodの使用です(エイリアスとalias_methodなど、ほぼ同じものに対して2つの類似した方法があることにも注意してください)。

プロジェクトで作業していて、使用するAPIを忘れたとします。

メソッドの名前は何でしたか?

さて、あなたは手元にあるプログラムのドメインロジック内にとどまり、あなたが望む方法でそれを使い続けることができます。次に、他のプログラムのメインエントリポイントにエイリアスを追加するだけです。

人々はデフォルトで.collectを使用することも、.mapを使用することもできますが、個人的に使用するものにはほとんど違いがありません(.mapは短いので使用します)。

エイリアスを使用すると、数か月後、何かの使用方法を思い出せなくなることがよくあるため、役に立ちました。はい、調べることはできましたが、どうしてわざわざわざわざしなければならないのでしょうか。代わりにエイリアスを使用できます。(エイリアスとAPIを使用して、可能な限りシンプルに保つように努めていることに注意してください。)

于 2015-12-02T09:22:59.933 に答える