共用方式為


概念與術語 (功能性轉換) (LINQ to XML)

此主題介紹純功能性轉換的概念與術語。 相較於更傳統的命令式程式設計,轉換資料的功能性轉換方法所產生的程式碼,可以更快速地進行程式設計、更明確且更容易進行偵錯與維護。

請注意,此節中的文章用意不在於完整說明功能性程式設計。 相反地,這些文章會識別一些功能性程式設計功能,這些功能可以更輕鬆地將 XML 從一種形式轉換為另一種形式。

何謂純功能性轉換

在「純功能性轉換」中,一組稱為「純虛擬函式」的函式會定義如何將一組結構化的資料從其原始格式轉換為另一個格式。 「純」這個字表示函式是「可組合的」,也就是說,它們必須是:

  • 「獨立的」,讓這些函式可以自由排列與重新整理,而不會與程式的其餘部分有任何牽連或互相依賴。 純轉換與其環境無關,也不會影響其環境。 也就是說,用於轉換的函式沒有「副作用」
  • 「無狀態」,如此一來,在相同的輸入上執行相同的函式或特定一組函式時,永遠會導致相同的輸出。 純轉換絲毫不會記得其先前的用途。

重要

在本教學課程的其餘部分,「純虛擬函式」這個名詞用於一般含意,表示程式設計方法而非特定的語言功能。

請注意,純函式必須當做 C# 中的方法及 Visual Basic 中的函式來實作。

您不應將純函式誤解為 C++ 中的純虛擬方法。 後者表示包含的類別是抽象的,而且不會提供任何方法主體。

函式程式設計

「函式程式設計」是一種程式設計方法,可直接支援純功能性轉換。

根據過去的經驗,一般用途的函式程式設計語言 (例如,ML、Scheme、Haskell 與 F#) 主要受到學術團體的注意。 雖然功能性程式設計一直可以在 C# 和 Visual Basic 中撰寫純功能性轉換,但是其困難度始終讓大部分的程式設計人員卻步。 不過,在這些語言的最新版本中,新的語言建構 (例如,Lambda 運算式和型別推斷) 讓功能性程式設計更容易,產能也更高。

如需功能性程式設計的詳細資訊,請參閱功能性程式設計與命令式程式設計

特定領域的功能性程式設計語言

雖然目前尚未廣泛採用一般功能性程式設計語言,但是特定領域的功能性程式設計語言比較受歡迎。 例如,階層式樣式表 (CSS) 可用來決定許多網頁的外觀與風格,而可延伸樣式表語言轉換 (XSLT) 樣式表廣泛用於 XML 資料操作。 如需 XSLT 的詳細資訊,請參閱 XSLT 轉換

詞彙

下列清單會定義與功能性轉換相關的一些詞彙。

高順序 (第一級) 函式
可以視為程式設計物件的函式。 例如,高順序函式可以傳遞到其他函式,或從其他函式傳回。 在 C# 和 Visual Basic 中,委派和 Lambda 運算式都是支援高順序函式的語言功能。 若要撰寫高順序函式,您可以宣告一或多個引數以取得委派,而且在呼叫高順序函式時,您通常可以使用 Lambda 運算式。 許多標準查詢運算子都是高順序函式。

如需詳細資訊,請參閱標準查詢運算子概觀 (C#)標準查詢運算子概觀 (Visual Basic)

Lambda 運算式
基本上,這是可用於任何需要委派型別之處的內嵌匿名函式。 這是 Lambda 運算式的簡化定義,但其適用於此教學課程的用途。

如需詳細資訊,請參閱 Lambda 運算式 (C# 程式設計指南)Lambda 運算式 (Visual Basic)

集合
一組結構化的資料,通常屬於統一的型別。 為與 LINQ 相容,集合必須實作 IEnumerable 介面或 IQueryable 介面 (或以下其中一個泛型對應項目:IEnumerator<T>IQueryable<T>)。

Tuple (匿名型別)
這是一個數學概念,一個 Tuple 表示一個有限的物件順序,每個都有特定的型別。 Tuple 也稱為排序清單。 匿名型別為此概念的語言實作,可以宣告未具名的類別型別,並同時具現化該類別的物件。

如需詳細資訊,請參閱匿名型別 (C# 程式設計指南)匿名型別 (Visual Basic)

型別推斷 (隱含型別)
編譯器在沒有明確的型別宣告時,判斷變數型別的能力。

如需詳細資訊,請參閱隱含型別區域變數 (C# 程式設計指南)區域型別推斷 (Visual Basic)

延後執行與延遲評估
延後運算式的評估,直到實際需要其解決的值為止。 在集合中,支援延後執行。

如需 C# 的詳細資訊,請參閱 LINQ 查詢簡介 (C#)LINQ to XML 中的延後執行和延遲評估 (C#)

如需 Visual Basic 的詳細資訊,請參閱基本查詢作業 (Visual Basic)LINQ to XML 中的延後執行和延遲評估 (Visual Basic)

這些語言功能將用於本節的所有程式碼範例中。

另請參閱