ヒント: 記事を書いた後、目次を自動生成することができます. 生成方法は右のヘルプドキュメントを参照してください.
記事ディレクトリ
序文
この記事は、Dart の関数知識に関する著者の学習記録です。
1.Dartでの関数定義
組み込み関数
組み込み関数、Dart 言語自体によって実行される関数
print('Dart');//Dart语言内置函数
カスタム機能
Dart のカスタム関数の形式は次のとおりです。
返回类型 方法名称(参数1类型 参数1,参数2类型 参数2,...){
方法体
return 返回值;
}
Dart では関数の戻り値の型は省略できますが、ユーザーが呼び出しエラーを極力起こさないようにするためにも、記述することをお勧めします。
Dart では、関数スコープのスコープ制限は他の言語と一致しています
2. 関数のパラメータ受け渡し
オプションのパラメータ
オプションのパラメーターは Dart で定義できます。「[]」記号で囲まれたパラメーターはオプションのパラメーターです。
String printUserInfo(String username, [int age]) {
if (age != null) {
return "姓名:$username---年龄:$age";
}
return "姓名:$username---年龄保密";//姓名:张三---年龄保密
}
print(printUserInfo('张三'));
デフォルトのパラメータ
Dart はデフォルト パラメータを定義することもできます. デフォルト パラメータには, 呼び出し元が値を渡さない場合のデフォルト値があります. 定義方法は次のとおりです.
String printUserInfo(String username, [String sex = '男', int age]) {
if (age != null) {
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username---性别:$sex--年龄保密";
}
print(printUserInfo('张三'));//姓名:张三---性别:男--年龄保密
print(printUserInfo('小李', '女'));//姓名:小李---性别:女--年龄保密
print(printUserInfo('小李', '女', 30));//姓名:小李---性别:女--年龄:30
名前付きパラメーター
Dart には名前付きパラメーターがあります. いわゆる名前付きパラメーターとは, 関数が呼び出されるときに, パラメーター名を指定してパラメーターを渡すことができることを意味します. 名前付きパラメーターが値を渡すとき, 渡されたパラメーターの名前を指定する必要があります. parameter. パラメータ名を指定しないと、エラーが報告されます。
String printUserInfo(String username, {
int age, String sex = '男'}) {
if (age != null) {
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username---性别:$sex--年龄保密";
}
print(printUserInfo('张三', age: 20, sex: '未知'));//姓名:张三---性别:未知--年龄:20
print(printUserInfo('张三', 20, '未知'));//报错
関数はパラメーターとして渡されます
Dart は、次のように、関数自体をパラメーターとして渡すこともサポートしています。
fn(callback){
callback();
}
fn((){
print("此方法为一个参数函数");//此方法为一个参数函数
});
3. 特殊機能
アロー関数
Dartにもアロー関数はありますが、Dartのアロー関数はjsとは違い、Dartのアロー関数はメソッド本体が1行しかなく、{}を付けても付けなくても存在しません。メソッド本体の 2 行目と同時にメソッド本体のステートメントの最後にセミコロンを追加することはできません。アロー関数は、例としてコレクション トラバーサルを使用して示されています。
List list = ['苹果', '香蕉', '西瓜'];
list.forEach((value) {
print(value);
});
list.forEach((value) => print(value));//匿名函数不加{},后面不能加;
list.forEach((value) => {
print(value)});//增加{},{}中也不能加;
自己実行機能
js と同様に、Dart は自己実行関数を定義し、匿名関数を定義し、同時に匿名関数を呼び出すことができます。メソッドは次のとおりです。
((int n) {
print(n);//12
print('我是自执行方法');//我是自执行方法
})(12);
上記の 2 つの効果は、自己実行関数を定義し、同時に自己実行関数にパラメーターを渡します。
関数クロージャ
Dartで関数クロージャを説明する前に、まず関数クロージャを理解しましょう
関数クロージャの背景は次のとおりです。
1. グローバル変数の特性: グローバル変数はメモリに常駐し、グローバル変数はグローバル変数を汚染します 2. ローカル
変数の特性: 非常駐メモリはガベージ メカニズムによってリサイクルされ、グローバル変数を汚染しません
今実現したい機能
1. 永久記憶
2. 地球汚染ゼロ
関数クロージャの概念は次のとおりです。
闭包:当内部函数被返回到外部并保存时,一定会产生闭包,闭包会产生原来的作用域链不释放,过度的闭包可能会导致内存泄露,或加载过慢。
クロージャの機能は次のとおりです。
这时候闭包可以解决这个问题,闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
クロージャーは次のように書かれています
main() {
fn() {
var a = 123; /*不会污染全局 常驻内存*/
return () {
a++;
print(a);
};
}
var b = fn();
b();//124
b();//125
b();//126
}
要約する
上記は、Dart の関数に関する著者の関連学習です。