Flutter基础:Dart 基础语法
打开Android Studio
创建一个新工程,将main.dart
中多余代码清理一下
一、var、final 和 const
1.1 var
- dart 中使用
var
声明一个变量
,可以赋值不同
的类型; - var 声明的变量如果没有初始化,那么他的值为
null
。
void main() {
var a;
print(a);
a = 'hello world';
print(a);
a = 10;
print(a);
}
执行结果:
flutter: null
flutter: hello world
flutter: 10
1.2 final
- 使用 final 声明一个
只能赋值一次
的变量
; - 没有赋值的 final 变量是不能使用的,会报错;
- 他是最终变量。
void main() {
final c;
c = 10;
print(c);
}
执行结果:
flutter: 10
1.3 const
- const 是常量,必须有
初始值
。 - 不可修改。
void main() {
const d = 20;
print(d);
}
执行结果:
flutter: 20
二、Dart 的数据类型之 num
2.1 num
示例:
void numDemo() {
// 数值型 num : int & double
num a = 10;
print(a);
a = 1.5;
print(a);
}
执行结果:
flutter: 10
flutter: 1.5
2.2 int 、double
int 和 double 都是类
继承自 num:
abstract class int extends num {
...
}
abstract class double extends num {
...
}
示例:
void numDemo() {
int b = 10;
double c = 1.5;
print(b);
print(c);
}
执行结果:
flutter: 10
flutter: 1.5
2.3 算术运算符
dart 中除了+ - * / %
等这些常见的算术运算符,还有个特有的运算符~/
(取整)。
void numDemo() {
double b = 10.0;
int c = 8;
// 取整
print(b ~/ c);
// 转换类型
print(b.toInt().isEven); // 偶数
print(c.toDouble());
print('a + b = ${a + b}');
}
执行结果:
flutter: 1
flutter: true
flutter: 8.0
flutter: a + b = 11.5
三、Dart 的数据类型 String
- Dart 中的字符串使用
单引号
和双引号
创建; 三个引号
或双引号
创建多行字符串;
void stringDmeo() {
var a = 'aa';
var b = "bb";
print(a + b);
String c = "11\n"
"22\n"
"33\n";
print(c);
String d = '''44
55
66''';
print(d);
print(a[0]);
print(a + "_____");
print(a * 2);
String str3 = "str3\nstr3"; // 需要转译
String str4 = r"str3 \nstr3"; // 不需要转译
print(str3);
print(str4);
print(str3.length);
}
执行结果:
flutter: aabb
flutter: 11
22
33
flutter: 44
55
66
flutter: a
flutter: aa_____
flutter: aaaa
flutter: str3
str3
flutter: str3 \nstr3
flutter: 9
四、Dart 的数据类型 list
- Dart 中的列表,可以存放不同的数据类型的;
- 创建
可变list
var list1 = [1,2,3]; - 创建
不可变list
var list2 = const [1,2,3]。
void listDemo() {
var list1 = const [1, 2, 3, 'aaa'];
var list3 = ['bbb', 'ccc'];
print(list3.length);
list3.add('ddd'); // 添加
print(list3);
list3.insert(1, 'eee'); // 插入
print(list3);
list3.remove('bbb'); // 删除
print(list3);
list3.clear(); // 清除
print(list3);
var list4 = [1, 3, 5, 2, 4, 9, 8, 6];
list4.sort();
print(list4);
print(list4.sublist(4, 7)); // 截取
}
执行结果:
flutter: 2
flutter: [bbb, ccc, ddd]
flutter: [bbb, eee, ccc, ddd]
flutter: [eee, ccc, ddd]
flutter: []
flutter: [1, 2, 3, 4, 5, 6, 8, 9]
flutter: [5, 6, 8]
五、Dart 的数据类型 Map
- Dart 中的 Map 键值对;
- 创建
可变的Map
: var json1 = {'one':'11','two':'22'}; - 创建
不可变的Map
:var json1 = const {'one':'11','two':'22'}。
void mapDemo() {
var json1 = {'one': '11', 'two': '22'};
print(json1);
print(json1['one']); //取值
json1['one'] = '一一';
print(json1);
var json2 = const {'one': '11', 'two': '22'};
print(json2.length);
print(json2.values);
print(json2.keys);
var list = ['11', '22', '33'];
print(list.asMap());
}
执行结果:
flutter: {one: 11, two: 22}
flutter: 11
flutter: {one: 一一, two: 22}
flutter: 2
flutter: (11, 22)
flutter: (one, two)
flutter: {0: 11, 1: 22, 2: 33}
六、Dart 的运算符??= 和 ??
- Dart中的运算符;
- 赋值运算
??=
; - 条件表达式
??
。
void operatorDemo() {
var a;
a ??= 10;
a ??= 5; //如果a为nil就赋值,如果有值就直接返回。
print(a);
var b;
print(b ?? a); //?? 如果左边有值返回左边,没有就返回 右边!
}
执行结果:
flutter: 10
flutter: 10
七、Dart 中的箭头函数
- Dart 中的方法;
- 方法也是一个对象;
- 返回值和参数类型可以省略;
- 当方法的执行语句只有一句的时候,可以使用箭头函数 => 表达式。
void main() => print(sum(4, 5));
sum (a, b) => a + b; // 不建议这样写,容易懵逼
执行结果:
flutter: 9
八、Dart 方法的可选参数
- 可选参数传递参数的时候必须带上形参的名字;
- 调用方法时,可选参数的位置可以不按顺序。
void main() => print(sum2(1, c: 3, b: 2,));
sum2(int a, {int? b, int? c}) { // int? 告诉编译器,可以为空,我处理了后面为空的情况
b ??= 0;
c ??= 0;
return a + b + c;
}
执行结果:
flutter: 6
还有一种写法是需要按顺序的:
void main() => print(sum3(1, 2, 3);
int sum3(int a, [int b = 0, int c = 0]) {
return a - b + c;
}
执行结果:
flutter: 6
九、Dart 方法作为参数传递
方法也是一个对象:使用场景作为参数传递!!
void functionDemo() {
var list = [1, 2, 3, 4];
// list.forEach(print);
int b = 0;
//匿名方法作为参数的实战。
forEachDemo(list, print);
}
forEachDemo(List list, void func(var element)) {
for (var e in list) func(e);
}
执行结果:
flutter: 1
flutter: 2
flutter: 3
flutter: 4
十、Dart 中的匿名函数
匿名方法:没有方法名称的方法!
void functionDemo() {
var list = [1, 2, 3, 4];
// list.forEach(print);
int b = 0;
//匿名方法作为参数的实战。
forEachDemo(list, (var a) {
b++;
print('元素$b = $a');
});
var func = () {
print('匿名方法');
};
func();
//立即执行方法、函数
(() {
print("立即执行函数");
})();
}
执行结果:
flutter: 元素1 = 1
flutter: 元素2 = 2
flutter: 元素3 = 3
flutter: 元素4 = 4
flutter: 匿名方法
flutter: 立即执行函数
十一、Dart 中的闭包
- 定义在函数里面的函数就是闭包,闭包也是一个对象;
- 闭包的作用:可以访问外部函数的局部变量。
void closureDemo() {
var func = funA();
func();
func();
func();
func();
var func2 = funA();
func2();
func2();
func2();
func2();
}
funA() {
int count = 0;
return () => print(count++); //这个匿名函数就是一个闭包
}
执行结果:
flutter: 0
flutter: 1
flutter: 2
flutter: 3
flutter: 0
flutter: 1
flutter: 2
flutter: 3
转载自:https://juejin.cn/post/7024368844491718693