Dart入門宝典第二章——賦値演算子、制御文、方法と閉パッケージに関する紹介

5868 ワード

代入演算子
  • =通常付与
  • ??= 変数値がnullの場合、
  • が付与されます.
    void main() {
        var a = 10;
        var b;
        b ??= 5;
        print(b);
    
        var c = 20;
        c ??= 5;
        print(c);
    }
    

    印刷結果:
    5
    20
    

    上のコードでは、bは最初はnullとして値を付けていませんでしたが、この場合は??=付与値は有効になるので、印刷bの値は5である.cはすでに付与されているためnullではないため、??=有効ではありません.cの値は20です.
    条件式
  • 三目演算子:condition?expr1 : expr2
  • ??演算子:expr 1??expr 2 expr 1がnullの場合、expr 2
  • が使用する.
    void main() {
        int gender = 0;
        var str = gender == 0 ? "Male" : "Female";
        print(str);
    
        var a;
        var b = "Dart";
        print(a ?? b); //  a null   b  
    
        a = "Java";
        print(a ?? b);//  a null   b  
    }
    

    印刷結果:
    Male
    Dart
    Java
    

    せいぎょぶん
    Dartの制御文とJavaの制御文はほぼ同じですが、ここでは簡単にご紹介します.
    じょうけんステートメント
  • if文
  • if...else文
  • if...else if...else文
  • for文
       :
    for(   ;    ;    ){    
       
    }
    
     :
    for (var i = 0; i <= 5; i++) {
        
    }
    
    
       :
    for(element in list){
        
    }
    
     :
    var list = [1,2,3];
    for(var item in list){
        
    }    
    

    whileサイクル
  • whileサイクル
  • do...whileサイクル
  • breakとcontinue
    switch case
    方法
    メソッドの定義
    戻りタイプメソッド名(パラメータ1、パラメータ2、...){メソッドボディ...return戻り値}
    次のようになります.
    int getArea(int width, int height){
      return width * height;
    }
    

    メソッドの特性
  • メソッドも対象であり、具体的なタイプのFunction
  • がある.
  • 戻り値タイプ、パラメータタイプともに
  • を省略することができる.
  • 矢印構文:=>exprは{return expr;}略語は、式
  • にのみ適用されます.
  • メソッドには戻り値があります.指定されていない場合は、デフォルトreturn null
  • 上記定義で面積を求める方法は、getArea()を以下のように定義することができる.
  • 戻り値タイプ
  • を省略する.
    getArea(int width, int height){
      return width * height;
    }
    
  • パラメータタイプ
  • を省略
    int getArea(width, height){
      return width * height;
    }
    
  • 戻り値タイプとパラメータタイプ
  • を省略する.
    getArea(width, height){
      return width * height;
    }
    
  • 矢印構文
  • getArea(width, height) => width * height;
    

    戻り値voidを印刷する方法:
    void main() {
      print(printPerson("   ", 31));
    }
    
    printPerson(name,age){
      print("name = $name, age= $age");
    }
    

    印刷結果:
    name =    , age= 31
    null
    

    オプションのパラメータ
  • オプション命名パラメータ:{params 1,params 2,...}
  • オプション位置パラメータ:[params 1,params 2,...]

  • オプションのネーミングパラメータは、指定したパラメータ名に基づいて対応するパラメータを入力できます.このパラメータの位置に基づいて送信する必要はありません.オプションの位置パラメータは、パラメータが存在する位置に従って順番に入力できます.
    オプションの名前付きパラメータのデモ:
    void main() {
      printPerson("   ");
      printPerson("   ", age: 31);
      printPerson("   ", gender: "Male");
      printPerson("   ", age: 31, gender: "Male");
    }
    
    printPerson(String name, {int age, String gender}){
      print("name = $name, age= $age, gender=$gender");
    }
    

    オプションのネーミングパラメータは、送信可能か非送信可能かがわかります.オプションのネーミングパラメータを入力する場合は、パラメータ名の入力を指定する必要があります.
    オプションの位置パラメータのデモ:
    void main() {
      printPerson2("   ");
      printPerson2("   ", 31);
      printPerson2("   ", 31, "Male");
    }
    
    printPerson2(String name, [int age, String gender]){
      print("name = $name, age= $age, gender=$gender");
    }
    

    オプションの位置パラメータは、送信するか送信しないかがわかります.送信する場合は、順番に送信する必要があります.
    既定のパラメータ
  • 使用=オプションパラメータでデフォルト値
  • を指定
  • デフォルト値はコンパイル時定数
  • のみです.
    void main() {
      printPerson("   ");
      printPerson("   ", age: 58);
      printPerson("   ", age: 58, gender: "Male");
    }
    
    printPerson(String name, {int age = 31, String gender = "Male"}){
      print("name = $name, age= $age, gender=$gender");
    }
    

    印刷結果:
    name =    , age= 31, gender=Male
    name =    , age= 58, gender=Male
    name =    , age= 58, gender=Male
    

    上記のコードのprintPerson()メソッドのオプションパラメータageはデフォルト値31を指定し、genderはデフォルト値「Male」を指定します.ageが入力されていない場合はデフォルトの31を使用し、genderが入力されていない場合はデフォルトの「Male」を使用します.
    メソッドオブジェクト
  • メソッドは、他の変数
  • にオブジェクトとして割り当てることができる.
    void main() {
        var func = printHello;
        func();
        
    }
    
    printHello(){
      print("Hello");
    }
    

    printHello()メソッドは変数funcにオブジェクトとして割り当てることができ,funcを実行するにはメソッドとして呼び出すだけでよいことがわかる.
  • 方法は、パラメータとして他の方法
  • に渡すことができる.
    前章でリストのforEach()メソッドを説明すると、なぜprintを入力するとリストを印刷できる要素が遍歴できるのか疑問に思うかもしれませんが、ここで疑問が解け、forEachソースコードを表示すると次のように見えます.
      void forEach(void f(E element)) {
        for (E element in this) f(element);
      }
    

    forEachはvoidメソッドを受信し、printメソッドはパラメータとして入力され、listを巡回してprintを呼び出して現在の要素を印刷することができます.
    匿名メソッド
  • は変数に値を与えることができ、変数によって
  • を呼び出す.
    void main() {
        var hello = (){print("Hello");};
        hello();
    }
    

    「Hello」と印刷された匿名メソッドを直接hello変数に割り当て、メソッドとして呼び出すことができます.
    上記も以下のように書くことができます.
    ((){print("Hello");})();
    

    ただし、この方法は名前が直接呼び出されていないため、理解しにくいため、使用は推奨されません.
  • は、他の方法において直接呼び出すか、または他の方法
  • に渡すことができる.
    パラメータとして入力される上記の方法と似ています.
    void main() {
        var list = ["1","2","3"];
        list.forEach((item){print(item * 3);});
    }
    
    

    ここでlistのforEach()メソッドを呼び出すと、遍歴した各要素を3回繰り返して印刷し、印刷した結果:
    111
    222
    333
    

    クローズドパッケージ
  • 閉パケットは、方法(オブジェクト)
  • である.
  • 閉パケット定義は、他の方法の内部で
  • である.
  • 閉パケットは、外部メソッド内のローカル変数にアクセス可能であり、その状態
  • を保持する.
    void main() {
        var func = a();
        func();
        func();
        func();
    }
    
    a(){
      int count = 0;
      printCount(){
        print(count++);
      }
      return printCount;
    }
    

    a()メソッドで閉パッケージprintCountを宣言し、それを露出し、変数funcを介してa()メソッドを受信し、複数回呼び出し、印刷結果は:
    0
    1
    2
    

    countの値は順次増加し,閉パケットが外部メソッド内の局所変数にアクセスし,その状態を保持できることを示す.
    匿名メソッドを使用して、閉パッケージを返すこともできます.
    a(){
      int count = 0;
      return (){
        print(count++);
      };
    }