Quali sono le giustificazioni per le annotazioni in un linguaggio di programmazione? [chiuso]

2

Dopo aver passato molto tempo a scrivere C # e a guardare Java, mi sembra che le annotazioni siano solo un brutto odore di codice che introduce un altro strato concettuale che potrebbe facilmente essere sostituito dalle funzionalità linguistiche esistenti, sia che si tratti di parole chiave (come nel caso della parola chiave override di C # rispetto all'annotazione @override di Java) o dell'ereditarietà (perché non solo un'interfaccia ISerializable o una classe base anziché un attributo [Serializable] ?) Tuttavia, questa conclusione potrebbe essere dovuta anche al mio parente inesperienza come programmatore professionista.

La mia domanda è composta:

  1. Che cosa portano in tavola le annotazioni che non possono essere realizzate in altri modi, senza complicare la grammatica di una lingua?
  2. Ci sono cose che possono essere implementate senza annotazioni, ma che sarebbe molto più difficile da implementare senza di esse?
  3. Più in generale, dove (se da qualche parte) si trova la linea di demarcazione tra dati e metadati in un linguaggio di programmazione?

La mia domanda è diversa da Quali sono i problemi con le annotazioni Java adatto a? . Per cominciare, questa domanda non è specifica per Java. Voglio sapere, in generale, se le annotazioni sono indispensabili o semplicemente utili . Sono anche curioso di sapere la distinzione teorica tra dati e metadati e quanto sia davvero utile questa distinzione.

    
posta Daniel Arant 08.10.2015 - 16:36
fonte

2 risposte

6

Le annotazioni possono essere specificate dall'utente e accessibili per riflessione .

Ciò significa che puoi creare un framework per esaminare le classi di un utente e estrarre le informazioni necessarie.

Le annotazioni sono anche vicine a dove hanno effetto. È possibile estrarre tutte le annotazioni in un file di configurazione e far analizzare il framework, ma questo può portare a errori di battitura e dimenticare di aggiornare le configurazioni.

Ad esempio, un framework di test può iterare su tutte le funzioni di un oggetto e utilizzare le annotazioni per verificare se un test deve generare un'eccezione e, in tal caso, quale. senza questo il test dovrebbe catturare l'eccezione e fare una chiamata di FailTest() dopo il metodo che dovrebbe essere lanciato. Anche la marcatura di quali metodi sono test e quali sono aiutanti, setup o demolizione sarebbe fastidioso.

Un framework DI può guardare un oggetto costruito e riempire il campo annotato con l'implementazione corretta senza dover aggiungere un altro parametro al costruttore.

Rendono la vita più facile dal lato utente dell'API a costo di essere spesso un problema da programmare e eseguire il debug.

    
risposta data 08.10.2015 - 16:55
fonte
2
  1. Non c'è niente del genere, dopotutto, prima che le annotazioni fossero disponibili, abbiamo usato file XML per tutto.

  2. È più bello avere tutto ciò che riguarda la classe o il suo campo in un posto / file. Immagino che le annotazioni a livello di metodo siano difficili da sostituire poiché le alternative richiedono di fornire class name , method name e talvolta list of parameters , se il metodo è sovraccarico.

  3. Non c'è alcuna distinzione teorica oltre al semplice "metadata is data about data". Potremmo anche dire che i modificatori di accesso ( public / private ) sono metadati e sostituirli con annotazioni ( Progetto Lombok fa qualcosa di correlato)

risposta data 08.10.2015 - 17:38
fonte

Leggi altre domande sui tag