Condividi tramite


Concetti e terminologia (trasformazione funzionale) (LINQ to XML)

Questo articolo presenta i concetti e la terminologia delle trasformazioni funzionali pure. L'approccio di trasformazione funzionale alla trasformazione dei dati produce codice che spesso è più rapido da programmare, più espressivo e più semplice da eseguire e gestire rispetto alla programmazione imperativa più tradizionale.

Si noti che gli articoli di questa sezione non sono progettati per spiegare completamente la programmazione funzionale. Questi articoli identificano invece alcune delle funzionalità di programmazione funzionale che semplificano la trasformazione di XML da una forma a un'altra.

Che cos'è la trasformazione funzionale pura

Nella trasformazione funzionale pura, un set di funzioni, denominato funzioni pure, definisce come trasformare un set di dati strutturati dalla forma originale in un'altra forma. La parola "pure" indica che le funzioni sono componibili, che richiedono che siano:

  • Autonomo, in modo che possano essere ordinati liberamente e riorganizzati senza interconnessioni o dipendenze con il resto del programma. Le trasformazioni pure non possiedono conoscenza né influiscono sul loro ambiente. Ovvero, le funzioni usate nella trasformazione non hanno effetti collaterali.
  • Senza stato, in modo che l'esecuzione della stessa funzione o di un set specifico di funzioni sullo stesso input provocherà sempre lo stesso output. Le trasformazioni pure non hanno memoria del loro uso precedente.

Importante

Nel resto di questa esercitazione, il termine "funzione pura" viene usato in generale per indicare un approccio di programmazione e non una funzionalità del linguaggio specifica.

Si noti che le funzioni pure devono essere implementate come metodi in C# e come funzioni in Visual Basic.

Non è consigliabile confondere funzioni pure con metodi virtuali puri in C++. Quest'ultimo indica che la classe contenitore è astratta e che non viene fornito alcun corpo del metodo.

Programmazione funzionale

La programmazione funzionale è un approccio di programmazione che supporta direttamente la trasformazione funzionale pura.

Storicamente, i linguaggi di programmazione funzionale per utilizzo generico, ad esempio ML, Scheme, Haskell e F#, sono stati principalmente di interesse per la comunità accademica. Sebbene sia sempre stato possibile scrivere trasformazioni funzionali pure in C# e Visual Basic, la difficoltà di farlo non ha reso l'opzione interessante per la maggior parte dei programmatori. Nelle versioni recenti di questi linguaggi, tuttavia, i nuovi costrutti di linguaggio, ad esempio espressioni lambda e inferenza dei tipi, rendono la programmazione funzionale molto più semplice e più produttiva.

Per altre informazioni sulla programmazione funzionale, vedere Programmazione funzionale e programmazione imperativa.

Linguaggi di programmazione funzionale specifici del dominio

Anche se i linguaggi di programmazione funzionale generali non sono stati ampiamente adottati, alcuni linguaggi di programmazione funzionale specifici del dominio hanno avuto un successo migliore. Ad esempio, i fogli di stile CSS (Cascading Style Sheets) vengono usati per determinare l'aspetto di molte pagine Web e i fogli di stile XSLT (Extensible Stylesheet Language Transformations) vengono usati ampiamente nella manipolazione dei dati XML. Per altre informazioni su XSLT, vedere Trasformazioni XSLT.

Terminologia

L'elenco seguente definisce alcuni termini correlati alle trasformazioni funzionali.

funzione di ordine superiore (prima classe)
Funzione che può essere considerata come oggetto programmatico. Ad esempio, una funzione di ordine superiore può essere passata o restituita da altre funzioni. In C# e Visual Basic, i delegati e le espressioni lambda sono funzionalità del linguaggio che supportano funzioni di ordine superiore. Per scrivere una funzione di ordine superiore, dichiarare uno o più argomenti per accettare delegati e spesso si usano espressioni lambda durante la chiamata. Molti degli operatori di query standard sono funzioni di ordine superiore.

Per altre informazioni, vedere Panoramica degli operatori di query standard (C#) e Panoramica degli operatori di query standard (Visual Basic).

Espressione lambda
Essenzialmente, una funzione anonima inline che può essere usata ovunque sia previsto un tipo delegato. Si tratta di una definizione semplificata di espressioni lambda, ma è adeguata ai fini di questa esercitazione.

Per altre informazioni, vedere Espressioni lambda (Guida per programmatori C#) ed Espressioni lambda (Visual Basic)).

collezione
Set strutturato di dati, in genere di tipo uniforme. Per essere compatibile con LINQ, una raccolta deve implementare l'interfaccia o l'interfaccia IEnumerableIQueryable (o una delle relative controparti generiche IEnumerator<T> o IQueryable<T>).

tupla (tipi anonimi)
Un concetto matematico, una tupla è una sequenza limitata di oggetti, ognuno di un tipo specifico. Una tupla è nota anche come elenco ordinato. I tipi anonimi sono un'implementazione del linguaggio di questo concetto, che consente di dichiarare un tipo di classe senza nome e di creare un'istanza contemporaneamente di un oggetto di tale tipo.

Per altre informazioni, vedere Tipi anonimi (Guida per programmatori C#) e tipi anonimi (Visual Basic).

inferenza del tipo (tipizzazione implicita)
Possibilità di un compilatore di determinare il tipo di una variabile in assenza di una dichiarazione di tipo esplicita.

Per altre informazioni, vedere Variabili locali tipizzate in modo implicito (Guida per programmatori C#) e Inferenza del tipo locale (Visual Basic).For more information, see Implicitly typed local variables (C# Programming Guide) and Local Type Inference (Visual Basic).

esecuzione posticipata e valutazione pigra
Ritardo della valutazione di un'espressione fino a quando non è effettivamente necessario il relativo valore risolto. L'esecuzione posticipata è supportata nelle raccolte.

Per altre informazioni su C#, vedere Introduzione alle query LINQ (C#) e Esecuzione posticipata e Valutazione differita in LINQ to XML (C#).

Per altre informazioni su Visual Basic, vedere Operazioni di query di base (Visual Basic) e Esecuzione posticipata e Valutazione differita in LINQ to XML (Visual Basic).

Queste funzionalità del linguaggio verranno usate negli esempi di codice in questa sezione.

Vedere anche