纸月
发布于 2021-01-13 / 184 阅读
0
0

Dart语言入门——变量声明

所有未初始化的变量都包含一个默认的初始值 null,即便是数字类型

Dart声明包含明确声明和类型推导方式声明

1.明确声明(Explicit)

明确声明变量的方式, 格式如下:

变量类型 变量名称 = 赋值;

示例代码:

String name = '王子';
int age = 18;
double height = 1.80;

2.类型推导(Type Inference)

类型推导声明变量的方式, 格式如下:

var/dynamic/const/final 变量名称 = 赋值;

2.1.var的使用

var的使用示例:

  • runtimeType用于获取变量当前的类型
var name = 'asuna';
name = 'kirito';
print(name.runtimeType); // String
2.1.1.先声明后赋值

类似于JavaScript中的var,用var声明的变量可以接收任何类型的变量,var声明的变量在第一次赋值是就确定类型,但是如果var声明没有马上赋值的情况下是可以赋值任何类型的值的,如下代码所示

main(List<String> args) {
    var v;
    v = '王子';
    print(v);
    v = 100;
    print(v);
    v = 6.66;
    print(v);
    v = true;
    print(v);
}

运行结果如下:

王子
100
6.66
true
2.1.2.声明是马上赋值

需要注意的是如果var声明的变量在声明的同时马上赋值某一类型的值,那么该变量就固定该类型,不可再赋值其他类型的值,否则会报错,如下所示:

A value of type 'int' can't be assigned to a variable of type 'String'.
A value of type 'double' can't be assigned to a variable of type 'String'.
A value of type 'bool' can't be assigned to a variable of type 'String'.

3.dynamic的使用

在开发中, 通常情况下不使用dynamic, 因为类型的变量会带来潜在的危险 dynamic变量声明在先声明未马上赋值的情况下,与上面var声明的变量一样,可以赋任何类型的值,上面第一个示例中把var替换成dynamic后运行结果是一样的。 需要注意的是dynamic声明的变量若在声明的同时马上赋值,其类型还是动态的,并不会固定为赋值的类型。这一点和var声明的变量不一样。

main(List<String> args) {
    dynamic v = '王子';
    print(v);
    v = 100;
    print(v);
    v = 6.66;
    print(v);
    v = true;
    print(v);
}

运行结果如下,并不会报错

王子
100
6.66
true

4.final&const的使用

final和const都是用于定义常量的,也就是定义之后不可修改

final name = '王子';
name = 'kit';  //错误做法

const age = 18;
age = 20; //错误做法
4.1final和const的区别
  • const在赋值时,赋值的内容必须是在编译期间就确定下来
  • final在赋值时,可以动态获取。final一旦被赋值后就有确定的结果, 不会再次赋值。
String getName(){
    return '王子';
}

main(){
    const name = getName(); // 错误做法,因为要执行函数才能获取到值
    final name = getName(); // 正确做法
}

const放在赋值语句的右边,可以共享对象,提高性能。

class Person{
 const Persion();
}

main(List<String> args){
    final a = const Person();
    final b = const Person();
    print(identical(a,b)); // true
    
    final m = Person();
    final n = Person();
    print(identical(m,n)); // false
 }

评论