dart 怎么判断function的返回值为空_Dart快速入门知识分享

什么是Dart语言

Dart语言是谷歌公司在2011年推出的新的计算机语言。Dart可以应用于web、服务器、移动应用和物联网等领域的开发。Dart的终极目标是取代JavaScript。Dart设计完全脱离JavaScript,因此它没有向后兼容JavaScript。Dart语言的发展始终一直都是不温不火。

为什么要用Dart

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。Flutter选择了Dart作为开发语言,因此想学习Flutter就必须先学习好Dart。

环境搭建

下载和安装Dart

可以从官网下载到最新版本的Dart。

ddcab9bb012179da96cfed1d6bdd083c.png

双击下载到的exe文件,依照向导指示完成Dart的安装。

安装验证

  1. window键+r打开运行窗口
  2. 在运行窗口的打开输入框输入cmd,然后点击确定

8f27bed96d9fb803e68b3190c7a827e8.png
  1. 在命令行界面输入命令并按回车
dart --version

7984f0d7cd5488a5cf157fe1b3e9ce22.png

安装Visual Studio Code

很多常见的IDE都有Dart的插件可以使用,这里推荐使用Visual Studio Code加插件进行Dart开发。可以在官网下载到Visual Studio Code,安装完成后可以开始添加插件。

安装Dart插件

580a5984b9c42239ff9cd0d7f66525ff.png

安装Code Runner插件

66a569aa7a75c088174b67c9efb3cb0b.png

helloworld

  1. 在VSC新建文件
  2. 输入以下代码
void main(){
    print('hello world');
}
  1. 在文件上按鼠标右键,选择点击Run Code运行

11e7d571c125daa95ce3cd9cddedd359.png
  1. 运行结果

f4b37740304caa4237848d41dfbc8744.png

变量声明

var

使用方式与JavaScript的var一致,可以接收任意类型的值。不同的地方是,Dart是强类型语言,赋值以后类型就确定下来,不能再更改为其它类型。

var name;
name = 'zhangsan';
// 下面的代码在dart中会报错,原因是变量name类型已经确定为String
// 类型一旦确定就不能再更改.
name = 100;

final和const

final和const类似都可以定义一个常量。它们的区别是const在声明必须赋值,而final可以先预声明需要使用时再赋值。

// const和final在声明字面量时作用是一致的
const PI = 3.14159;
final PI2 = 3.14159;
// 以下代码会报错,原因是常量赋值后就不能再做修改
// PI = 3.1415926535;

final now  = new DateTime().now();
// 以下代码在dart中会报错,const在编译时就必要赋值,而new DateTime().now()
// 在运行才能产生具体的
// const now2 = new DateTime().now();

数据类型

Dart内置节以下几种数据类型

  • String
  • Number
  • Boolean
  • List(Dart没有数组,类似于数组的作用)
  • Map
  • Runes(UTF-32字符集的字符)
  • Symbols

通过一段代码来演示以上的数据类型

void main(){
    // Number
    int a = 1;
    double b = 0.1;

    // String
    var s1 = 'this is a string';
    String s2 = "this is another string";

    // boolean
    var flag = true;
    bool flag2 = false;

    // List
    List list = [1, 2, 3, 4, 5];
    List<String> list2 = ['zhang', 'san', "123", "456"];
    List<dynamic> list3 = [1, true, 'haha', 1.0];

    // Map
    Map person = new Map();
    map['name'] = 'zhangsan';
    map['age'] = 22;

    // Dart使用runes来获取UTF-32字符集的字符。String的codeUnitAt and codeUnit属性可以获取UTF-16字符集的字符
    var clapping = 'u{1f44f}';
    print(clapping); // 打印的是拍手emoji的表情

    // symbols
    print(#s == new Symbol("s")); // true
}

函数

函数的返回值

Dart是面向对象的编程语言,所以函数也是一个对象,还有一种类型Function,也就是说函数可以赋值给某个变量或者作为参数传给另外的函数。Dart建议给函数添加上返回类型,但是不加返回类型的函数同样可以正常工作,另外还可以用lamda表达式,比如下面的代码:

// 声明返回类型
int add(int a, int b) {
    return a + b;
}

// 不声明返回类型
add2(int a, int b) {
    return a + b;
}

// =>是return语句的简写
add3(a, b) => a + b;

main() {
    print(add(1, 2)); // 3
    print(add2(2, 3)); // 5
    print(add3(1, 2)); // 3
}

命名参数、位置参数、参数默认值

命名参数

使用花括号将函数的参数括起来就是定义了命名参数,如下面的代码所示:

sayHi({String name}) {
    print("hello, my name is $name");
}

sayHi2({name: String}) {
    print("hello, my name is $name");
}

main() {
    // 打印 hello, my name is zhangsan
    sayHi(name: 'zhangsan');

    // 打印 hello, my name is wangwu
    sayHi2(name: 'wangwu');
}

从上面代码可以看到,命名参数时可以使用{type paramName}或者{paramName: type}两种方式声明参数,而调用命名参数时,需要以funcName(paramName: paramValue)的形式调用。

命名参数的参数并不是必须的,所以上面的代码中,如果调用sayHi()不带任何参数,也是可以的,只不过最后打印出来的结果是:hello, my name is null。

位置参数

使用中括号[]括起来的参数是函数的位置参数,代表该参数可传可不传,位置参数只能放在函数的参数列表的最后面,如下代码所示:

sayHello(String name, int age, [String hobby]) { // 位置参数可以有多个,比如[String a, int b]
    var msg = "hello, this is $name and I am $age years old";
    if (hobby != null) {
        msg = "$msg, my hobby is $hobby");
    }
    print(msg);
}

