私は単純な暗号化の演習用にRubyコードを書いていますが、このジレンマに頻繁に遭遇しています(この演習は、知っていなければならないソリティア暗号です)。反復を排除したり、エラーの機会を最小限にしたりする簡潔で高密度のステートメントの代わりに、関数を読みやすくする記述変数とシングルステップステートメントでロジックをパディングするかどうかの問題です。
私の最新の例:私のプログラムは入力を受け取り、厳格な形式のガイドラインのために、入力を暗号化または復号化する必要があるかどうかを簡単に判断できます。単純化するには、暗号化キーとメッセージが互換性があるように変換/生成されたら、暗号化されたメッセージからキーを減算するか、暗号化されていないメッセージにキーを追加して、目的の出力を取得します(キーを暗号化として考え、メッセージ+暗号化=コード、コード-暗号化=メッセージ)。DRYの位置は、暗号化されたメッセージを暗号化されていないメッセージとは異なる方法で変換する必要があることを示しています。これは、関数内にネストされたifステートメントが必要であることを意味しますが、ロジックはしっかりしているように見えます。ただし、このコードは簡単には読み込めません。
一方、アプリケーションが暗号化または復号化を決定するときに設定されるフラグに基づいて呼び出される2つの異なる関数を作成できます。これは読みやすくなりますが、暗号化キーをメッセージに適用する(メッセージを暗号化または復号化する)高レベルの機能を複製します。
読みやすいコード、または簡潔なコードに頼るべきですか?または、この機能を取得して両方の原則を満たす別の方法を逃しましたか?プロジェクトの目的を考慮し、その目的を果たすために最善の決定を下さなければならないスケールに沿った位置ですか?
これまでのところ、読みやすいコードよりも簡潔なDRYコードを強調する傾向があります。