2

C#:

var articles = Article
                      .OrderBy(x=> x.Name)
                      .Where(x=> x.Name.Contains(pattern))
                      .Select(x=>new {x.Name + " (article)"})
                      .ToList();

C# でこのように記述するのはよく、「メソッド連結」と呼ばれます。実際、私はそれらがどのように呼ばれているか正確には覚えていません。Jon Skeet の本で読みました。各メソッドが新しい行にあるという考え方は、C# では通常のことです。

ルビーはどうですか?書くのは普通ですか:

articles = Article
                  .order(:name)
                  .where("name like ?","%#{pattern}%")
                  .map(&:name)
                  .map {|c| c << " (article)"}
4

2 に答える 2

2

メソッド チェーンは、Ruby を含む多くの言語の定番です。その使用は主に個人的な好みの問題です。tokland のように、結果として生じる可能性のある大きな式を好まない人もいますが、私は喜んで式を拡張して一時変数を削除します。

于 2012-08-30T17:02:59.800 に答える
1

主観的な質問なので、彼女は主観的な答えです (Ruby プログラマーとして):

  1. 私は「穴」を作成しないことを好みます。私のコードでは、そのレベルのインデントを挿入しません。

  2. 行末にドットを挿入することもできます。どちらが読みやすいですか?言うのは難しいですが、私は後者を好みます (行頭では気にしませんが、大したことではありません)。したがって、おそらく次のように記述します (これら 2 つのマップを結合できることに注意してください)。

    article_names = Article.
      order(:name).
      where("name LIKE ?", "%#{pattern}%").
      map(&:name).
      map { |name| name + " (article)"}
    
  3. 私の経験では、チェーンが長いとコードをたどるのが難しくなります。チェーンが大きくなりすぎると (5、6 要素?)、意味のある名前を持つ中間変数を作成してチェーンを壊す傾向があります。これは、式をさらに説明するのに役立ちます。

    filtered_articles = Article.order(:name).where("name LIKE ?", "%#{pattern}%")
    names = filtered_articles.map { |article| "#{article.name} (article)" }
    
于 2012-08-30T16:51:47.563 に答える