学习Flutter从Dart开始系列(二)之函数

1 前言

前一篇文章我们已经简单介绍了Dart变量的声明以及基本的数据类型。今天我们来进一步学习一下Dart的运算符和函数。

2 主题

Dart中的算术运算符,关系运算符和逻辑运算符与其他语言一样,并没有什么特殊的地方,这里也就不过多的阐述了,我们今天主要看一看Dart中比较有特色的类型判断运算符,条件表达式和级联运算符。

类型判断运算符

类型判断运算符描述
as通常用于子类型向父类型转换
is判断是否是某个类型,如果是返回true
is!判断是否不是某个类型,如果不是返回true
 int i = 1;
 print(i is int);  \\返回true
 print(i is! int);  \\返回false

条件表达式

condition? expr1 : expr2;

如果condition为true返回expr1,否则返回expr2。

var a = 3 - 1 > 0 ? 3 : 1;
print(a);  \\ 3
expr1 ?? expr2

如果expr1不为null则返回expr1,否则则返回expr2。

var isNull = null;
var a = isNull ?? 2;
print(a);  \\ 2

级联操作符

级联运算符 (…) 可以实现对同一个对像进行一系列的操作。 除了调用函数, 还可以访问同一对象上的字段属性。 这通常可以节省创建临时变量的步骤, 同时编写出更流畅的代码。

class Person{
  String name;
  String sex;
}


 Person person = new Person();
  person..name = "Joe"
        ..sex = "male";

需要注意的是如果返回的是void则不能使用级联操作符

var sb = StringBuffer();
sb.write('foo')
  ..write('bar'); // Error: 'void' 没哟定义 'write' 函数。

函数

函数的声明

Dart中函数的声明不用很严格,函数的参数类型和返回值类型可以省略。

main() {

sayHello();  //hello
}

sayHello() {
  print("hello");
}

可选参数

Dart中函数可以存在可选参数,可选参数就是在函数调用的时候可以传入也可以不传入的参数。可选参数要用[]包含,而且只能放在最后。

main() {

sayHello();
sayHello("world");
}

sayHello([name]) {
  if(name != null) {
    print("hello $name");
  } else {
    print("hello");
  }
}

默认参数

默认参数就是在函数声明时就已经确定的参数,它是一个编译期常量。通过 = 声明默认参数。而且要用{}。

main() {                                                           
function1("John");                 
}                                  
                                   
function1(name, {sex = "man"}) {   
  print("$name is a $sex");        
}                                  

匿名函数

匿名函数顾名思义就是没有函数名的函数,在flutter中匿名函数很常见。形如(){}。()中时函数要传入的参数,{}中是函数体。使用起来很方便,不用先声明然后才能调用。

void main() {
  var list = ['apples', 'bananas', 'oranges'];
  list.forEach((item) {
    print('${list.indexOf(item)}: $item');
  });

箭头函数

如果只有一条语句,可以使用箭头函数更加简洁和方便。

void main() {
  var list = ['apples', 'bananas', 'oranges'];
  list.forEach((item)  => print('${list.indexOf(item)}: $item');
  );

函数也是对象

在Dart中函数享有很高的地位,函数也是对象,函数可以作为参数传递。

main() {                                                                        
function1("John");                       
}                                        
                                       
function1(name, {function = sayHi}) {    
 function(name);                       
}                                        
                                       
sayHi(name) {                            
   print("Hi, $name");                 
}                                        

闭包

  • 闭包是一个方法
  • 闭包定义在方法内部
  • 闭包能够访问外部方法的对象且能够持有其状态。
main() {                     
var func = function1();      
func();      // 1            
func();       // 2           
}                            
                           
function1() {                
int a = 1;                 
 return () => print(a++);  
}                            

最后

如果觉得作者写的还行,点赞就是最大的支持。如果有什么问题,有问必回。更多资料和文章可以关注微信公众号QStack​,追寻最纯粹的技术,享受编程的快乐。在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值