J'écris du code Ruby pour un exercice de chiffrement simple et j'ai souvent rencontré ce dilemme (l'exercice est un chiffre solitaire si vous devez le savoir). Il s'agit de savoir si je devrais compléter ma logique avec des variables descriptives et des instructions en une seule étape qui rendent la fonction lisible au lieu d'une instruction concise, voire dense, qui élimine la répétition et / ou minimise les risques d'erreurs.
Mon exemple le plus récent: mon programme accepte les entrées et, en raison de directives de format rigides, il peut facilement déterminer si les entrées doivent être chiffrées ou déchiffrées. Pour simplifier, une fois que la clé de cryptage et le message sont convertis / générés pour être compatibles, il s'agit de soustraire la clé du message crypté ou d'ajouter la clé à un message non crypté, pour obtenir la sortie souhaitée (pensez à la clé comme cryptage, message + cryptage = code; code - cryptage = message). La position DRY me dit que je devrais convertir mon message crypté différemment de mon message non crypté afin que la fonction qui prend la clé de cryptage et l'applique au message n'a jamais besoin de faire de distinction. J'ai trouvé que cela signifie que j'ai besoin de quelques instructions imbriquées if dans la fonction, mais la logique semble solide. Ce code, cependant, n'est pas facilement lisible.
Je pourrais, d'autre part, écrire deux fonctions différentes qui sont appelées en fonction d'un indicateur qui est défini lorsque l'application détermine le chiffrement ou le déchiffrement. Ce serait plus simple à lire, mais cela dupliquerait la fonction de haut niveau consistant à appliquer la clé de chiffrement à un message (en le faisant être chiffré ou déchiffré).
Dois-je m'orienter vers un code lisible ou un code concis? Ou ai-je manqué une autre façon d'obtenir cette fonctionnalité et de satisfaire les deux principes? S'agit-il d'une position à une échelle dans laquelle il faut considérer l'objectif du projet et prendre les meilleures décisions pour atteindre cet objectif?
Jusqu'à présent, j'ai tendance à mettre l'accent sur le code SEC concis sur le code lisible.