Questo è in riferimento a la domanda pubblicata qui . Come lo giudicherei, la domanda dovrebbe essere chiusa semplicemente perché sembra chiedere perché gli sviluppatori Borland abbiano reso una cosa una funzione e un'altra una procedura (funzione che restituisce un risultato nullo).
Ora l'esempio è stato fornito con alcune funzioni di manipolazione delle stringhe che esistono in Borland Pascal o Delphi:
S2 := Copy(S1,3,2);
Copies into S2 from S1 the 2 characters starting from the 3rd position.
Delete(S,3,2);
Deletes from S the 2 characters starting from the 3rd position.
Ora pensavo che potesse essere una buona discussione su quali sarebbero state le buone decisioni di progettazione riguardo alla creazione di queste cose. Ho individuato alcune regole di buon design su come dovrebbe apparire un prototipo di funzione oltre l'ovvio (il nome riflette la funzione, il risultato della funzione dovrebbe essere atomico, nessuna variabile estranea), ma ci sono altri che dovrebbero governare una situazione come questa o altri? Non ho davvero visto un buon caso nel libro di codice di Atwood in cui è stato discusso.
Ad ogni modo, ci sono delle buone regole su come le funzioni dovrebbero essere progettate per funzionare? Escludendo la denominazione speciosa, sarebbe meglio avere
S2 := Delete(S1,3,2);
al contrario di
Delete(S,3,2);
? Ci sono altre considerazioni o esempi utili per discutere del design di funzioni buone e cattive?