Dart语法学习-变量
Posted 且听真言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dart语法学习-变量相关的知识,希望对你有一定的参考价值。
一、 创建Dart File
Hello, World
void main()
print('Hello world');
Log:
Hello world
二、变量
1.Dart 支持类型推断。
var name = 'Voyager I';
var year = 1977;
var antennaDiameter = 3.7;
var flybyObjects = ['A1', 'A2', 'A3', 'A4'];
var image =
'tags':['saturn'],
'url':'www.baidu,com'
;
void main()
var number = 42;
printInteger(number);
void printInteger(int aNumber)
print('The number is $aNumber');
Log:
The number is 42
创建变量并对其进行初始化
var name = 'Bob';
上面的例子中name 变量的类型被推断为 String,但可以通过指定它的类型来更改确认类型。
Object name = 'Bob';
显式声明将被推断的类型
String name = 'Bob';
2.默认值
可空类型的未初始化变量的初始值为空。
void main()
int? lineCount;
print(lineCount == null);
Log:
true
错误使用
注意:不可空类型需要在使用前初始化。
void main()
int lineCount;
print(lineCount == null);
31:9: Error: Non-nullable variable 'lineCount' must be assigned before it can be used.
print(lineCount == null);
^^^^^^^^^
不可空变量必须在使用之前初始化它们的值。
int lineCount = 0;
注意:
不必在声明局部变量的地方对其进行初始化,但需要在使用前为其赋值。
void main()
int lineCount;
lineCount = 1;
print(lineCount);
Log
1
变量被延迟初始化; 初始化代码在第一次使用变量时运行。
3.Late变量
late String description;
void main()
description = 'Feijoada!';
print(description);
Log
Feijoada!
Dart 2.12 添加了 late 修饰符
- 声明一个在声明后初始化的不可空变量。
- 延迟初始化变量。
注意:如果未能初始化延迟变量,则在使用该变量时会发生运行时错误。
late String description;
void main()
//description = 'Feijoada!';
print(description);
Log
Unhandled exception:
LateInitializationError: Field 'description' has not been initialized.
#0 description (file:///D:/androidmyproject/MyProject/MyApplication/app/src/main/java/com/example/myapplication/flutter/TestDart.dart)
#1 main (file:///D:/androidmyproject/MyProject/MyApplication/app/src/main/java/com/example/myapplication/flutter/TestDart.dart:44:9)
#2 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#3 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:26)
当将变量标记为延迟( late )但在其声明时对其进行初始化时,初始化程序将在第一次使用该变量时运行。
- 该变量可能不需要,并且初始化它的成本很高。
- 正在初始化一个实例变量,它的初始化器需要访问它。
// This is the program's only call to readThermometer().
late String temperature = readThermometer(); // Lazily initialized.
4.final 和 const
如果从不打算更改变量,请使用 final 或 const 代替 var 使用。 final 变量只能设置一次; const 变量是编译时常量。 (const 变量是隐式最终的。)
注意:实例变量可以是 final 但不是 const。
final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
不能修改final变量的值
void main()
final a = 1;
a = 2;
Log
TestDart.dart:49:3: Error: Can't assign to the final variable 'a'.
a = 2;
^
const声明编译时常量的变量。 如果 const 变量在类级别,则将其标记为 static const。 在声明变量的位置,将值设置为编译时常量,例如数字或字符串文字、const 变量或对常量进行算术运算的结果:
void main()
const bar = 1000000; // Unit of pressure (dynes/cm2)
const double atm = 1.01325 * bar; // Standard atmosphere
print(atm);
Log
1013250.0
const 关键字不仅仅用于声明常量变量。 还可以使用它来创建常量值,以及声明创建常量值的构造函数。 任何变量都可以有一个常量值。
var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`
const 声明的初始化表达式中省略 const,例如上面的 baz。可以更改非 final、非常量变量的值,即使它曾经有一个 const 值:
void main()
var foo = const[];
foo = [1, 2, 3];
print(foo);
Log
[1, 2, 3]
不能更改 const 变量的值
void main()
const baz = [];
baz = [1, 2, 3];
Log
TestDart.dart:66:3: Error: Can't assign to the const variable 'baz'.
baz = [1, 2, 3];
^^^
可以定义使用类型检查和强制转换(is 和 as)、集合 if 和传播运算符(... 和 ...?)的常量
void main()
const Object i = 3; // Where i is a const Object with an int value...
print(i);
const list = [i as int]; // Use a typecast.
print(list);
const map = if (i is int) i: 'int'; // Use is and collection if.
print(map);
const set = if (list is List<int>) ...list; // ...and a spread.
print(set);
Log
3
[3]
3: int
3
注意:虽然无法修改final修饰的对象,但可以更改其字段。 相比之下,const 对象及其字段不能更改:它们是不可变的。
以上是关于Dart语法学习-变量的主要内容,如果未能解决你的问题,请参考以下文章