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
廣告