dart function
4811 ワード
function
注意:矢印(=>)とセミコロン(;)の間に現れる式は1つしかありません.文はこのように使用できません.たとえば、if文をこの2つの記号の間に置くことはできませんが、3元演算子(?:)はできます.オプションパラメータ オプション・パラメータは、オプションのロケーション・パラメータまたはオプションのネーミング・パラメータであってもよいが、オプションのロケーション・パラメータであり、オプションのネーミング・パラメータであってもよい.
どちらのオプションパラメータもデフォルト値を定義できます.ただし、デフォルト値は、文字値などのコンパイル時の定数でなければなりません.デフォルト値が指定されていない場合、パラメータのデフォルト値はnullになります.オプションのネーミングパラメータ関数を呼び出すときに、paraName:Valueの形式でネーミングされたパラメータを使用できます.例えば: オプション位置パラメータ関数のパラメータのセットを[]内に置くと、オプション位置パラメータとしてマークできます: デフォルトパラメータオプション位置パラメータ使用=デフォルト値を宣言する
main関数
構文役割ドメインDartは構文役割ドメイン型の言語であり,変数のライフサイクルはgenuineコードのレイアウト静的に決定される.変数がこの領域に存在するかどうかを「カッコの外で遡る」ことができます.
次に、ネストされたパラメータ付き関数の異なる役割ドメインレベルの例を示します.構文の閉鎖性 クローズドとは、関数が変数自体の役割ドメインの外で呼び出されても、その構文役割ドメイン内の変数にアクセスできることを意味します.
関数の内部には、隣接する役割ドメインで定義された変数が含まれます.次の例では、makeAdder()は変数addByを取得します.返される関数がどこで呼び出されてもaddByを使用できます.関数の等価性試験 次に、トップレベルの関数、静的メソッド、およびインスタンスメソッドに関する等価性テストを示します.戻り値すべての関数に戻り値があります.戻り値が定義されていない場合、文return nullは関数体の最後に暗黙的に加算されます.
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になります.
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);
}