Dart基础入门(四)Dart中的方法

前言:

上次跟你们说过,从这篇开始我们就进入到面向对象阶段的学习了,不过呢,在真正接触到面向对象的核心知识前,我们有必要先学习一下Dart中的方法,我们首先要知道的是,面向对象指的是一种编程思想,简单来说就是把事情交给对象去做,不用自己亲自动手,现在听起来可能有点不太理解,很正常,因为它是一个很深层次的概念,你只要理解透了这种思想,以后学习其他面向对象语言就很容易上手了。我相信等你们看完本系列文章,会对面向对象有一定认知的。在Dart中,一切都是对象,方法也不例外。所以说方法里面也涉及到了面向对象的思想。好了,下面依旧给出前面系列文章地址。接下来开始今天的介绍吧!

  1. Dart开发环境搭建这一篇就够了
  2. Dart基础入门(一)变常量与数据类型
  3. Dart基础入门(二)运算符及条件表达式
  4. Dart基础入门(三)循环与分支和控制语句 

 一,方法定义:

方法是语句的集合,它们在一起执行一个功能。它在程序中被创建,在其他地方被引用。Dart当中方法最基本的定义如下:

返回类型  方法名 (参数1,参数2,...){ 方法体...     return 返回值}

还记得我们的程序入口main 方法么,我们以前都是写 void main(){...}  其实main方法也是可以有参数的,只不过你没法在代码中直接给它传值,注意main方法的参数只有list类型,你可以这样写测试 void main(List args){print(args);} 这样直接运行的话就是会打印一个空list  [],如果想给它传值的话,我们就需要使用命令行的方式来添加值并运行代码示例了,下面我截了一张图给大家看看具体怎么操作的,有基础的同学可能会觉得和Java很类似,我是在vscode里面演示的,大家也可以在系统cmd里面操作,这就是为什么当初要配置环境变量了,配置了这些你就可以使用Dart的一些命令了。

这样的话,你就可以打印main方法的参数值了,其实这个可能在工作中用不到很多,这里只是让小伙伴了解一下,好了,接下来我们还是到代码中来看看,其他方法的定义吧!

void main(List args) {
  print(args);
  print(getNameOrAge('james', 34));
  print(getName('kobe'));
  getNameandAge('curry',28);
}
//这是最基本的方法定义实例
// String getNameOrAge(String name,int age){
//    return 'name:$name  age:$age' ;
// }

/**
 *Dart中可以使用箭头语法来简写return语句,这是Dart的一个特性,很常用
 *前提是只有一个表达式
 */
int flag = 1;
getNameOrAge(String name,int age) => flag == 2 ? 'name:$name  age:$age':23;
    
/**
 *Dart中方法返回类型和参数类型都是可以省略的
 *方法都是会有一个返回值的,不写的话就是null
 */
getName(name){
  // return 'name:$name' ;  不给返回值默认返回null
}
//void是无返回值类型,可以省略掉
void getNameandAge(String name,int age){
   print('name:$name  age:$age');
}

二,可选参数:

可选参数是什么,就是我们在调用方法的时候,参数可传可不传,它让我们使用方法传参时能更加灵活,我们通过代码来看看可选参数的定义以及用法示例!

void main(){
   /**
   * 可选参数方法定义方式(共同点就是可选参数不能定义在常规参数前面且传参时可选传):
   * 1.可选命名参数:{param1,param2,...}
   * 定义时指定参数名称,传参时按名称来传,传参位置顺序可随意,
   * 2.可选位置参数:[param1,param2,...]
   * 这种定义时,传参必须按照类型顺序传
   */
   printPerson('james');
   printPerson('james',sex:'man');
   printPerson('james',age:34,sex:'man');

   printPerson2('kobe');
   printPerson2('kobe',38);
   printPerson2('kobe',38,'man');
   
   /**
   * 可变参数添加默认值,当不传值时就取默认值,传值就覆盖
   */
   printPerson3('杜兰特');
   printPerson3('杜兰特',age:34,sex:'women');
}

printPerson(String name,{int age,String sex}) => print('name:$name,age:$age,sex:$sex');
    
printPerson2(String name,[int age,String sex]) => print('name:$name,age:$age,sex:$sex');

printPerson3(String name,{int age = 30,String sex = 'man'}) => print('name:$name,age:$age,sex:$sex');

三,方法对象:

我们刚才说dart中的一切都是对象,那么方法也是对象,在Dart中方法有一个特定的类型叫Function,具体的我们还是通过代码来看一看

/**
* dart中一切都是对象,所以方法也是对象
* 1.方法可作为对象赋值给其他变量
* 2.方法可作为参数传递给其他方法
*/
void main(){
   /**
    *第一种用法的示例
    */
   //var fun = printHello;
   Function fun = printHello;
   fun();
   /**
    *第二种用法示例
    */
   var list = [5,8,2];
   list.forEach(print);
   var list2 = ['l','o','v','e'];
   print(listTimes(list2,times));
}
/**
 * 箭头方法可使用在方法体只有一个表达式的时候
 */
printHello() => print('kobe');

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

String times(str) => str*3;

四,匿名方法:

匿名方法和普通的方法不太一样,它没有具体的返回类型,也没有方法的名字,而且它需要定义在main方法里面,它既然是方法,所以方法有的特性它也一样,还是那句话,Dart中一切都是对象。我们通过代码来看看吧!

/**
 *匿名方法的基本格式:
 *(参数){方法体... return}
 */
void main(){
  //这种方式不推荐使用,其实就是把整个匿名方法当作参数了 (匿名方法)();
  // ((){
  //    print('james');
  // })();
  
  //var fun = (str) => print('str = $str');

  var fun = (str){
    print('str = $str');
  };
  //把匿名方法赋值给变量
  fun('james');

  var list2 = ['l','o','v','e'];

  //print(listTimes(list2,(str){return str*3 ;}));
  print(listTimes2(list2));
}

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

List listTimes2(List list){
    var fun = (str){return str*3;};
    for (var i = 0; i < list.length; i++) {
      list[i] = fun(list[i]);
    }
    return list;
}

五,闭包:

Dart中的闭包和Python,js,kotlin等语言当中的都很类似,可能很多人都不理解是什么意思,首先闭包是一个方法那么也就是对象,它是定义在其他方法内部的,我们使用闭包最大的用处是让其访问外部方法的局部变量,并能持有其状态。要知道我们是没办法在其他地方访问方法的局部变量的,这个时候闭包就能帮我们解决这个问题,好了,具体我们到代码里面来看看!

/**
* 闭包:
* 1.闭包是一个方法(对象);
* 2.闭包定义在其它方法内部;
* 3.闭包能访问外部方法内的局部变量,并持有其状态
*/
void main(){
   var fun = a();
   fun();
   fun();
   fun();
   fun();
}

//闭包是什么,这个时候,我们就可以称getFlag方法或者匿名方法是闭包了。
a(){
  int flag = 1;
  // getFlag(){
  //   print(flag++);
  // }
  // return getFlag;
  return (){print(flag++);};
}

好了,通过上面的五部分的介绍,我们基本把Dart中涉及到方法的部分,给说完了。小伙伴们有没有体会到一点面向对象的思想呢,当然这里只是涉及到了对象,但也可以作为我们进入面向对象编程世界的第一步了,那么从下篇文章开始我们就真正开始接触到面向对象的核心知识了,小伙伴们有没有很期待呢!希望小白们把这前面的文章都消化一下,后面理解起来就更容易了。本篇文章代码示例地址在这 https://github.com/OMGyan/dart_study/tree/master/chapter5

以上!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值