Questo è stato suggerito nello sviluppo di C ++, e Stroustrup ne parla nel suo "Design ed Evolution of C ++", pagine 153 e seguenti. La proposta era ben strutturata e si basava su una precedente esperienza con Ada. Non è stato adottato.
La più grande ragione era che nessuno voleva incoraggiare le funzioni con un gran numero di parametri. Ogni caratteristica aggiuntiva in una lingua costa qualcosa, e non c'era il desiderio di aggiungere una funzionalità per rendere più facile scrivere programmi non validi.
Ha anche sollevato domande su quali fossero i nomi dei parametri canonici, in particolare nella solita intestazione e nella convenzione dei file di codice. Alcune organizzazioni avevano nomi di parametri più lunghi e più descrittivi nel file .h, e più brevi e più facili da digitare i nomi nel file .cpp (i suffissi del file sostitutivo sono desiderati). Richiedere che questi siano gli stessi sarebbe un costo aggiuntivo per la compilazione, e ottenere i nomi mescolati tra i file di origine potrebbe causare bug sottili.
Può anche essere gestito utilizzando oggetti piuttosto che chiamate di funzione. Invece di una chiamata GetWindow con una dozzina di parametri, creare una classe Window con una dozzina di variabili private e aggiungere setter secondo necessità. Concatenando i setter, è possibile scrivere qualcosa come my_window.SetColor(green).SetBorder(true).SetBorderSize(3);
. È anche possibile avere diverse funzioni con diversi valori predefiniti che chiamano la funzione che effettivamente fa il lavoro.
Se sei solo preoccupato dell'effetto della documentazione di contentFetcher.DownloadNote(note, manual : true);
, puoi sempre scrivere qualcosa come contentFetcher.DownloadNote(note, /* manual */ true);
, quindi non è nemmeno molto utile nella documentazione.