0

ルビーやプログラミングでは、一般的に、言語が許す限り簡潔にすること、または読みやすいまま簡潔にすることがベストプラクティスですか? 例えば:

animals = %w{ cat dog bird }
chosen_animal = rand(animals.length)
random_animal = animals[chosen_animal]

または

animals = %w{ cat dog bird }
random_animal = animals[rand(animals.length)]

2番目のコードの方が優れていると感じています。最初のものを使用する利点はありますか?どちらを使用しますか?なぜですか?

4

2 に答える 2

4

言語が許す限り簡潔にするか、それとも読みやすいまま簡潔にするか?

常に、常に読みやすさを優先します。簡潔さは、コードをより読みやすくする場合にのみ役立ちます(つまり、冗長性や煩雑さを軽減する)。コードが不明瞭になり、開発を遅らせるだけの場合は、何も節約できません。

可読性/保守性は、絶対に必要な場合にのみ、パフォーマンスの問題を後回しにするだけです。これは、Ruby のような言語ではあまり当てはまらず、C のような言語ではより一般的です。ボトルネックが存在することが示されている場合は、コードを理解するのが少し難しくなる可能性がある低レベルの最適化を実行することによってのみ解決できます。 . この場合、コードの動作を完全に説明するコメントを追加します。

于 2012-04-10T17:04:45.180 に答える
1

これは非常に幅広い質問であり、主観的な偏見の余地が十分にあります。

読みやすさは常に良いことだと一般に認められています。とはいえ、人によって読めるものは異なります。

たとえば、あなたの例から、私は実際には2番目のバリアントを好みます。

コードを広げれば助かる、と言う人はたくさんいますが、あまり広げられていない (制限内で!) コードを好む人 (私自身も含む) もいます。コードの「形状」(構造、ループ、条件など)を離れた場所に表示します。

あなたの例では、どちらか一方のバリアントを使用しても、読みやすさにはほとんど影響しません。しかし、次のような式があるとします。

r1 = $r*(($objcols-i).to_f+j+k)*3/total_objs

それにはより多くの用語が含まれているため、目で見るのははるかに困難です。あなたはそれを引き離すことができます:

t1 = ($objcols-i).to_f
t2 = t1 + j + k
t3 = $r * t2 * 3
r1 = t3 / total_objs

しかし、それはそれをより読みやすくしますか?実際には、この特定の公式は、見栄えのよいランダムな回転を生成する魔法の公式にすぎません。

水平に広げることで妥協できます。

r1 = $r*( ($objcols-i).to_f+j+k ) * 3 / total_objs

これは、少なくとも主要な用語をグループ化するのに役立ちます。

しかし、結局のところ、私たちはマイクロについて話している. 誰かがそのスニペットを理解するのに 3 秒かかるか 10 秒かかるかは重要ではありません。これらはより重要です:

  • 表現の理由は明らかでなければなりません。コード自体から明らかでない場合は、それを説明するコメントが必要です。
  • コードは簡単にナビゲートできる必要があります。これの意味は:
    • 繰り返しコードの排除/削減
    • プログラムを小さすぎたり大きすぎたりしない関数に分割します。繰り返しになりますが、「小さすぎる」と「大きすぎる」は主観的な用語であり、多くの場合例外があります。
    • より複雑で高レベルな構造 (相互作用するクラスの大規模なネットワークなど) を多くのコメントとともに説明します。

最後に、これができることをご存知ですか?(少なくとも Ruby 1.9+ では):

random_animal = animals.sample

からランダムな要素を取りますanimals

于 2012-04-10T17:19:10.143 に答える