Dart: 関数、関数定義、オプションのパラメーター

ヒント: 記事を書いた後、目次を自動生成することができます. 生成方法は右のヘルプドキュメントを参照してください.


序文

この記事は、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 の関数に関する著者の関連学習です。

おすすめ

転載: blog.csdn.net/qjyws/article/details/128806176