Ich schreibe Ruby-Code für eine einfache Verschlüsselungsübung und bin häufig auf dieses Dilemma gestoßen (die Übung ist eine Solitär-Chiffre, wenn Sie es wissen müssen). Es ist eine Frage, ob ich meine Logik mit beschreibenden Variablen und Einzelschrittanweisungen ausstatten soll, die die Funktion lesbar machen, anstatt mit präzisen, sogar dichten Anweisungen, die Wiederholungen eliminieren und / oder Fehlermöglichkeiten minimieren.
Mein letztes Beispiel: Mein Programm nimmt Eingaben entgegen und kann aufgrund strenger Formatrichtlinien leicht feststellen, ob Eingaben verschlüsselt oder entschlüsselt werden sollen. Wenn der Verschlüsselungsschlüssel und die Nachricht kompatibel konvertiert / generiert sind, müssen Sie zur Vereinfachung den Schlüssel von der verschlüsselten Nachricht subtrahieren oder den Schlüssel zu einer unverschlüsselten Nachricht hinzufügen, um die gewünschte Ausgabe zu erhalten (stellen Sie sich den Schlüssel als Verschlüsselung vor, Nachricht + Verschlüsselung = Code; Code - Verschlüsselung = Nachricht). Die DRY-Position sagt mir, dass ich meine verschlüsselte Nachricht anders als meine unverschlüsselte Nachricht konvertieren soll, damit die Funktion, die den Verschlüsselungsschlüssel verwendet und auf die Nachricht anwendet, niemals zu unterscheiden braucht. Ich habe festgestellt, dass dies bedeutet, ich brauche einige verschachtelte if-Anweisungen in der Funktion, aber die Logik scheint solide zu sein. Dieser Code ist jedoch nicht leicht lesbar.
Andererseits könnte ich zwei verschiedene Funktionen schreiben, die basierend auf einem Flag aufgerufen werden, das gesetzt wird, wenn die Anwendung die Verschlüsselung oder Entschlüsselung bestimmt. Dies wäre einfacher zu lesen, würde jedoch die übergeordnete Funktion des Anwendens des Verschlüsselungsschlüssels auf eine Nachricht duplizieren (wodurch diese verschlüsselt oder entschlüsselt wird).
Soll ich mich zu lesbarem Code oder zu prägnantem Code neigen? Oder habe ich einen anderen Weg verpasst, um diese Funktionalität zu erhalten und beide Prinzipien zu erfüllen? Ist es eine Position in einer Größenordnung, in der man den Zweck des Projekts berücksichtigen und die besten Entscheidungen treffen muss, um diesem Zweck zu dienen?
Bisher tendiere ich dazu, prägnanten, DRY-Code gegenüber lesbarem Code hervorzuheben.