Flutter学习笔记-Dart语言学习(二)

重要概念

Dart中所有变量都是基于类的:

所有变量引用的都是对象,每个对象都是一个的实例。数字函数以及null都是对象。除了null以外(如果你开启了空安全), 所有的类都继承于Object类。

当你在学习 Dart 语言时, 还应该牢记以下几点:

  • 尽管 Dart 是强类型语言,但是在声明变量时指定类型是可选的,因为 Dart 可以进行类型推断。在之前的示例代码中,变量number的类型被推断为int类型。
void main() {
    // number变量被推断为int类型
    var number = 2;
    // str变量被推断为String类型
    var str = 'abc';
}
  • 如果你开启了 空安全,变量在未声明为可空类型时不能为null。你可以通过在类型后加上问号 (?) 将类型声明为可空。例如,int?类型的变量可以是整形数字或null。如果你明确知道一个表达式不会为空,但 Dart 不这么认为时,你可以在表达式后添加 ! 来断言表达式不为空(为空时将抛出异常)。例如:int x = nullableButNotNullInt!
void main() {
    // 开启空安全(默认开启)时,使用?标识符可以对变量赋值null
    int? test;
    test = null;
    test = 123;
}
  • 如果你想要显式地声明允许任意类型,使用Object?(如果你开启了空安全)、Object或者特殊类型dynamic(将检查延迟到运行时进行)。
void main() {
    // 以下三种均为任意类型变量的声明示例
    // 使用Object声明的变量可以是任意非空类型
    Object any2 = true;
    any2 = 123;
    // 在开启空安全时,除非使用了?标识符,否则变量不可为空(null)
    Object? any = null;
    any = 1;
    any = 'abc';
    // dynamic将在运行时在判断变量类型
    dynamic any3 = '123';
    any3 = 3.2;
    print('any: $any, any2: $any2, any3: $any3');
}
  • Dart 支持泛型,比如List<int>(表示一组由int对象组成的列表)或 List<Object>(表示一组由任何类型对象组成的列表)。
void main() {
    // 指定类型int
    List<int> numberArr = [1, 2];
    // 任意非空类型
    List<Object> anyArr = [1, 'a', false];
    // Object?可包含null
    List<Object?> allArr = [1.3, 'b', null];
    print('$numberArr, $anyArr, $allArr');
}
  • Dart 支持顶级函数(例如main方法),同时还支持定义属于类或对象的函数(即静态和实例方法)。你还可以在函数中定义函数(嵌套或局部函数)。
// 顶级函数,定义在main函数以外,可在任意位置被调用
void testFunc(){
    // 嵌套或局部函数,只能在定义它的testFunc函数中被调用
    int testFunc2(){
        return 2;
    }
    print(testFunc2());
}
void main() {
    testFunc();
}
  • Dart 支持顶级变量,以及定义属于类或对象的变量(静态和实例变量)。实例变量有时称之为域或属性。
// 顶级变量,定义在main函数以外,可在任意位置被访问
int globalNum = 123;
void testFunc(){
    print(globalNum);
}
void main() {
    testFunc();
    print(globalNum);
}
  • Dart 没有类似于 Java 那样的 public、protected 和 private 成员访问限定符。如果一个标识符以下划线 (_) 开头则表示该标识符在库内是私有的(每个 Dart 程序都是一个库)。可以查阅库和可见性获取更多相关信息。
// 以 _ 开头表示_privateVar是当前库的私有变量
int _privateVar = 1;
  • 标识符 可以以字母或者下划线 (_) 开头,其后可跟字符和数字的组合。
void main() {
    // 以字母开头
    var elemA1 = 123;
    // 以下划线开头
    var _elemA2 = 'abc';
}
  • Dart 中表达式语句是有区别的,表达式有值而语句没有。比如条件表达式expression condition ? expr1 : expr2中含有值expr1expr2。与if-else分支语句相比,if-else分支语句则没有值。一个语句通常包含一个或多个表达式,但是一个表达式不能只包含一个语句。
void main() {
    // 条件表达式含有值 2 和 'a',可用变量接收
    var number = 1==1 ? 2: 'a';
    print(number);
    // if-else 语句则没有值,不可用变量接收
    if (1 == 1) {
        print(2);
    } else {
        print('a');
    }
}
  • Dart 工具可以显示警告错误两种类型的问题。警告表明代码可能有问题但不会阻止其运行。错误分为编译时错误运行时错误;编译时错误代码无法运行;运行时错误会在代码运行时导致异常。

关键字

下面的表格中列出了 Dart 语言使用的关键字
Dart语言使用的关键字

应该避免使用这些单词作为标识符。但是,带有上标的单词可以在必要的情况下作为标识符:

  • 带有上标 1 的关键字为 上下文关键字,只有在特定的场景才有意义,它们可以在任何地方作为有效的标识符。

  • 带有上标 2 的关键字为 内置标识符,这些关键字在大多数时候都可以作为有效的标识符,但是它们不能用作类名或者类型名或者作为导入前缀使用。

  • 带有上标 3 的关键字为 Dart 1.0 发布后用于 支持异步 相关内容。不能在由关键字 asyncasync*sync*标识的方法体中使用awaityield作为标识符。

其它没有上标的关键字为 保留字,均不能用作标识符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值