文章目录
- 一、入口方法的定义方式
- 二、Dart变量和常量
- 三、Dart常用数据类型
- 四、Dart运算符与类型转换及循环语句
- 五、自定义方法
- 六、Dart静态成员、操作符、类的继承
- 七、接口
- 八、接口分离写法
- 九、一个类实现多个接口
一、入口方法的定义方式
main(){
print('hello world')
}
//下边这种方法中void表示没有返回值
void main(){
print('你好dart')
}
二、Dart变量和常量
var str = 'hello'
Srting srt = 'hello'
int srt = 123
//两种命名变量的方式
const a = 123
final a = 123
//他们两个是用来声明常量的
区别是
final 可以接受一个可变的数值 例如 New Date()
而const 就不可
三、Dart常用数据类型
1. 字符串类型
var || String 声明
拼接字符串与js相比多了一种拼接方式
例如:
String str = "hello"
var str2 = "world"
print("$str $str2"){
}
//就会打印str + str2 一样的 "hello world"
2. 数值类型
int整数值 //只有整数
double浮点值 double包含整数和小数
3. 运算符
+ - * / %
4.布尔值
true false
4. 条件判断
if语句 和js一样
5. 数组/集合类型
第一种声明和js一样
var list=['aaa','a',0,1]
第二种声明可指定类型
var list = <String>["这里边必须是指定类型数据"]
数组添加的方式 js是通过push...
它可以通过add添加
var list = []
list.add(1)
第三种声明方式 固定长度
var list = List.filled(2,"") 创建一个长度固定为2的数组集合 默认值""
可指定类型 不可以增加 可修改数据 修改方式 => list[0]=1
6. maps类型 类型对象
第一种方式
var data={
"name":"xxx",
"age":20
}
第二种
var data = new Map()
data["name"] = "XXX"
data["age"] = 12
类型判断 is
var str = ""
str is String 返回布尔值
四、Dart运算符与类型转换及循环语句
1. 算数运算符
+、 - 、* 、/ 、 ~/取整 、 %
~/取整 a~/b 意思就是a/b的值取整
2. 关系运算符
== ~= > < >= <=
3. 逻辑运算符
! && ||
4. 赋值运算符
= ??=
??= a??=12意思就是a的值空吗是的话就把12赋值给a
+= -= *= /= %= ~/=
++ -- (++,--在前先运算再赋值,在后先赋值再运算)
5. 条件表达式
if else switch case
三目运算符(三元表达式)
类型转换
1. 转化为String类型 toString()
2. 转化为Number类型 double.parse() || int.parse()
try ... catch 抛出异常
try{
XXXX
}catch(err){
//如果XXXX部分代码报错则执行此作用域内代码
}
isEmpty:判断字符串是否为空
isNotEmpty:判断是否不为空
str.isEmpty
for循环 和js一样
for(int i = 1; i<100; i++){
parint(i)
}
do while
单个while和if类似,不过只要条件仍满足则扔执行
do {
先执行一次再判断
while中的条件满足,满足则继续执行
continue;//表示跳过本次循环
break;//跳出循环
}while(条件)
数组常用方法
length属性 长度
reversed属性 翻转并转换数组(3,2,1)这样的括号
toList方法 转换(3,2,1)为数组[3,2,1]
add() 添加单个数据
addAll() 添加多个数据,也可用来拼接
indexOf() 查找并返回索引否则返回-1
remove() 传递具体的值删除
removeAt() 传入索引删除
fillRange() 修改,接受三个参数,(起始位置,结束为止,修改的值)
insert()也是接收三个参数,起始,结束,值;用来插入值
insertAll() 插入多个值 两个参数(插入下标位置,插入的值(可以是数组))
join(',') 转换为字符串
split(',') 转化为数组
for in 循环对象
forEach循环
可以没有箭头
XX.forEach((val){
print("$value")
})
map函数
where函数
any函数 只要又满足条件的就返回true
every 每一项都要满足否则就返回false
五、自定义方法
void 自定义名称(){
print("自定义方法")
}
void main() {
自定义名称()//调用
int 方法2(){
//也可以在这里定义方法
return 666
}
var a=方法2()
print(a)
}
自执行方法
((a){
print(a)
})(参数);
class类
定义类
使用类
默认就执行构造函数
简写方式
类单独抽离成一个组件或方法
- 创建一个dart文件,定义好类,
- import “路径” 引入 即可使用
私有属性
必须是一个单独的文件
属性或方法前面加_下划线即可为私有属性或者私有方法
不过仍可以间接获取,通过调用共有方法仍可获取到
getter setter修饰符
初始化列表
六、Dart静态成员、操作符、类的继承
Dart静态成员
操作符
Dart中的对象操作符
?条件运算符
as 类型转换
is 类型判断
.. 级联操作
连缀操作
类的继承
如果继承类调用方法自己有的话则调用自己的,没有才会去父类找
多态
七、接口
/*
和Java一样,dart也有接口,但是和Java还是有区别的。
首先,dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。
同样使用implements关键字进行实现。
但是dart的接口有点奇怪,如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍。
而因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现像Java接口那样的方式,一般会使用抽象类。
建议使用抽象类定义接口。
*/
/*
定义一个DB库 支持 mysql mssql mongodb
mysql mssql mongodb三个类里面都有同样的方法
*/
abstract class Db{ //当做接口 接口:就是约定 、规范
late String uri; //数据库的链接地址
add(String data);
save();
delete();
}
class Mysql implements Db{
@override
String uri;
Mysql(this.uri);
@override
add(data) {
// TODO: implement add
print('这是mysql的add方法'+data);
}
@override
delete() {
// TODO: implement delete
return null;
}
@override
save() {
// TODO: implement save
return null;
}
remove(){
}
}
class MsSql implements Db{
@override
late String uri;
@override
add(String data) {
print('这是mssql的add方法'+data);
}
@override
delete() {
// TODO: implement delete
return null;
}
@override
save() {
// TODO: implement save
return null;
}
}
main() {
Mysql mysql=new Mysql('xxxxxx');
mysql.add('1243214');
}
八、接口分离写法
九、一个类实现多个接口
之后再入口调用类
未完待续