Dart入门-常量与变量

2022.02.27

Dart

什么是Dart

  • Dart语言是由谷歌公司开发的网络编程语言,于2011年10月10日发布。有了Dart,你可用的网页脚本将不只是Java专属.在使用Chromium的浏览器中,你可以直接运行Dart程序,而且有可靠的虚拟机帮助你提升程序性能和安全性。
  • Dart 是一个为全平台构建快速应用的客户端优化的编程语言。

特点

  • 为 UI 构建优化:使用针对用户界面的创造进行优化的语言进行开发。
  • 研发生产力提高:在正在运行的应用中使用热重载立刻看到您的修改。
  • 在全平台极速运行:可编译为移动端、桌面端及后端的 ARM & x64 的二进制文件,或是为 Web 平台编译 Javascript。

Hello World

void main(){
    print('Hello Dart!');
}

解释:

  • 首先创建一个文件,xxx.dart
  • main()函数是程序的主入口:是一个特殊且必须的顶级函数,Dart 应用程序总是会从该函数开始执行。
  • print()函数是打印输出,可以将文本打印到控制台上。

变量与常量

变量

书写格式

  • 格式1:不指定类型,使用var关键词;
 var name = "Bob_Var";
 print(name);
  • 格式2:指定类型,使用顶级类Object
Object name3 = "Bob_Object";
print(name3);
  • 格式3:指定类型,使用确定的类型,例如int\String等;
 String name2 = "Bob_String";
 print(name2);
  • 格式4:在变量类型不确定的情况下,可以使用dynamic
 dynamic name4 = "Bob_dynamic";
 print(name4);

其他

未初始化的变量默认值都是null,包括数字类型额默认值也是null,在Dart中一切皆对象。

   int lineCount;
   assert(lineCount == null);

运行这段文本会报错,错误是报错:Non-nullable variable 'lineCount' must be assigned before it can be used.提示未初始化的数值都是null。

注:assert()函数在生产环境下会被忽略;开发过程中会在非ture的调价年抛出异常。

常量

书写格式

final

  • final修饰的对象值只能设置一次。
  • 格式:final 可选类型 变量名 = 值
  final name = "Bob";
  final String nickname = "Bobby";
  print(name);
  print(nickname);
  name = "bob2";//报错:Error: Can't assign to the final variable 'name'.
  nickname = "bob2";//报错:Error: Can't assign to the final variable 'name'.
  • 注:我们发现我们通过=赋予新值的时候报错了,错误为Error: Can't assign to the final variable 'name',说明这个值只能设置一次。

const

  • const可以创建常量值、生命创建常量值的构造函数
  • 格式:const 变量名 = 值
  • 格式:var 变量名 = const []
  const bar = 100000;
  const double atm = 1.123 * bar;
  print(bar);
  print(atm);

  var foo = const [];
  final bar2 = const [];
  const baz = [];

两者的对比

相同点
  • final、const必须初始化
  • final、const只能赋值一次
不同点
  • final在被使用到的时候才会进行初始化, 如果只是被定义, 而没有被使用到,那么这个变量一直没有被初始化 (可以理解为'懒加载')。
  • const修饰的变量,一经定义就会在编译期间对其进行初始化。
  • final可修饰实例变量、const不可以修饰实例变量。
  • final 只可用来修饰变量, const 关键字即可修饰变量也可用来修饰 常量构造函数。
  • 当const修饰类的构造函数时,它要求该类的所有成员都必须是final的。
  • 访问类中const修饰的变量需要static修饰。

代码示例

void main(List<String> args) {
  test1();
  test2();
}

/**
 * 常量
 * Final和Const
 */
void test2() {
  print("test2----------------");
  //Final类型的变量值只能设置一次
  final name = "Bob";
  final String nickname = "Bobby";
  print(name);
  print(nickname);
  // name = "bob2";//报错:Error: Can't assign to the final variable 'name'.

  const bar = 100000;
  const double atm = 1.123 * bar;
  print(bar);
  print(atm);

  //final在被使用到的时候才会进行初始化, 如果只是被定义, 而没有被使用到,
  //那么这个变量一直没有被初始化 (可以理解为'懒加载'); 而const修饰的变量,
  //一经定义就会在编译期间对其进行初始化

  //const还可以创建常量值、生命创建常量值的构造函数
  var foo = const [];
  final bar2 = const [];
  const baz = [];
}

/**
 * 变量
 */
void test1() {
  print("test1---------------");
  //方式1:不指定类型,使用var关键词
  var name = "Bob_Var";
  //方式2:指定类型(Object|type)
  String name2 = "Bob_String";
  Object name3 = "Bob_Object";
  //方式3:在变量类型不确定的情况下,可以使用dynamic
  dynamic name4 = "Bob_dynamic";
  print(name);
  print(name2);
  print(name3);
  print(name4);

  //未初始化的变量默认值都是null,包括数字类型额默认值也是null,在Dart中一切皆对象。
  // int lineCount;
  // assert(lineCount == null);
  //报错:Non-nullable variable 'lineCount' must be assigned before it can be used.
  //assert函数在生产环境下会被忽略;开发过程中会在非ture的调价年抛出异常
}