dart function

4811 ワード

function
bool isNoble(int atomicNumber) {
     return _nobleGases[atomicNumber] != null;
  }     


//                       ,          :

printNumber(num number) { //            
     print('The number is $number.');
}

//               ,            :

bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

// =>    ;   { return     }   。 printNumber()   ,
            print()。

注意:矢印(=>)とセミコロン(;)の間に現れる式は1つしかありません.文はこのように使用できません.たとえば、if文をこの2つの記号の間に置くことはできませんが、3元演算子(?:)はできます.
  • オプションパラメータ
  • オプション・パラメータは、オプションのロケーション・パラメータまたはオプションのネーミング・パラメータであってもよいが、オプションのロケーション・パラメータであり、オプションのネーミング・パラメータであってもよい.
    どちらのオプションパラメータもデフォルト値を定義できます.ただし、デフォルト値は、文字値などのコンパイル時の定数でなければなりません.デフォルト値が指定されていない場合、パラメータのデフォルト値はnullになります.
  • オプションのネーミングパラメータ関数を呼び出すときに、paraName:Valueの形式でネーミングされたパラメータを使用できます.例えば:
  • enableFlags(bold: true, hidden: false);
    
    //           ,  {param1, param2, ...}         :
    
    ///   bold   hidden           
    enableFlages({bool bold, bool hidden}) {
         // ...
    }
    
    
    //           :
    ///   bold   hidden       ,        false
    enableFlags({bool bold: false, bool hidden: false}) {
         // ...
    }
    
    // bold     true, hidden   false
    enableFlags(bold:true);
    
    
    
  • オプション位置パラメータ関数のパラメータのセットを[]内に置くと、オプション位置パラメータとしてマークできます:
  • String say(String from, String msg, [String device]) {
      var result = '$from says $msg';
      if (device != null) {
        result = '$result with a $device';
      }
      return result;
    }
    
    //       
    assert(say('Bob', 'Howdy') == 'Bob says Howdy');
    
    //      
    assert(say('Bob', 'Howdy', 'smoke signal') ==
        'Bob says Howdy with a smoke signal');
    
    
  • デフォルトパラメータオプション位置パラメータ使用=デフォルト値を宣言する
  • String say(String from, String msg,
         [String device = 'carrier', String mood]) {
         var result = '$from says $msg';
         if (device != null) {
             result = '$result (in a $mood mood)';
         }
         return result;
    }
    
    assert(say('Bob', 'Howdy') == 
         'Bob says Howdy with a carrier pigeon');
    

    main関数
    //                main(),               。
    // main()        void         List。
    void main() {
         querySelector("#sample_text_id")
             ..text = "Click me!"
             ..onClick.listen(reverseText);
    }
    
    //                main()    :
    
    //                :
    // dart args.dart 1 test
    void main(List arguments) {
         print(arguments);
    
         assert(arguments.length == 2);
         assert(int.parse(arguments[0] == 1);
         assert(arguments[1] == 'test');
    }
    
           
                       。  :
    
    printElement(element) {
         print(element);
    }
    
    var list = [1, 2, 3];
    
    //   printElement            
    list.forEach(printElement);
                    ,      :
    
    var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
    assert(loudify('hello') == '!!! HELLO !!!);
    
    
    

    構文役割ドメインDartは構文役割ドメイン型の言語であり,変数のライフサイクルはgenuineコードのレイアウト静的に決定される.変数がこの領域に存在するかどうかを「カッコの外で遡る」ことができます.
    次に、ネストされたパラメータ付き関数の異なる役割ドメインレベルの例を示します.
    var topLevel = true;
    
    main() {
         var indideMain = true;
    
         myFunction() {
             var insideFunction = true;
    
             nestedFunction() {
                 var insideNestedFunction = true;
    
                 assert(topLevel);
                 assert(insideMain);
                 assert(insideFunction);
                 assert(insideNestedFunction);
            }
        }
    }
    
  • 構文の閉鎖性
  • クローズドとは、関数が変数自体の役割ドメインの外で呼び出されても、その構文役割ドメイン内の変数にアクセスできることを意味します.
    関数の内部には、隣接する役割ドメインで定義された変数が含まれます.次の例では、makeAdder()は変数addByを取得します.返される関数がどこで呼び出されてもaddByを使用できます.
    ///       addBy        
    Function makeAdder(num addBy) {
         return (num i) => addBy + i;
    }
    
    main() {
         //      2   
         var add2 = makeAdder(2);
         //      4   
         var add4 = makeAdder(4);
    
         assert(add2(3) == 5);
         assert(add4(3) == 7);
    }
    
  • 関数の等価性試験
  • 次に、トップレベルの関数、静的メソッド、およびインスタンスメソッドに関する等価性テストを示します.
    void foo() {} // A top-level function
    
    class A {
      static void bar() {} // A static method
      void baz() {} // An instance method
    }
    
    void main() {
      var x;
    
      // Comparing top-level functions.
      x = foo;
      assert(foo == x);
    
      // Comparing static methods.
      x = A.bar;
      assert(A.bar == x);
    
      // Comparing instance methods.
      var v = A(); // Instance #1 of A
      var w = A(); // Instance #2 of A
      var y = w;
      x = w.baz;
    
      // These closures refer to the same instance (#2),
      // so they're equal.
      assert(y.baz == x);
    
      // These closures refer to different instances,
      // so they're unequal.
      assert(v.baz != w.baz);
    }
    
  • 戻り値すべての関数に戻り値があります.戻り値が定義されていない場合、文return nullは関数体の最後に暗黙的に加算されます.