Dart学习笔记-方法

Posted 追到梦的魔术师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dart学习笔记-方法相关的知识,希望对你有一定的参考价值。

一、方法定义

  • 方法也是对象,并且有具体类型Function
  • 返回类型、参数类型都可以省略
  • 箭头语法:=> expr 是return expr;缩写。只适用于一个表达式
  • 方法都有返回值。如果没有制定,默认return null左后一句执行
//方法也是对象,并且有具体类型Function
String getPerson(String name, int age)
  return "名字:$name,年龄:$age";


printPerson(name,age)
  print("名字:$name,年龄:$age");


//=>语法

getPerson1(name, age) => "名字:$name,年龄:$age";
  print(getPerson('张三',12));
  printPerson('张三',12);
  print(getPerson1('张三',12));

二、可选参数

  • 可选命名参数:param1,param2,…
  • 可选位置参数:[param`,param2,…]
//1、可选命名参数param1,...  
printPersionOptional1(name,age,gender) => "名字:$name,年龄:$age,性别:$gender";

//2、可选位置参数[param1,...]
printPersionOptional2(name,[age,gender]) => "名字:$name,年龄:$age,性别:$gender";

注意:可选参数必须在具体参数之后!!!

三、默认参数

  • 使用=在可选参数指定默认值
  • 默认值只能是编译时常量
//默认参数
printPersionOptionalDefault(name,age=12,gender="男") => "名字:$name,年龄:$age,性别:$gender";

归纳代码:


//要达到可选命名参数的用法,那就在定义函数的时候给参数加上 
void enable1Flags(bool bold, bool hidden) => print("$bold , $hidden");

//定义可选命名参数时增加默认值
void enable2Flags(bool bold = true, bool hidden = false) => print("$bold ,$hidden");

//可忽略的参数在函数定义时用[]符号指定
void enable3Flags(bool bold, [bool hidden]) => print("$bold ,$hidden");

//定义可忽略参数时增加默认值
void enable4Flags(bool bold, [bool hidden = false]) => print("$bold ,$hidden");

//可选命名参数函数调用
enable1Flags(bold: true, hidden: false); //true, false
enable1Flags(bold: true); //true, null
enable2Flags(bold: false); //false, false

//可忽略参数函数调用
enable3Flags(true, false); //true, false
enable3Flags(true,); //true, null
enable4Flags(true); //true, false
enable4Flags(true,true); // true, true

四、对象方法

  • 方法可作为对象赋值给其他变量
  • 方法可作为参数传递给其他方法
void printHrello()
  print("Hello");


void printDoubleNumber(num)
  print(num*5);



List listTimes(list,times(str))
  for(var index = 0; index < list.length; index ++)
    list[index] = times(list[index]);
  
  return list;


List listTimes1(list)
  var fun = (str)=>str*3;
  for(var index = 0; index < list.length; index ++)
    list[index] = fun(list[index]);
  
  return list;


times(str) => str*3;

  Function func = printHrello;
  func();
  
  var list = [1,2,3,4];
  //forEach接收一个Function类型的参数
  list.forEach(print);
  list.forEach(printDoubleNumber);
  
  print(listTimes(['a','b','c','d'],times));

执行结果:

Hello
1
2
3
4
5
10
15
20
[aaa, bbb, ccc, ddd]

五、匿名方法

匿名方法特征:

  • 可赋值给变量,通过变量进行调用
  • 可在其他方法中直接调用或传递给其他方法
  //匿名方法
  var func = (str)
    print('======= $str');
  ;
  func("Hlelo");
  
  //匿名方法直接执行
  (()
    print('=======');
  )();
  
  
  print(listTimes(['a','b','c','d'],(str)=>str*5));
  print(listTimes1(['a','b','c','d']));

六、闭包

  • 闭包是一个方法(对象)
  • 闭包定义在其他方法内部
  • 闭包能够访问外部方法内的局部变量,并持有其状态
a()
  int count = 0;
  printCount()
   print(count++);
  
  return printCount;

  var func = a();
  func();
  func();
  func();
  func();

执行结果:

0
1
2
3

另一种写法:

a()
  int count = 0;
//   printCount()
//    print(count++);
//   
  return ()
    print(count++);
  ;

执行结果仍然是:

0
1
2
3

以上是关于Dart学习笔记-方法的主要内容,如果未能解决你的问题,请参考以下文章

Dart学习笔记-面向对象编程

dart学习笔记

Dart学习笔记:搭建Dart开发环境

Dart语言学习笔记

Flutter学习笔记·初识Dart语言

Dart语法学习-函数类与运算符 学习笔记