main() {
    // hello, this is zhangsan and I am 20 years old
    sayHello("zhangsan", 20);
    // hello, this is zhangsan and I am 20 years old, my hobby is play tv game
    sayHello("zhangsan", 20, "play tv game");
}

参数默认值

可以为命名参数或者位置参数设置默认值,如下代码所示:

// 命名参数的默认值
int add({int a, int b = 3}) {
    return a + b;
}

// 位置参数的默认值
int sum(int a, int b, [int c = 3]) {
    return a + b + c;
}

main()函数

不论在Dart还是Flutter中,必须都需要一个顶层的main()函数,它是整个应用的入口函数,main()函数的返回值是void,还有一个可选的参数,参数类型是List。

匿名函数

大多数函数都是有名称的,比如main() hello()等,但是也可以写匿名函数,如果对JavaScript比较熟悉,看到下面的肯定也不会陌生:

test(Function callback) {
  callback("hello");
}

main() {
  test((param) {
    // 打印hello
    print(param);
  });
}

匿名函数类似于Java中的接口,往往在某个函数的参数为函数时使用到。

函数返回值

所有的函数都有返回值,如果没有指定return语句,那么该函数的返回值为null。

运算符

Dart中的运算符与JavaScript中的类似,比如++a、a == b、b ? a : b,但是也有一些与JavaScript不太一样的运算符,下面用代码说明:

main() {
    // 与JavaScript相同的运算符操作

    int a = 1;
    ++a;
    a++;
    var b = 1;
    print(a == b);  // false
    print(a * b); // 3
    bool real = false;
    real ? print('real') : print('not real'); // not real
    print(real && a == b); // false
    print(real || a == 3); // true
    print(a != 2); // true
    print(a <= b); // false
    var c = 9;
    c += 10;
    print("c = $c"); // c = 19
    print(1<<2); // 4

    // 与JavaScript不一样的运算符操作

    // is运算符用于判断一个变量是不是某个类型的数据
    // is!则是判断变量不是某个类型的数据
    var s = "hello";
    print(s is String); // true
    var num = 6;
    print(num is! String); // true

    // ~/才是取整运算符,如果使用/则是除法运算,不取整
    int k = 1;
    int j = 2;
    print(k / j); // 0.5
    print(k ~/ j); // 0

    // ??=运算符 如果 ??= 运算符前面的变量为null,则赋值,否则不赋值
    var param1 = "hello", param2 = null;
    param1 ??= "world";
    param2 ??= "world";
    print("param1 = $param1"); // param1 = hello
    print("param2 = $param2"); // param2 = world

    // ?.运算符
    var str1 = "hello world";
    var str2 = null;
    print(str1?.length); // 11
    print(str2?.length); // null
    print(str2.length); // 报错
}

控制流程

if...else, switch, for, while, try...catch语句跟JavaScript中都类似,try...catch语句可能稍有不同,下面用一段代码说明:

main() {
    // if...else语句
    int score = 80;
    if (score < 60) {
      print("so bad!");
    } else if (score >= 60 && score < 80) {
      print("just pass!");
    } else if (score >= 80) {
      print("well done!");
    }

    // switch语句
    String a = "hello";
    // case语句中的数据类型必须是跟switch中的类型一致
    switch (a) {
      case "hello":
        print("good weather");
        break;
      case "world":
        print("good morning");
        break;
      default:
        print("good bye");
    }

    // for语句
    List<String> list = ["a", "b", "c"];
    for (int i = 0; i < list.length; i++) {
      print(list[i]);
    }
    for (var i in list) {
      print(i);
    }
    // 箭头函数参数必须要用圆括号扩起来
    list.forEach((item) => print(item));

    // while语句
    int start = 1;
    int sum = 0;
    while (start <= 100) {
      sum += start;
      start++;
    }
    print(sum);

    // try...catch语句
    try {
      print(1 ~/ 0);
    } catch (e) {
      // IntegerDivisionByZeroException
      print(e);
    }
    try {
      1 ~/ 0;
    } on IntegerDivisionByZeroException { // 捕获指定类型的异常
      print("error"); // 打印出error
    } finally {
      print("finally"); // 打印出finally
    }
}

总结

在这里我们学习了怎样配置Dart的开发环境,对变量声明、数据类型、函数、运算符、控制流程语法进行说明,为更深入学习Dart或者Flutter打下基础。

想知道更多IT干货和课程吗?请关注恒企行家网校微信服务号哦~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值