Qual è il nome per metodi / funzioni definiti dall'utente che vengono chiamati implicitamente? [chiuso]

0

Voglio contrassegnare tali metodi nel mio codice applicazione con un commento che evidenzia che questi metodi dovrebbero essere richiamati dal framework / compilatore per cui è stata scritta l'applicazione, anche se il codice dell'applicazione stesso non contiene chiamate.

f.ex. i metodi chiamati da un framework Inversion of Control, come beginRender e afterRender di Apache Tapestry ; o quelli di un linguaggio basato sugli eventi, come Form_Load di Visual Basic.

Ero tentato di dire Gestori di eventi ma non sono sicuro che sia corretto limitare il concetto agli eventi; f.ex. in Tapestry il rendering di una pagina attivato da un evento (come il clic su un collegamento) è composto da più fasi e ogni fase ha i propri metodi e vengono richiamati dal framework; queste fasi si verificano in una sequenza predefinita, quindi potrebbe essere fuorviante per il lettore del mio commento se chiamo "evento" ciascuna di esse.

Qualche volta Callback è suggerito ma ho il dubbio che ciò si applica solo a una funzione che viene passata ad altre funzioni come argomento.

L'unica cosa che le funzioni / metodi di cui sto parlando hanno in comune il fatto di essere richiamate dal framework / compilatore, indipendentemente dal fatto che lo sviluppatore codifichi o meno chiamate esplicite o meno.

    
posta SantiBailors 23.12.2015 - 12:30
fonte

2 risposte

3

Come altri già hanno sottolineato, normalmente non assegniamo un nome generale a queste funzioni. Ho sentito tutti questi termini e li ho visti in azione, ma finora non è emerso alcun nome comune che abbia superato i limiti linguistici / di piattaforma / quadro per quanto posso dire. Ma penso che sia comunque una bella domanda. Come è stato detto, nominare le cose è difficile, ma siamo tutti d'accordo che è anche importante, quindi ecco la mia opinione su questo:

Hooks sono come @Kilian Foth ha sottolineato abbastanza il termine old-school e in effetti, non ho sentito quel termine da molto tempo. Non c'è davvero una ragione per cui è andato fuori moda perché è ancora valido, anche se devo ammettere che non mi è mai piaciuta l'idea di un gancio visivo per questo tipo di concetto.

Gli handler sono stati nominati anch'essi, tuttavia, questi hanno in generale una semantica leggermente diversa nella maggior parte dei casi in cui li ho incontrati. I gestori si trovano generalmente in corrispondenza delle interazioni dell'utente (azioni / gestori di pulsanti). I gestori di eventi sono un termine leggermente più mirato, che corrisponde direttamente agli eventi. A causa di molti domini che modellano esplicitamente gli eventi, tuttavia, non mi piace nemmeno come termine generico, dal momento che può essere fonte di confusione avere "gestori di eventi" nel senso hook / callback, quando non è coinvolto alcun "evento" effettivo.

I callback sono vicini agli hook, ma a causa del termine hanno un'enfasi direzionale diversa. Con un gancio c'è qualcosa che esiste e dall'esterno ci si aggancia a quello, mentre una richiamata è qualcosa che si trasmette e, a un certo momento, l'altro lato raggiungerà la tua richiamata. Oltre a questo, i callback sono passati di moda in modo simile agli hook con termini derivati dispregiativi come "callback hell" che mi vengono in mente.

"Implicitamente" è ancora un altro termine che esiste già per un caso del genere, ma ha di nuovo una semantica completamente diversa. Controlla il linguaggio di Scala, che offre "implicitamente" anche come termine di linguaggio diretto. Il suo significato però non è quello di un hook / callback / qualsiasi cosa discutiamo qui.

In aggiunta a ciò, diversi framework non si preoccupano nemmeno dei nomi per questo scopo. Un caso tipico è l'utilizzo di f.ex. API reflection di Java. Considera lo standard Beans, in cui hai metodi di accesso (a.k.a. getters). Diversi framework chiamano questi metodi automaticamente tramite la riflessione e servono ancora un altro scopo in contrasto con tutto quanto sopra.

Come conseguenza di questa discussione, vorrei discutere in stile Obi-Wan, che questo termine non è quello che stai cercando . Come abbiamo visto, i diversi termini dei candidati hanno una semantica selvaggiamente diversa o ragioni per essere chiamati automaticamente. È persino discutibile cosa significhi "automatico". Poiché la denominazione è principalmente un mezzo per trasportare il significato, l'uso stesso di un termine che denota la "funzione utilizzata automaticamente" è discutibile.

Non appena sistemerai alcune di queste opzioni di interpretazione semantica della variabile (o se preferisci i "punti di variazione semantica" di UML), un termine per identificare le tue scelte inizia a dare un senso. Ecco perché abbiamo hook, gestori di eventi, callback, metodi impliciti, accessor di proprietà e quant'altro. Ma ognuno di questi termini contiene più informazioni rispetto al semplice fatto di "chiamate automatiche", qualunque esso sia.

    
risposta data 23.12.2015 - 13:19
fonte
1

Sono solo ... funzioni. Funziona che il resto del codice che hai scritto sta già utilizzando.

Se stai scrivendo un'applicazione, queste sono già indistinguibili dalle funzioni che il codice che potresti scrivere in futuro userà.

Se stai scrivendo una libreria, rendendoli private (e opzionalmente fornendo un wrapper public ) è un buon modo per isolare "le funzioni che fornisco all'utente della libreria" da "funzioni che la mia libreria usa se stessa ". Mi piace chiamarli "funzioni interne", ma probabilmente sono solo io.

Prenderò nota, tuttavia, che gli esempi specifici che hai fornito nella tua domanda sono tutti gestori / callback / hook, quindi se non stai sperando in un termine più ampio, ciò andrà benissimo.

Assegnare nomi alle cose è difficile. A volte descriviamo una funzione in base a come la utilizziamo in quel contesto. A volte descriviamo una funzione in base a come viene tipicamente utilizzata. A volte descriviamo una funzione basata su come dovrebbe sempre essere usata. Venire con una regola generale per coprire tutte queste cose, senza contesto, è quasi inutile. Rendi la tua documentazione chiara e inequivocabile, usando tutte le parole inglesi che ti servono e starai bene.

    
risposta data 23.12.2015 - 12:51
fonte

Leggi altre domande sui tag