Dart基础语法(三)——方法,参数与运算符

方法

类似于C语言的函数?

void print1(String a)
{
  print("I'm $a."); 
}
void print2(b)
{
  print("I'm $b.");
}
void print3(String name) => print("I'm $name.");
void main()
{
  print1("roadkiller");
  print2("roadkiller");
  print3("roadkiller");
}

方法对象

void main(){
  var hello = printhello;//var 换成Function也没问题的
  hello();//输出hello
}
void printhello()
{
  print("hello");
}
void main()
{
  var list = [1,2,3,4,5];
  print(getList(list, multiply));//把列表每个元素求平方然后打印
}
List getList(List a,int b(int a))
{
  for(int i=0;i<a.length;i++)
  {
    a[i]=b(a[i]);
  }
  return a;
}
int multiply(int n)
{
  return n*n;
}

 匿名方法

void main()
{
  var func = (a){
    return a*a;
  };
  print(func(30));//900

  var list = [1,2,3,4,5];
  powList(list, (int a){ return a*a; });
  print(list);
}
List powList(List a,int b(int a))
{
  for(int i=0;i<a.length;i++)
  {
    a[i]=b(a[i]);
  }
  return a;
}

 还可以这样

void main()
{
  var func = (a){
    return a*a;
  };
  print(func(30));//900

  var list = [1,2,3,4,5];
  powList(list);
  print(list);
}
List powList(List a)
{
  var func = (int n){ return n*n; };//直接在方法里写匿名方法
  for(int i=0;i<a.length;i++)
  {
    a[i]=func(a[i]);
  }
  return a;
}

可选参数

细心的朋友们会发现我省略了返回类型,对这就是简写,其实甚至可以参数都不用写类型的,不过小心混乱

void main(){
  printperson("roadkiller");
  printperson("roadkiller",age:18);
  printperson("roadkiller",age:18,gender:"male");
  printperson("roadkiller",gender: "male");

  printperson2("roadkiller");
  printperson2("roadkiller",18);
  printperson2("roadkiller",18,"male");
}
printperson(String name,{int age,String gender})//命名参数
{
  print("name = $name,age = $age,gender = $gender");
}
printperson2(String name,[int age,String gender])//位置参数
{
  print("name = $name,age = $age,gender = $gender");
}

运行结果

 

默认参数值

使用 = 传给参数默认的值,如果不这样那么参数的值默认为null

默认值只能是编译期常量

void main(){
  printperson("roadkiller");
  printperson("roadkiller",age:18);
  printperson("roadkiller",age:18,gender:"male");
}
printperson(String name,{int age = 18,String gender = "male"})
{
  print("name = $name,age = $age,gender = $gender");
}

这样就没有null了,而且如果输入数据有某个参数,则会覆盖掉默认参数值

将函数作为参数传递给另一个函数

void main(){
  List list = [1,2,3];
  list.forEach(printEveryElement);
}
void printEveryElement(element){
  print(element);
}

代码箭头式简写,只适用于return只有一个表达式

void main() {
  print(loudify("roadkiller"));
}
String loudify(String info)
{
  info = "!!!${info.toUpperCase()}!!!";
  return info;
}

等价于

void main() {
  var loudify = (info) => "!!! ${info.toUpperCase()} !!!";
  print(loudify("roadkiller"));
}

闭包

闭包是一个方法,它定义在其他方法内部

闭包能访问外部方法内的局部变量,并持有其状态

void main(){
  var func = count();
  func();//0
  func();//1
  func();//2
  func();//3

}
count(){
  int cnt = 0;
  printcnt(){
    print(cnt++);
  }
  return printcnt;
}
void main(){
  Function add2 = makeAdd(2);
  Function add3 = makeAdd(3);
  print(add2(3));
  print(add3(5));
}
Function makeAdd(int plus_number)
{
  return (int n) => n + plus_number;
}

运算符大部分和C语言差不多

说几个不一样的叭

1、有一个赋值运算符是  ?==

意思是如果未赋值则赋后面的值,如果已经赋值那么后面是无效的

int a;
a ?== 10;//a最后为10

int b = 5;
b ?== 10;//b最后为5

2、~/ 是除法取整,结果一定是整数

3、?? 运算符  若第一个是null那么赋第二个,否则赋第一个,例子如下

void main(){
  int a;
  int b=3;
  int c = a??b;
  print(c);//3

  int d = 5;
  int e = 10;
  int f = d??e;
  print(f);//5
}
发布了99 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43721423/article/details/97246338