I due mi sembrano uguali:
- una comodità è un aiuto
- un helper è una comodità
Quando è bello usare l'uno o l'altro termine?
I due mi sembrano uguali:
Quando è bello usare l'uno o l'altro termine?
Functions have two main purposes: aiding code reusability and breaking down a task into smaller logical units. Functions that do not aid code reusability are helper functions; their sole purpose is to "help" a single function by cleaning the code and making the logic clearer. The opposite of a helper function is a library function, which focuses on code reuse.
Fonte: Cunningham & Cunningham
considerando quanto segue:
A convenience function is a non-essential subroutine in a programming library or framework which is intended to ease commonly performed tasks.
Fonte: Wikipedia
Una funzione di supporto che non è una funzione di convenienza sarebbe una funzione che suddivide un'attività in unità logiche più piccole senza favorire la riusabilità del codice e senza avere l'obiettivo di facilitare un'attività comunemente eseguita.
Ad esempio, una specifica attività T potrebbe richiedere di eseguire l'azione A e l'azione B. Il refactoring può portare a tre funzioni: T()
, A()
e B()
, dato che potrebbe non avere troppo senso chiamare A()
senza chiamare B()
subito dopo.
Una funzione di convenienza che non è una funzione di supporto faciliterebbe le attività comunemente eseguite senza suddividere un'attività in unità logiche più piccole.
Ad esempio, se molte persone chiamano l'attività T₁ immediatamente seguita dall'attività T₂, una funzione di convenienza sarebbe T₃ che chiamerà semplicemente T₁, quindi T₂. Qui, T₃()
non "aiuta" una singola funzione e non suddivide le attività in unità logiche più piccole: raggruppa semplicemente due attività attualmente utilizzate.
Sono solo termini. Nella maggior parte degli scenari, sono intercambiabili.
In generale, tuttavia, una funzione di convenienza è quella che ti aiuta solo a fare qualcosa che puoi già fare, anche se con meno digitazioni. Un sovraccarico che inoltra con i soliti valori predefiniti, ad esempio.
Spesso un helper è una nuova funzionalità che non realmente appartiene da qualche parte quindi è fuori da solo, ma aiuta ancora.
Almeno come li userò, i due sono in realtà più o meno opposti.
Una funzione di convenienza è (almeno vicino a) una pura funzione di interfaccia, qualcosa che fornisce solo un'interfaccia più gradevole e più comoda da utilizzare per il codice client. Un classico esempio potrebbe essere un front-end per una funzione ricorsiva come Quicksort:
Quicksort(array a) {
QuicksortImplementation(a, 0, a.size());
}
Una funzione di supporto, al contrario, normalmente non è affatto visibile. Nella programmazione orientata agli oggetti, ad esempio, verrà in genere implementato come metodo privato / funzione membro.
class X {
public void foo() {
// beginning of 'foo'
if (some_condition)
helper();
// remainder of foo
}
private void helper() {
// do some relatively minor service for foo()
}
};
In entrambi i casi, tuttavia, di solito c'è l'idea di base che la funzione helper / convenience offra solo una parte piccola della funzionalità complessiva. C'è anche almeno la connotazione che la funzione helper / convenienza è in realtà solo destinata ad essere utilizzata in combinazione con un'altra funzione primaria. Di solito non è particolarmente generico o riutilizzabile, solo una parte della sua funzione primaria che deve essere (o è più conveniente quando) scritta come funzione separata per un motivo o per un altro.
Leggi altre domande sui tag functions terminology