2.1 变量与常量
掌握常量与变量是任何语言的基础。Dart通过XXX.runtimeType
输出XXX类型
2.1.1 变量
使用var
声明一个变量,然后可以给变量设置不同值。在未初始化时,默认未null。
// 使用var但不对其初始化,var可任意修改类型
var number;
number = 20
number = "30" // 正常执行
// 使用var同时对其初始化,触发类型推导,给num设置类型
var num = 20;
num = "30" // 报错(num是数值类型,非字符串)
⚠️Dart是一门强类型语言,在确定了类型后不能更改为其它类型。如果真的想改变Dart中的变量类型,可以使用dynamic
关键字。
2.1.2 常量
如果想设置一个常量,即让一个变量不可变,那么可以使用final
或者const
进行修饰。
那么,const
与final
的区别在哪里呢?
const
必须直接赋值常量
final
可以通过运行时赋值
const num1 = getNum() // 报错const必须直接赋值
final num2 = getNum() // 可以通过运行时执行
const num3 = 10 // 正常执行
final num4 = 10 // 正常执行
int getNum(){
return 10
}
2.1.3 内置类型
Dart内置了一些类型,具体如下:
- Number(数值型)
- String(字符串)
- Boolean(布尔值)
- List(列表)|| Set(列表)
- Map(键值对)
- Runs(符号字符)
- Symbols(标识符)
2.1.4 集合类型
List
类型:[元素1,元素2,…]- -List<int>=[]允许重复元素&&有顺序(index)之分
Set
类型:{元素1,元素2,…}- -Set<int>={}不允许重复元素&&无顺序(index)之分
Map
类型:{key1:value1,key2:value2,…}- -Map<String,dynamic>={}
⚠️Set较少使用,主要用于:List.from(Set.from(list1))➡️为List类型去重
2.2 函数
2.2.1 函数定义
- 函数定义:
返回值 函数的名称(参数列表){
函数体
return 返回值
}
- main函数
每个应用程序都必须有一个main函数,这一点和Java一样,它是应用程序的入口点,该main函数返回void并具有List的可选参数。
flutter中的入口函数是这样写的:
void main()=>runApp(MyApp())
2.2.2 可选参数
- 命名参数:
在定义函数的时候使用
{}
指定命名参数,使用函数时根据命名
传入参数。例如:
编写函数:void Test(int num1,{int num2}){}
使用函数:Test(1,num2:2)
- 位置参数
在定义函数的时候使用
[]
指定位置参数,使用函数时根据位置传入参数。例如:
编写函数:void Test(int num1,[int num2]){}
使用函数:Test(1,2)
2.2.3 必选参数
在调用函数时必须传入一些参数,这个时候就可以使用@required
来修饰,使用@required
有利于静态代码分析器进行检查。
编写函数:void Test(@required int num1){}
2.2.4 默认参数
默认值是编译时的常量,在函数的参数后面使用=
来为参数赋值
编写函数:void Test({int num1=1}){} 默认值只能给可选参数使用!
2.2.5 函数一等公民
- 函数作为参数传递
void printItem(String name){
print(name)
}
List<String> names = ['Jone','Boe','Sandy'];
name.forEach(printItem);
- 函数作为变量
var printItem = (String name){
print(name)
}
List<String> names = ['Jone','Boe','Sandy'];
name.forEach(printItem);
2.3 运算符
2.3.1 除法、整除、取余运算
num num1 = 8;
print(num1 / 3); // 2.33333…
print(num1 ~/ 3); // 2
print(num1 %3); // 2
2.3.2 三目运算符
??=
JS:exe1 = exe1?exe1:‘children’
dart简化:exe1??=‘children’
??
JS:exe1 = exe1?exe1:‘children’
dart简化:exe1=exe1??‘children’
2.3.3 级联操作符
链式调用,在动画模块使用较多。
class Person{
String name;
Person(name){
this.name = name;
}
void Swim(){
print("$name is in Swim");
}
void Eat(){
print(