Sto scrivendo il codice Ruby per un semplice esercizio di crittografia e mi sono imbattuto frequentemente in questo dilemma (l'esercizio è un codice di solitario se devi sapere). Si tratta di stabilire se dovrei completare la mia logica con variabili descrittive e istruzioni a singolo passaggio che rendono leggibile la funzione anziché istruzioni concise, anche dense, che eliminano la ripetizione e / o minimizzano le opportunità di errori.
Il mio esempio più recente: il mio programma accetta input e, grazie alle rigide linee guida sul formato, può facilmente determinare se l'input deve essere crittografato o decrittografato. Per semplificare, una volta che la chiave di crittografia e il messaggio vengono convertiti / generati per essere compatibili, si tratta di sottrarre la chiave dal messaggio crittografato o aggiungere la chiave a un messaggio non crittografato, per ottenere l'output desiderato (pensare alla chiave come crittografia, messaggio + crittografia = codice; codice - crittografia = messaggio). La posizione DRY mi dice che dovrei convertire il mio messaggio crittografato in modo diverso dal mio messaggio non crittografato in modo che la funzione che accetta la chiave di crittografia e la applica al messaggio non debba mai distinguere. Ho scoperto che questo significa che ho bisogno di alcune istruzioni nidificate nella funzione ma la logica sembra essere solida. Questo codice, tuttavia, non è facilmente leggibile.
D'altra parte, potrei scrivere due diverse funzioni che vengono chiamate in base a un flag impostato quando l'applicazione determina la crittografia o la decrittografia. Questo sarebbe più semplice da leggere ma duplicerebbe la funzione di alto livello dell'applicazione della chiave di crittografia a un messaggio (causando la sua crittografia o decrittografia).
Devo inclinarmi verso un codice leggibile o un codice conciso? O ho perso un altro modo per ottenere questa funzionalità e soddisfare entrambi i principi? È una posizione su una scala in cui si deve considerare lo scopo del progetto e prendere le migliori decisioni per raggiungere tale scopo?
Finora, tendo a enfatizzare il codice DRY conciso sul codice leggibile.