Dart 语言学习 02
Author : ScorpioDong
1. Dart 变量
变量是“存储器中的命名空间”,它用于存储值。变量的名字也就是标识符,遵守标识符的一些规则,建议变量使用小驼峰命名法。
和其他的语言不同的是,Dart所有的变量存储的都是值的引用,而不是值本身,也可以说Dart所有变量都是引用数据类型。
1.1 变量的声明
Dart语言中的变量有以下声明方式:
var name = "dart";
String gender = "male";
String str;
str = "hello";
dynamic b = 1;
b = "abc";
- 可以指定数据类型声明变量,声明时可以直接初始化,也可以暂时不初始化。
- dynamic 修饰的变量其数据类型是动态调整的,也就是该变量可以存储任何类型的数据值。【效率较低】
- 可以使用var关键字来定义变量
- var定义变量时,如果赋予了变量初始值,编译器自动确定其变量类型,并且确定后无法更改。
- var定义变量时,如果未赋予变量初始值,则编译器会认定该变量为dynamic修饰,也就是动态数据类型。
// var定义变量时赋予了变量初始值
var a = 10; // 认定变量数据类型为int类型
a = 20; // 正确,类型一致
a = "abc"; // 错误, 类型不一致
// var定义变量时未赋予变量初始值
var b; // 认定变量是dynamic修饰的
b = 10; // 正确,变量为动态数据类型
b = "def"; // 正确,变量为动态数据类型
1.2 变量默认值
Dart是一门面向对象的语言,其认为所有的事物都是对象。
Dart中所有的数据类型的变量在未初始化时,其默认值都是null
,【包括数字类型变量】,Dart语言中认为数字也是对象。
1.3 final 和 const
final和const关键字用于声明常量。Dart语言中final和const关键字用于声明值不可更改的常量。
final 和 const 的区别
- final是运行时常量,常量的值在运行时才被确定。
- const是编译时常量,常量的值在编译时就已经确定。
final a = 10;
const b = "abc";
final int c = 12;
const String d = "dart";
2. Dart 运算符
2.1 算数运算符
运算符 | 描述 |
---|---|
+ |
加 |
- |
减 |
* |
乘 |
/ |
除 |
~/ |
整除 |
% |
取余 |
++ |
自增 |
-- |
自减 |
2.2 比较运算符
运算符 | 描述 |
---|---|
== |
等于 |
!= |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
2.3 逻辑运算符
运算符 | 描述 |
---|---|
&& |
逻辑与 |
|| |
逻辑或 |
! |
逻辑非 |
2.3 按位运算符
运算符 | 描述 |
---|---|
& |
按位与 |
| |
按位或 |
^ |
按位异或 |
~ |
按位取反 |
>> |
右移 |
<< |
左移 |
2.4 赋值运算符
运算符 |
---|
= |
+= |
-= |
*= |
/= |
~= |
<<= |
>>= |
&= |
|= |
^= |
2.5 类型检测运算符
运算符 | 描述 |
---|---|
as |
Typecast(也用于指定库前缀) |
is |
如果对象具有指定的类型,则为True |
is! |
如果对象具有指定的类型,则返回false |
2.6 条件表达式
condition ? expr1 : expr2
如果condition为true,则执行expr1并返回其值,否则执行expr2并返回其值expr1 ?? expr2
如果expr1不是null,返回expr1的值,否则执行expr2并返回其值
2.7 级联运算符
级联运算符(..
),允许对同一对象进行多项操作。
Set<int> set = {};
set..add(1)
..add(2)
..add(3)
..add(4);
其代码等效于
Set<int> set = {};
set.add(1);
set.add(2);
set.add(3);
set.add(4);
严格来说,级联的“双点”符号不是运算符。它只是Dart语法的一部分
2.8 其他运算符
运算符 | 名称 | 描述 |
---|---|---|
() |
函数调用 | 表示函数调用 |
[] |
List访问 | 引用列表中指定索引处的值 |
. |
成员访问 | 访问对象的成员属性 |
?. |
条件成员访问 | 在不明确对象是否存在的情况下使用 ?. 访问对象的成员 |
Set<int> set = null;
set.add(1); // 错误,NoSuchMethodError
set?.add(1); // 正确,该语句不执行,程序继续运行