
- Dart 程式設計教程
- Dart 程式設計 - 首頁
- Dart 程式設計 - 概述
- Dart 程式設計 - 環境搭建
- Dart 程式設計 - 語法
- Dart 程式設計 - 資料型別
- Dart 程式設計 - 變數
- Dart 程式設計 - 運算子
- Dart 程式設計 - 迴圈
- Dart 程式設計 - 決策語句
- Dart 程式設計 - 數字
- Dart 程式設計 - 字串
- Dart 程式設計 - 布林值
- Dart 程式設計 - 列表
- Dart 程式設計 - 列表
- Dart 程式設計 - 對映
- Dart 程式設計 - 符號
- Dart 程式設計 - 字元符 (Runes)
- Dart 程式設計 - 列舉
- Dart 程式設計 - 函式
- Dart 程式設計 - 介面
- Dart 程式設計 - 類
- Dart 程式設計 - 物件
- Dart 程式設計 - 集合
- Dart 程式設計 - 泛型
- Dart 程式設計 - 包
- Dart 程式設計 - 異常
- Dart 程式設計 - 除錯
- Dart 程式設計 - 型別定義 (Typedef)
- Dart 程式設計 - 庫
- Dart 程式設計 - 非同步操作
- Dart 程式設計 - 併發
- Dart 程式設計 - 單元測試
- Dart 程式設計 - HTML DOM
- Dart 程式設計有用資源
- Dart 程式設計 - 快速指南
- Dart 程式設計 - 資源
- Dart 程式設計 - 討論
Dart 程式設計 - 型別定義 (Typedef)
**typedef**,或稱為函式類型別名,有助於定義指向記憶體中可執行程式碼的指標。簡單來說,**typedef** 可以用作引用函式的指標。
以下是 Dart 程式中實現 **typedef** 的步驟。
步驟 1:定義 typedef
**typedef** 可以用於指定我們希望特定函式匹配的函式簽名。函式簽名由函式的引數(包括其型別)定義。返回值型別不是函式簽名的一部分。其語法如下所示。
typedef function_name(parameters)
步驟 2:將函式分配給 typedef 變數
**typedef** 的變數可以指向任何具有與 **typedef** 相同簽名的函式。您可以使用以下簽名將函式分配給 **typedef** 變數。
type_def var_name = function_name
步驟 3:呼叫函式
**typedef** 變數可以用來呼叫函式。以下是呼叫函式的方法:
var_name(parameters)
示例
現在讓我們來看一個例子,以便更好地理解 Dart 中的 **typedef**。
首先,讓我們定義一個 **typedef**。這裡我們定義了一個函式簽名。該函式將接收兩個型別為 **整數** 的輸入引數。返回值型別不是函式簽名的一部分。
typedef ManyOperation(int firstNo , int secondNo); //function signature
接下來,讓我們定義函式。定義一些與 **ManyOperation typedef** 函式簽名相同的函式。
Add(int firstNo,int second){ print("Add result is ${firstNo+second}"); } Subtract(int firstNo,int second){ print("Subtract result is ${firstNo-second}"); } Divide(int firstNo,int second){ print("Add result is ${firstNo/second}"); }
最後,我們將透過 **typedef** 呼叫函式。宣告一個 ManyOperations 型別的變數。將函式名稱分配給宣告的變數。
ManyOperation oper ; //can point to any method of same signature oper = Add; oper(10,20); oper = Subtract; oper(30,20); oper = Divide; oper(50,5);
**oper** 變數可以指向任何接收兩個整數引數的方法。**Add** 函式的引用被分配給該變數。Typedef 可以執行時切換函式引用
現在讓我們將所有部分放在一起,看看完整的程式。
typedef ManyOperation(int firstNo , int secondNo); //function signature Add(int firstNo,int second){ print("Add result is ${firstNo+second}"); } Subtract(int firstNo,int second){ print("Subtract result is ${firstNo-second}"); } Divide(int firstNo,int second){ print("Divide result is ${firstNo/second}"); } Calculator(int a, int b, ManyOperation oper){ print("Inside calculator"); oper(a,b); } void main(){ ManyOperation oper = Add; oper(10,20); oper = Subtract; oper(30,20); oper = Divide; oper(50,5); }
程式應產生以下 **輸出**:
Add result is 30 Subtract result is 10 Divide result is 10.0
**注意** - 如果 **typedef** 變數嘗試指向具有不同函式簽名的函式,則上述程式碼將導致錯誤。
示例
**Typedef** 也可以作為引數傳遞給函式。請考慮以下示例:
typedef ManyOperation(int firstNo , int secondNo); //function signature Add(int firstNo,int second){ print("Add result is ${firstNo+second}"); } Subtract(int firstNo,int second){ print("Subtract result is ${firstNo-second}"); } Divide(int firstNo,int second){ print("Divide result is ${firstNo/second}"); } Calculator(int a,int b ,ManyOperation oper){ print("Inside calculator"); oper(a,b); } main(){ Calculator(5,5,Add); Calculator(5,5,Subtract); Calculator(5,5,Divide); }
它將產生以下 **輸出**:
Inside calculator Add result is 10 Inside calculator Subtract result is 0 Inside calculator Divide result is 1.0