dart 语言是一款谷歌出的语言,代码风格更像是融合了 java 及 javascript,所以学习的难度并不是很大;
且又是 flutter 框架中的语言,所以还是有学习的必要
dart 安装:打开 dart 官网
我们按照安装步骤下载完了,然后我们检测是否下载成功;在终端输入命令:dart –version
如果出了版本号就证明我们下载成功了
如果我们想在使用 dart 语言的话,建议使用 vsCode 的编辑器,下载插件 dart code runner
dart 文件,是以 dart 结尾的文件
- 简单的输入语法,通过 main 来暴露,通过 print 来打印输出
main(){ print('hello dart') }; // 有返回值的写法
- 所有的语句后面都要加分号,否则就会报错
void main(){ print('hello dart') }; // 没有返回值的写法
- 注释的方法
// /// /**/
- 声明变量的方式(从这里就体现出了dart语言的强大,可以采用 java 的强类型语言,也可以采用 JavaScript 的弱类型语言)
弱类型语言的命名方式:var a = 'hello dart' // 那么 a 的类型就是字符串
强类型语言的命名方式:String a = 'hello dart' // a 的类型必须是字符串
print() 拥有打印的功能,可以进行多次打印输出
- 数字类型解析
num a = 12; // 数字定义,整形,小数型都可以
int a = 12; // 整形数字的定义
double a = 12.33 // 必须是小数型
- dart 的命名规则
1)变量名称可以由数字,字母,下划线和美元符($)组成
2)注意:标识符开头不能是数字
3)标识符不能是保留字和关键字
4)变量的名字是区分大小写的如:age 和 Age 是不同的变量,在实际开发中尽量不要出现这种情况,尽管没有错
5)标识符(变量名称)一定要见名思意:变量名建议用名词,方法名建议用动词
- 常量:永远不会改变的量
关键词:final 或者 const
他们量都是,如果对变量进行在次赋值就会报错,final 还可以定义方法
- 字符串的拼接
String str = '你好';
String val = 'dart';
print('${str} ${val}'); // 细心的朋友已经发现了,我中间有个空格,这个空格会被保留的哦
// 其实也可以不带 {} ,但是并不适用所有的场景,带上{}就可以避免很多问题
- 布尔值的定义
bool a = true / false // 布尔值只能是 true 或者 false
- 运算符
+ - * / % // 与 js 一致
- 条件运算
if(){} if(){}else if(){} switch(){ case: 内容; break; } // 与 js 一致
- 定义数组
弱类型语言的定义方式
var arr = ['aaa','bbb','ccc'];
print(arr);
print(arr.length);
print(arr[1]) // 通过下标来拿到具体的值
强类型语言的定义方式
List arr<String> = ['aaa','bbb','ccc']; // List 定义数组,<> 里面对应数组的数据类型
数组的方法:
add(); // 在数组的结尾处添加元素
addAll(); // 连接多个数组
toList(); // 将其他类型转换成集合类型
indexOf(); // 查看数组中是否包含某个元素
remove(); // 删除具体的某个元素,在原有的 list 中进行更改
removeAt(); // 删除具体元素通过索引,在原有的 list 中进行更改
fillRange(start,end,value); // 修改,开始下标,结束下标,要更改的值
insert(1,value); // 通过索引添加数据
insertAll(1,['a','b']); // 通过索引插入多条数据
join(","); // 以逗号分割,将数组转成字符串
数组的属性
length; // 数组的长度
isEmpty; // 判断是否为空
isNotEmpty; // 判断不为空
reserved; // 翻转
- 定义对象的方式
var obj = {
"name":"zhang"
}; // 弱类型语言
Map obj = {
"name":"zhang"
}; // 强类型语言
取值方式:print(obj['name']); // 只能采用这种方法
对象的属性:
keys; // 属性
values; // 值
isEmpty; // 是否为空
isNotEmpty; // 是否不为空
对象的方法
addAll() // 连接多个对象
remove() // 取消值,字符串
- 类型判断 通过 is 关键字来判断
var str = 'hello dart';
print(str is String) // 返回值 true 是,返回值 false,代表不是
- 关系运算符
== != > < >= <=
- 逻辑运算发
! && ||
- 赋值运算符 += -= *= /= ??=
将一下 ??=
var b;
b??=3; // 如果 b 为空的话,将 3 附给 b
// 如果 b 不为空的话,将值赋给 b
- 类型转换
将字符串转换成数字
String str = '123';
var myNum = double.parse(str); 建议不要使用 int
将数字换成字符串
var Num = 12;
var str = Num.toString();
- 错误抛出
如果由错误,通过 try catch 来抛出错误
- 判断是否为空
判断字符串是否为空 str.isEmpty
判断数字是不是空 var Num == null;
注意一个事项:print(0/0) // 得到的结果为 isNaN
- a++ ++a 的区别
a++ // 将 a 赋值给b,然后a在进行自加运算
++a // 先进行 ++ 运算,再将 a 赋值给 b
- 循环数据
List arr = [1,2,3,4,5,6,7];
forEach 的使用 遍历
arr.forEach((item)=>{
print(item);
})
map 的使用,遍历加工
arr.map((value)=>{
return value * 2;
})
where 满足条件的使用
arr.where((value)=>{
return value > 5;
})
any 集合里面有满足条件的就返回 true
every 每一个都满足条件,返回 true,否则返回 false
- 方法的使用:
在 main(){} 外定义的方法就是全局的方法
方法的可选参数
function fn (String name , [int age]){
print('${name} —- ${age}')
}
fn('zhang',10);
方法的命名参数
function fn (String name, {int age, String sex = '男'}){
print('${name} —- ${age} ++++ ${sex}')
}
fn('zhang',age:20);
- 类的定义,对象的三大特点:封装,继承,多态,三个修饰符:public,private,protected
通过 class 定义类
class Person = {
Person(){
print('构造函数');
}
String name = 'zhangsan';
int age = 20;
run(){
print('${name} —– ${age}');
};
.}
Person aa = new Person();
aa.run();
命名构造函数
class Person = {
String name;
num age;
Person.now(name,age){
this.name = name;
this.age = age;
}
run(){
print('${name} —– ${age}');
}
}
Person aa = new Person.now('zhangsan',10);
aa.run();
私有属性
dart 提供了私有属性,我们通过 _ 来定义,注意我们要这样用的话,我们要把他抽离成一个文件才可以,不然加了 _ 也是公有的
01.dart
class Person = {
String _name;
num age;
Person(this._name,this.age);
run(){
print('${_name} —– ${age}');
}
}
这另一个文件中使用
imiport '01.dart';
Person aa = new Person('zhangsan',10);
print(aa._name); // 这样是不行的
aa.run() // 这样是可以的
class 中 get 和 set 的使用
get 来获取内容
set 来设置内容
class Person = {
String name;
int age;
Person(this.name,this.age);
get work{
return '${name} —– ${age}';
}
set run(val){
this.age = val;
}
}
Person aa = new Person('zhang',12);
aa.age = 3;
print(aa.work);
静态的属性使用,静态的方法,只能获取静态的属性;
class Person = {
static String name = 'zhangsan';
static run(){
print(name);
}
}
Person a = new Person;
print(Person.name);
Person.run();
dart 操作符
? 条件判断
is 判断类型
as 确定了类型,在执行方法
.. 连缀写法,与链式写法差不多
继承
extends
class Person{
String name;
num age;
Person(this.name,this.age);
}
class a extends Person{
a(String name, num age) : super(name, age); // 如果父类有构造函数的话,这是要注意的
}
抽象类
通过 abstract 来进行定义
父类定义的方法让子类去实现它,但也可以拥有自己的方法和属性
接口
也是通过 abstract 来进行定义
父类的接口提供的方式,只让子类去实现它
absolute class Person{
cat();
}
class a implements Person{
@override
cat(){
}
}
小细节:
一个类去写多个接口 class a implements A,B{}
多元混入继承 class a with A,B {}
// 注意事项:A 不能继承其他类,A 不能有构造函数,B 也一样 ,如果 A 与 B 有相同的方法,B 会将 A 的方法覆盖掉
泛型:类型检验
async 将东西变为异步 await 将东西变为同步
dart 库的使用
-
自定义的库
-
dart 自带的库
-
第三方库,pub 包管理系统
import 的使用
import "01.dart" show 方法名 // 就引入这个方法
import '02.dart' hide 方法名 // 就隐藏这个方法