Considera la seguente domanda di esame / intervista:
Implementa la funzione strcpy () in C: void strcpy(char *destination, char *source);
La funzione strcpy
copia la stringa C puntata da source
nella matrice puntata da destination
, incluso il carattere nullo terminante. Supponiamo che la dimensione dell'array puntata da destination
sia abbastanza lunga da contenere la stessa stringa C di source
, e non si sovrapponga in memoria con source
.
Supponiamo che tu fossi l'intervistatore / esaminatore, come valuteresti le seguenti risposte a questa domanda?
1)
void strcpy(char *destination, char *source)
{
while (*source != 'void strcpy(char *destination, char *source)
{
while (*(destination++) = *(source++)) ;
}
')
{
*destination = *source;
source++;
destination++;
}
*destination = *source;
}
2)
void strcpy(char *destination, char *source)
{
while (*source != 'void strcpy(char *destination, char *source)
{
while (*(destination++) = *(source++)) ;
}
')
{
*destination = *source;
source++;
destination++;
}
*destination = *source;
}
La prima implementazione è semplice: è leggibile e adatta ai programmatori.
La seconda implementazione è più breve (una riga di codice) ma meno adatta ai programmatori; non è così facile capire come funziona questo codice, e se non hai familiarità con le priorità in questo codice, allora è un problema.
Mi chiedo se la prima risposta mostrerà più complessità e pensiero più avanzato, negli occhi dell'analista, anche se entrambi gli algoritmi si comportano allo stesso modo e sebbene la leggibilità del codice sia considerata più importante della compattezza del codice. Mi sembra che, dal momento che creare un algoritmo, questo compatto sia più difficile da implementare, mostrerà un livello superiore di pensiero come risposta in un esame. Tuttavia, è anche possibile che un intervistatore / esaminatore consideri la seconda risposta non valida perché non è leggibile.
Vorrei anche ricordare che questo non è specifico per questo esempio, ma generale per la leggibilità del codice e la compattezza quando si implementa un algoritmo, in particolare negli esami \ interviews.