(一)dart语言基础
- 首先了解一下注释
多行注释 /** .. **/
单行注释://
- 箭头语法
=>
比如:
void main() => runApp(MyApp());
就等于:
void main() {
return runApp(MyApp());
}
class 代表类
extends 代表继承
var 声明变量而且不指定类型
_ 下划线声明的变量是私有的,dart中没有public private 关键字 默认的都是public
- 数据类型
String
Int
Double
Set
Map
List
Num
bool
Runes
等
- 字符串的声明与取值
"字符串"或'字符串'(单引号双引号均可)。
取值:var content = 'dart语法'
取值的时候直接使用:$content
- 变量声明
var content = 'Dart 语法'; //使用 var 来声明变量,不需要特别指定变量的数据类型,因为 Dart 会自动推断其数据类型,所以可以使用 var 来定义任何的变量。var 并不是直接存储值,而是存储的值的对象的引用
var switchOn = true;
var index = 0;
String name = "Dart 语法";//明确数据类型
int count = 0;
dynamic example = 'Dart语法';//数据类型是动态可变的,也可以定义任何变量,但是和 var 不同的是,var赋值后,就不能改变数据类型。
Object index = 0;//Dart 里所有东西都是对象,是因为 Dart 的所有东西都继承自 Object,因此 Object 可以定义任何变量,而且赋值后,类型也可以更改:
- final 和 const
final content = 'Dart语法'
const content = 'Dart语法'
// 使用 final 和 const 的时候可以把 var 省略
// final 和 const 变量只能赋值一次,而且只能在声明的时候就赋值
// const 是隐式的 final
// 在使用 const 的时候,如果变量是类里的变量,必须加 static ,是全局变量时不需要加,例如:
区别:const 是编译时常量,在编译的时候就初始化了,但是final 变量是当类创建的时候才初始化。
- 函数
Dart语言中 Function代表函数
返回值类型 函数名(函数参数) {
}
比如:
void firstFunc() {
}
bool helloWord(String msg,String name){
print(name + 'say' + msg);
return (true);
}
- 函数的参数
函数的参数分为:
1、必选参数:必填的参数(首先必选参数在前面,和普通的参数定义一样,后面跟可选参数,可选参数需要用 {} 或者 [] 包起来,用不同的括号,可选参数的意义与用法也不一样。
)
2、可选参数:可填可不填的参数
bool helloWord(String msg , {String from, int clock}){
print(msg+" from " + from + " at " + clock.toString());
return true;
}
bool helloWord(String msg , {@required String from, int clock}){
print(msg+" from " + from + " at " + clock.toString());
return true;
}
bool say(String msg , [String from , int clock]){
print(msg+" from " + from + " at " + clock.toString());
return true;
}
bool say(String msg , {String from = 'empty', int clock = 0}){
print(msg+" from " + from + " at " + clock.toString());
return true;
}
- 类
定义一个person类
class Person {
String name,age
Person(String name,String age) {
this.name = name;
this.age = age;
}
}
默认构造函数的方法:
Person(String name,String age)
Dart中的构造函数语法糖
Person(this.name,this.age);
那么 Person类就可以简化为:
class Person {
String name,age
Person(this.name,this.age);
}
- 类创建
Persion person = Person('张三','18')
print(person.name)
- 操作符
算术运算操作符
+ 加 var a = 2 + 3;
- 减 var a = 2 - 3;
-exper 负数 var a = -1;
* 乘 var a = 2 * 3;
/ 除,精确除法 var a = 5 / 2; // a的结果为 2.5
~/ 整除 var a = 5 ~/ 2; // a的结果为 2
% 取余 var a = 5 % 2; // a的结果为 1
相等和大小关系操作符
== 是否相等 assert(2 == 2);
!= 不等于 assert(2 != 3);
> 大于 assert(3 > 2);
< 小于 assert(2 < 3);
>= 大于等于 assert(3 >= 3);
<= 小于等于 assert(3 <= 3);
类型判断操作符
as 类型转换 (emp as Person).firstName = 'Bob';
is 判断是否是某个类型,如果是的话,就返回 true
if (emp is Person) {
// 如果 emp 是 Person 类型
emp.firstName ='Bob';
}
is! 判断是否不是某个类型,如果不是的话,就返回 true
if (emp is! Person) {
// 如果 emp 不是 Person 类型
}
赋值操作符
var a,b;
a = 1; //使用 = 赋值
b ??= 1; // 当 b 是空的话才赋值,否则不会赋值
逻辑运算操作符
!expr 反转表达式(将 false 改为 true,反之亦然)
!(2 == 3);// 结果为 true
` ` 逻辑或 (2 == 2) || (2 == 3);// 结果为 true
&& 逻辑与 (2 == 2)&& (3 == 3);// 结果为 true
按位与移位运算符
& 按位与
对于每一个比特位,只有两个操作数相应的比特位都是1时,结果才为1,否则为0。 final value = 0x22;
final bitmask = 0x0f;
var result = value & bitmask;//结果为 0x02
` ` 按位或,对于每一个比特位,当两个操作数相应的比特位至少有一个1时,结果为1,否则为0。 final value = 0x22;
final bitmask = 0x0f;
var result = value bitmask;//结果为 0x2f
^ 按位异或,对于每一个比特位,当两个操作数相应的比特位有且只有一个1时,结果为1,否则为0。 final value = 0x22;
final bitmask = 0x0f;
var result = value ^ bitmask;//结果为 0x2d
~expr 按位非,反转操作数的比特位,即0变成1,1变成0。 final value = 0x22;
final bitmask = 0x0f;
var result = value & ~bitmask;//结果为 0x20
<< 左移 final value = 0x22;
final bitmask = 0x0f;
var result = value << 4;//结果为 0x220
>> 右移 final bitmask = 0x0f;
var result = value >> 4;//结果为 0x02
条件运算符
condition ? expr1 : expr2
如果 condition 是 true,返回 expr1,否则返回 expr2。
当你需要根据一个 boolean 表达式来赋值时,可以使用 ? :
expr1 ?? expr2
如果 expr1 为 null,就返回 expr2 的值,否则返回 expr1 的值。
如果需要根据一个 boolean 表达式是否为 null 来作为条件,可以使用 ??
级联操作符
querySelector('#confirm') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));
querySelector() 返回一个 selector 对象,后面的 ..text、..classes、..onClick就是在 selector 对象上进行的。
其他操作符
() 函数调用代表函数调用
[] 访问列表引用列表中指定索引处的值
. 访问成员变量 访问表达式里的成员变量,例如 foo.bar,表示访问 foo 表达式里的 bar 成员变量
?. 有条件的成员变量访问很像 .,但是左边的表达式可以为 null,例如 foo?.bar,如果 foo 为 null,则不会抛异常,而是返回 null,如果 foo 不为 null,则可以返回 bar
?.想要访问表达式的某个属性时,就可以使用这个,可以有效避免 NPE。
??在赋值时,可以使用 ??,若发现为空,可以为其赋默认值。
??=expr1 ??= expr2 等效于 expr1 = expr1 ?? expr2 就是判断 expr1 是否为null,如果为null的话,就使用默认值 expr2。
- 组合操作符
+= -= *= /= ~/= %=
>>= <<= ^= &=
例如:
+= a += b ; 就等效于 a = a + b;