flutter開発dart定義方法と異常(三)

2814 ワード

方法
int add(int i,int j) {
  return i + j;
}
//         (   )
add( i, j) {
  return i + j;
}
//            ,             :
add(i, j) => i + j;
//    (=>)     (;)             

一等メソッドオブジェクト
Dartは真のオブジェクト向け言語であり、方法もオブジェクトであり、タイプFunctionを有する.これは,メソッドが変数に値を付与してもよいし,他のメソッドのパラメータとしてもよいことを意味する.メソッドをパラメータとして別のメソッドを呼び出すことができます
var list = [1,2,3];
//  print           forEach
list.forEach(print);
//                Funcation
var p = print;
list.forEach(p);

typedef修飾法により,開発においてjavaのように抽象的またはインタフェースを使用する必要がないようにコールバックが必要であれば,使用方法を用いることができる.例:
typedef void onClick();

class Button {
  void setOnlickListener(onClick listener) {
    listener();
  }
}

メソッドには、必要なパラメータとオプションのパラメータの2種類があります.必要なパラメータは、パラメータリストの前に、後でオプションのパラメータを定義する必要があります.
オプションの名前付きパラメータ
オプションのネーミングパラメータはjavaのリロードの代わりに使用でき、メソッドのパラメータを{}に置くとオプションのネーミングパラメータになります.
int add({int i, int j}) {
  if(i == null || j == null){
     return 0;
  }
  return i + j;
}

メソッドを呼び出す場合、この形式paramName: valueを使用して名前付きパラメータを指定できます.例:
//     
add()
//      
add(i:1)
//    
add(i:1, j:2)
add(j:1, i:2)

オプションの位置パラメータ
メソッドのパラメータを[]に入れるとオプションの位置パラメータとなり、値伝達時にパラメータ位置順に伝達される
int add([int i, int j]) {
  if(i == null || j == null){
     return 0;
  }
  return i + j;
}
// 1   i
add(1);
//       
add(1,2);

既定のパラメータ値
メソッドを定義する場合、オプションパラメータは=を使用してオプションパラメータのデフォルト値を定義できます.
int add([int i = 1, int j = 2]) => i + j;
int add({int i = 1, int j = 2}) => i + j;

匿名メソッド
名前のない方法を匿名の方法と呼び、lambdaやclosure閉パッケージと呼ぶこともできます.匿名メソッドの宣言は次のとおりです.
([Type] param1, …) { 
  codeBlock; 
}; 

次のようになります.
var list = ['apples', 'oranges', 'grapes', 'bananas', 'plums'];
list.forEach((i) {
  print(list[i]);
});

異常
Javaとは異なり、すべてのDart異常は非チェック異常です.方法は必ずしも彼らが投げた異常を宣言し、異常を捕獲することを要求しない.
Dartは、ExceptionおよびErrorのタイプ、およびいくつかのサブタイプを提供する.また、自分の異常タイプを定義することもできます.しかしながら、Dartコードは、ExceptionまたはErrorを実装したオブジェクトだけでなく、null以外のオブジェクトを例外として投げ出すことができる.
throw new Exception('      ');
throw '      ';
throw 123;

Javaとは異なり、例外部分をキャプチャし、Dartで例外をキャプチャするにはcatch文を使用しますが、Dartのcatchでは例外タイプを指定できません.onと組み合わせて使用する必要があります.基本的な文法は以下の通りです.
try {
    throw 123;
} on int catch(e){
    //   on     int              
} catch(e,s){
    //   catch()             ,              ,          ( StackTrace   )
    rethrow; //   `rethrow`                   
} finally{
    
}