函数

  1. /*
  2. 自定义方法的基本格式:
  3. 返回类型 方法名称(参数1,...参数N){
  4. 方法体
  5. }
  6. */
  7. // 例如:
  8. String printStr(String str){
  9. return 'hello $str';
  10. }
  11. void main() {
  12. print(printStr('dart')); // 调用
  13. }

可选参数

  1. // 可选参数可以使用[] 表示, flag 形参需要指定类型的情况下,因为是可能为null 的情况, 所以需要在类型后面 使用 ? 操作符
  2. String printStr(String str, [bool? flag]){
  3. if(flag != null && flag){
  4. return 'hello $str';
  5. }
  6. return 'hello default';
  7. }
  8. void main() {
  9. print(printStr('dart'));
  10. }
  11. // 注意 如果参数可以为空的情况下, 需要判断 flag 不为空的情况

默认参数值

  1. // 默认参数值 需要使用命名参数的形式进行赋值, 否则会报错, 命名参数使用 {} 表示, 调用的方法的时候需要根据参数名字传值
  2. String printStr(String str, {bool flag = true}) {
  3. if (flag) {
  4. return 'hello $str';
  5. }
  6. return 'hello default';
  7. }
  8. void main() {
  9. print(printStr('dart', flag: false));
  10. }

匿名函数

  1. /*
  2. 匿名方法的基本格式:
  3. ([[类型] 参数[, …]]) {
  4. 函数体;
  5. };
  6. */
  7. // 例如:
  8. String Function(String str) printStr = (String str) {
  9. return 'hello $str';
  10. };
  11. void main() {
  12. print(printStr('dart')); // 调用
  13. }

自执行函数

  1. /*
  2. 自执行方法的基本格式:
  3. (([[类型] 参数[, …]]) {
  4. 函数体;
  5. })([[类型] 参数[, …]]);
  6. */
  7. // 例如:
  8. void main() {
  9. ((int n) {
  10. print(n);
  11. })(2);
  12. }

函数递归

  1. /*
  2. 方法的递归:
  3. 函数自身调用自身, 需要给把钥匙结束,否则会导致死循环
  4. */
  5. // 例如: 求 1- 100 的和
  6. int sum = 0;
  7. int addFn(int n) {
  8. sum+=n;
  9. if(n == 100) return sum;
  10. return addFn(n+1);
  11. }
  12. void main() {
  13. int val = addFn(1);
  14. print(val);
  15. }

闭包

  1. /*
  2. 全局变量: 全局变量常驻内存,但是会污染全局。
  3. 局部变量: 不常驻内存会被垃圾回收机制回收,但是不会污染全局。
  4. 闭包:
  5. 1. 常驻内存
  6. 2. 不污染全局
  7. */
  8. printInfo(){
  9. int num = 123;
  10. return (){
  11. num++;
  12. print(num);
  13. };
  14. }
  15. void main() {
  16. printInfo()();
  17. }