一、变量和常量的定义
1、关键字定义
Dart语法对于变量的声明主要用var
、const
、final
关键字进行声明,
注意:不能同时使用
var
关键字和类型名声明变量,但是可以继续使用const
、final
关键字对该变量进行说明。使用
var
关键字声明变量,则该变量的数据类型会根据初始化的值自动推断出该变量的数据类型;如果初始化没有赋值则该变量的数据类型为dynamic
。
var
关键字。可以先声明后赋值或声明并赋值。如果进行了赋值操作,则该变量的类型由变量的值决定,如果声明时没有赋值,则值为null且类型为dynamic,可以赋值任何类型。const
关键字声明的变量只能在初始化时赋值一次,之后该变量的值是不可以修改的。final
关键字声明的常量只能赋值一次且声明时可以不用赋值。final
不仅有const
的编译时常量的特性,最重要的它是运行时常量,并且final
是惰性初始化,即在运行时第一次使用前才初始化。
2、类型声明变量
Dart中常见数据类型:String,num,int,double,bool、list、Map、dynamic。
const String name = "Tom"; // 定义字符串
int num = 12; // 定义整形
double floatNum = 2.22; // 定义浮点类型
bool isShow = true; // 定义布尔类型
list arr = [1, 2, 3]; // 定义集合类型
Map obj = {"name": "tom", "age": 20}; // 定义对象类型
二、常见的数据类型
Dart中常见数据类型:String,num,int,double,bool、list、Map、dynamic。
1、字符串类型
1、string定义可以使用单引号,双引号,还有三引号(跟单双引号相比会保留字符格式);
// 跟其他语言类似
var str = 'string';
String str1 = "string";
// 会保留换行和回车
String str2 = '''name:
Dart''';
print(str);
print(str1);
print(str2);
// 输出结果为
string
string
name:
Dart
2、我们也可以用str[1]
读取字符串的某一位字符:
var str = 'staring';
print(str[1]) // 输出 t
3、字符串拼接
var name = "Tomy";
print('name: $name'); // 输出 name: Tomy
var num1 = 1;
var num2 = 2;
print('num1 + num2 = ${num1 + num2}'); // 输出 num1 + num2 = 3
String h = 'hello';
String sh = h + name;
print(sh) // 输出 helloTomy
String ab = 'aaa''bbb';
print(ab); // 输出 aaabbb
4、string 常见属性及方法
我们可以在编辑器中直接点进去看源码,了解常见的属性和方法,下面只列举一部分:
String str = "name:Dart";
str.length; // 返回字符串长度
str.codeUnits; // 返回给定字符串的UTF-16代码单元列表
str.hashCode; // 返回一个整数,表示数值的哈希码
str.isEmpty; // 如果字符串为空,则返回true; 否则返回false。
str.isNotEmpty; // 如果字符串不为空,则返回true; 否则返回false。
str.runtimeType; // 返回当前数据类型,所有数据类型都有。
str.split(":"); // 以:分割字符串。输出 [name, Dart]
具体的使用可以通过另一篇博客学习:常用的字符串属性和方法。
或者利用编辑器提示功能查看该类型有哪些方法和属性,针对性学习:
2、数值类型
数值类型可以有 num
, int
, double
这三种关键字声明数据类型:
1、num
声明的变量为数据类型,可以是整数也可以是小数。
num a = 18;
print(a.toInt()); // 转成int类型 (舍去小数)
print(a.toDouble()); // 转成double型
2、int
声明的变量值只能是整数
int a = 18;
print(a.isEven); // 判断一个数字是否为偶数
print(a.isOdd); // 判断一个数字是否为奇数
3、double
声明的变量值可以是整数,也可以是小数。如果值为整数,则会自动补上小数点和 0
。
double a = 10;
print(a); // 输出 10.0
4、关于运算符,除以下两个其余和其他高级语言用法一致,此处不过多赘述。主要学习一下Dart
中特有的条件赋值运算:??=
及条件表达式: ??
运算符。
void main(List<String> args) {
var a;
a ??= 10; // 当a为null的时候赋值10
a ??= 5;
print(a); // 10
}
void main(List<String> args) {
var a = 10;
var b;
print(b ?? a); // 输出10,如果左边有值则返回左边,如果左边没值则返回右边
}
3、布尔类型
类型定义可使用bool关键字,主要值有true和false两个值,跟其他语言用法基本一样。
4、集合类型
类型定义可使用List关键字声明数据类型。
Dart中的集合分为:
- 可变集合: 可以对集合中的数据进行操作。
- 不可变集合:集合中的数据不允许操作。
List list1 = [1,2,3,4,5,6] // 可变集合
List list2 = const [1,2,3,4,5,6] // 不可变集合
5、对象类型
类型定义可使用Map关键字声明数据类型。
Dart中的对象类型跟集合一样分为:可变对象及不可变对象。
可变对象合可以对对象中的数据进行操作,不可变对象中的数据不允许操作。
Map obj1 = { 'name': 'lili', 'age': 20 } // 可变集合
Map obj2 = const { 'name': 'lili','age': 20 } // 不可变集合
print(obj1['name']) // lili 对象取值
obj1['name'] = 'zhansan' // 赋值操作
三、流程控制语句
Dart
中的流程控制语句支持if(){}
语句、if(){}else{}
语句、for(){}
循环语句……,也支持switch
语句等,流程控制语句跟JavaScript
及其他高级语言一样,请参考其他语言学习。
四、函数
Dart
中的方法是一个对象,函数返回值的类型及参数可以省略,当函数体只有一句话的时候可以是用箭头函数。
void main() {
print('hello dart');
}
// 可以简写为:
main() => print('hello dart');
1、可选参数
可选参数使用 {}
包裹时,代表是无序的可选参数。此时,可选参数传参时必须带上变量名。如果需要给可选参数指定类型,必须在类后面加一个 ?
, 标识其是一个可以为空的类型;当有默认值时,则不需要在类后面跟 ?
。
void main() {
print(sum(1, b:2, c: 3));
}
sum(a, {int? b, int c = 0}) {
b ??= 0;
return a + b + c
}
// 输出 6
可选参数使用 []
包裹时,代表是有序的可选参数,此时,可选参数传参时不需要带上变量名,参数会自动依次赋值给可选参数。
void main() {
print(sum(1, 2));
}
sum(a, [int? b, int c = 0]) {
b ??= 0;
return a + b + c;
}
// 输出 3 => reutn 1 + 2 + 0;
2、匿名函数和立即执行函数
Dart
中的函数也有 匿名函数 和 立即执行函数,跟 js
中的匿名函数和立即执行函数用法是一样的。
void main() {
List list = [1, 2, 3, 4, 5];
forEachDemo(list, (a) => print('a****$a'));
}
void forEachDemo(List list, Function action) {
for(var i in list) {
action(i);
}
}
// 输出:
a****1
a****2
a****3
a****4
a****5
3、闭包函数:
闭包能够访问外部方法内的局部变量,并持有其状态(这是闭包最大的作用,可以通过闭包的方式,将其暴露出去,提供给外部访问)
内部 指的是当前的
main
或者是当前的执行函数,外部指的是要调用的函数。
void main() {
// 获取闭包
var func = say();
for(var i = 0; i < 5; i++) {
func();
}
}
say() {
init num = 0;
printCount() {
print(num++);
}
// 返回闭包
return printCount;
}
Dart 是面向对象的编程语言,所以类是一个很重要的概念,我们来学习dart的 类 。