视频网站后台登陆,wordpress直播,网站建设公司推销,网站开发者模式下载视频目录
1.变量与类型
1.1 num类型
1.2 String类型
1.3 Object与Dynamic
1.4 类型判断/转换
1.5 变量和常量
2.方法/函数
3.类、接口、抽象类
3.1 类
3.2 接口
4.集合
4.1 List
4.2 Set
4.3 Map
5.总结 Dart语言的语法和Kotlin、Java有类似之处#xff0c;这里就通…目录
1.变量与类型
1.1 num类型
1.2 String类型
1.3 Object与Dynamic
1.4 类型判断/转换
1.5 变量和常量
2.方法/函数
3.类、接口、抽象类
3.1 类
3.2 接口
4.集合
4.1 List
4.2 Set
4.3 Map
5.总结 Dart语言的语法和Kotlin、Java有类似之处这里就通过对比Java和Kotlin来快速入门Dart语言
1.变量与类型
1.1 num类型
基础常见的类型有 num (分为 int 和 double ) String bool Dart 语言中的没有 float 、 short long 类型注意布尔类型为 bool 不是 boolean
与Java不同Dart语言中的类型尽管是小写但是其实是一个类没有赋值的时候为null与Java中包装类相同
int b1;
print(b1);//输出为null
Dart特有整除运算符~/,两个int相除并不是得到int类型的数值,而是double类型
print(300 / 100);//输出为3.0
print(6 ~/ 5 );//输出为1
num类型常用的方法:
main() {print(3.141592653.toStringAsFixed(3)); //3.142 保留有效数字print(6.6.floor());//6向下取整print((-6.6).ceil()); //-6 向上取整print(9.9.ceil()); //10 向上取整print(666.6.round()); //667 四舍五入print((-666.6).abs()); // 666.6 取绝对值print(666.6.toInt()); //666 转化成int,这中toInt、toDouble和Kotlin类似print(999.isEven); //false 是否是偶数print(999.isOdd); //true 是否是奇数print(666.6.toString()); //666.6 转化成字符串
}
1.2 String类型
String类型的特性和Kotlin差不多,支持单引号、双引号、三引号以及$字符串模板用法
1.3 Object与Dynamic
和Java一样,Object是所有对象的父类,而Dynamic是一种特殊的类型,主要用于不确定的类型
1.4 类型判断/转换
Dart语言与Kotlin一样具有类型推导功能
如:
var b true;//b变量的类型为bool
类型检查(is和is!)和强制类型转换(as)
main() {int number 100;double distance 200.5;num age 18;print(number is num);//trueprint(distance is! int);//trueprint(age as int);//18
}
1.5 变量和常量
Dart中,变量可以使用var关键字,会自动的进行类型推导,如果在使用var定义了一个变量,并没有初始化赋值,这个变量的类型是会随着赋值的类型而改变(dynamic类型的特点)
void main() {var num;num 123;print(num is int);/truenum xx;print(num is String);//truevar t xx;t 123; //IDE会提示错误
}
const和final都是定义常量的关键字,const是编译期就能初始化(相当于Kotlin中的final val,而final是运行期初始化(相当于Kotlin中的val)
2.方法/函数
这里方法其实与Java中非常类似,这里就提及Dart中的方法比较特殊几点
Dart中的方法格式和Java中十分类似,基本格式为
返回值 方法名(参数类型 参数名...)
值得一提的是,返回值并不是必须的(JavaScript的语言特性?),你可以省略不写,但是仍可以使用return返回数值,建议实际开发中不要这样写,你懂得...
当然,如果返回值为空,你可以省事不写或者是定义返回值为void
void main{...
}
//与上面的相同
main{...
}
Dart中可以使用箭头函数,与Java和Kotlin中的lambda方式-很像
main() print(hello world);
比较特殊的是,Dart中支持参数默认赋值以及命名参数(Kotlin中也有),然后值得一提的是,Dart中并不支持函数重载操作,包括构造函数
普通方法定义:
num sum(int a,int b){print(ab);
}
特殊定义:
num sum({int a,int b}){print(a);print(b);
}
个人感觉好像是使用了Json对象作为了参数类型,之后调用的时候参数可选,但是得标明参数名
main{sum(a:1);sum(b:2);sum(1,2);//IDE会报错sum(a:1,b:2);
}
上面说了,{}可以看做为是一种Json类型,所以,我们可以将其和普通的类型组合起来构造参数列表
num sum(int c,{int a,int b}){print(a);print(b);
}
3.类、接口、抽象类
3.1 类
与Java和Kotlin一样Dart也是通过class关键字来定义个类
class Person {var name;//隐藏了默认的无参构造函数Person();
}
//等价于:
class Person {var name;Person();//一般把与类名相同的函数称为主构造函数
}
//等价于
class Person {var name;Person(){}
}class Person {final String name;final int age;Person(this.name, this.age);//显式声明有参主构造函数Person();//编译异常注意: dart不支持同时重载多个构造函数。
}
在之前提及了构造函数不能被重载的概念,但实际很多情况都是要根据不同的参数列表来实例化一个类对象,不过好在Dart有个命名构造函数的概念,我们可以利用它来实现曲线救国。
class Person {final String name;int age;Person(this.name, this.age);Person.withName(this.name);//通过类名.函数名形式来定义命名构造函数withName。只需要name参数就能创建对象//如果没有命名构造函数在其他语言中我们一般使用函数重载的方式实现。
}main () {var person Person(mikyou, 18);//通过主构造函数创建对象var personWithName Person.withName(mikyou);//通过命名构造函数创建对象
}
重定向构造函数:
有时候我们定义了个参数列表比较全的构造方法,并且某些参数是具有默认值,使用的时候可以省略某些参数,这种情况下,我们就可以使用重定向构造函数来达到我们的效果,我们使用:来实现,如:
class Person{String name;int age;Person(this.name,this.age);Person.withName(String name):this(name,18);
}main{var person Person.withName(小红);//默认小红为18岁
}
Dart中的继承也是使用extends关键字
class Person{String name;int age;//含有默认的构造函数
}
//继承
class Student extends Person{}
3.2 接口
需要注意的是Dart中并没有接口对应的关键字interface如果我们想要实现某个接口,得将某个类声明为抽象类,并定义好接口方法,之后通过implements关键字去实现该类的接口方法即可(有点类似实现抽象类的感觉)
abstract class OnClickListener{void onClick();
}class View implements OnClickListener{overridevoid onClick() {}}
4.集合
4.1 List
Dart中的List和数组有点像,List的初始化方式如下所示:
ListString colorList [red, yellow, blue, green];//直接使用[]形式初始化
var colorList String [red, yellow, blue, green];
常用的方法其实挺多的,打个.就可以看到了,这里也就不多提了
遍历方法:
main() {ListString colorList [red, yellow, blue, green];//for-i遍历 for(var i 0; i colorList.length; i) {//可以使用var或int print(colorList[i]); } //forEach遍历 colorList.forEach((color) print(color));//forEach的参数为Function. 使用了箭头函数 //for-in遍历 for(var color in colorList) {print(color); } //whileiterator迭代器遍历类似Java中的iteator while(colorList.iterator.moveNext()) { print(colorList.iterator.current); }
}
4.2 Set
集合Set和列表List的区别在于 集合中的元素是不能重复 的。所以添加重复的元素时会返回false,表示添加不成功.
main() { SetString colorSet {red, yellow, blue, green};//直接使用{}形式初始化 var colorList String {red, yellow, blue, green};
}
Dart中可使用交、并、补集:
main() { var colorSet1 {red, yellow, blue, green}; var colorSet2 {black, yellow, blue, green, white}; print(colorSet1.intersection(colorSet2));//交集--输出: {yellow, blue, green} print(colorSet1.union(colorSet2));//并集---输出: {black, red, yellow, blue, green, white} print(colorSet1.difference(colorSet2));//补集---输出: {red}
}
遍历方式与List一样,这里不多提
4.3 Map
初始化方式:
main() { MapString, int colorMap {white: 0xffffffff, black:0xff000000};//使用{key:value}形式初始化 var colorMap String, int{white: 0xffffffff, black:0xff000000};
}
遍历:
main() { MapString, int colorMap {white: 0xffffffff, black:0xff000000}; //for-each key-value colorMap.forEach((key, value) print(color is $key, color value is $value));
}
List转为Map:4.4 集合常用操作符
main() {ListString colorList [red, yellow, blue, green];//forEach箭头函数遍历colorList.forEach((color) {print(color)});colorList.forEach((color) print(color)); //箭头函数遍历如果箭头函数内部只有一个表达式可以省略大括号//map函数的使用,输出以,分隔的字符串print(colorList.map((color) $color).join(,));//every函数的使用判断里面的元素是否都满足条件返回值为true/falseprint(colorList.every((color) color red));//sort函数的使用Listint numbers [0, 3, 1, 2, 7, 12, 2, 4];numbers.sort((num1, num2) num1 - num2); //升序排序numbers.sort((num1, num2) num2 - num1); //降序排序print(numbers);//where函数使用相当于Kotlin中的filter操作符返回符合条件元素的集合print(numbers.where((num) num 6));//firstWhere函数的使用相当于Kotlin中的find操作符返回符合条件的第一个元素如果没找到返回nullprint(numbers.firstWhere((num) num 5, orElse: () -1)); //注意: 如果没有找到执行orElse代码块可返回一个指定的默认值//singleWhere函数的使用返回符合条件的第一个元素如果没找到返回null但是前提是集合中只有一个符合条件的元素, 否则就会抛出异常print(numbers.singleWhere((num) num 4, orElse: () -1)); //注意: 如果没有找到执行orElse代码块可返回一个指定的默认值//take(n)、skip(n)函数的使用take(n)表示取当前集合前n个元素, skip(n)表示跳过前n个元素然后取剩余所有的元素print(numbers.take(5).skip(2));//List.from函数的使用从给定集合中创建一个新的集合,相当于clone一个集合print(List.from(numbers));//expand函数的使用, 将集合一个元素扩展成多个元素或者将多个元素组成二维数组展开成平铺一个一位数组var pair [[1, 2],[3, 4]];print(flatten list: ${pair.expand((pair) pair)});var inputs [1, 2, 3];print(duplicated list: ${inputs.expand((number) [number,number,number])});
}
5.总结
函数不能重载构造函数不能重载,但可以用命名构造函数来变相实现重载的功能方法返回值可以省略,但仍可以使用return返回数值(JS特性)函数参数有个特殊的类型{}(Json类型?)Dart中没有接口,需要使用抽象类来实现接口 文章转载自: http://www.morning.btns.cn.gov.cn.btns.cn http://www.morning.rwbx.cn.gov.cn.rwbx.cn http://www.morning.jcxzq.cn.gov.cn.jcxzq.cn http://www.morning.fqpgf.cn.gov.cn.fqpgf.cn http://www.morning.wbysj.cn.gov.cn.wbysj.cn http://www.morning.wbyqy.cn.gov.cn.wbyqy.cn http://www.morning.swzpx.cn.gov.cn.swzpx.cn http://www.morning.tgts.cn.gov.cn.tgts.cn http://www.morning.nxnrt.cn.gov.cn.nxnrt.cn http://www.morning.leeong.com.gov.cn.leeong.com http://www.morning.tbqbd.cn.gov.cn.tbqbd.cn http://www.morning.wrysm.cn.gov.cn.wrysm.cn http://www.morning.skrh.cn.gov.cn.skrh.cn http://www.morning.rfbt.cn.gov.cn.rfbt.cn http://www.morning.mhnr.cn.gov.cn.mhnr.cn http://www.morning.pxjp.cn.gov.cn.pxjp.cn http://www.morning.bqmhm.cn.gov.cn.bqmhm.cn http://www.morning.iuibhkd.cn.gov.cn.iuibhkd.cn http://www.morning.dyhlm.cn.gov.cn.dyhlm.cn http://www.morning.lcwhn.cn.gov.cn.lcwhn.cn http://www.morning.bzcjx.cn.gov.cn.bzcjx.cn http://www.morning.xhrws.cn.gov.cn.xhrws.cn http://www.morning.rnzgf.cn.gov.cn.rnzgf.cn http://www.morning.trsmb.cn.gov.cn.trsmb.cn http://www.morning.jcfqg.cn.gov.cn.jcfqg.cn http://www.morning.stph.cn.gov.cn.stph.cn http://www.morning.tkjh.cn.gov.cn.tkjh.cn http://www.morning.bpmz.cn.gov.cn.bpmz.cn http://www.morning.gsjfn.cn.gov.cn.gsjfn.cn http://www.morning.zxybw.cn.gov.cn.zxybw.cn http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn http://www.morning.mdwtm.cn.gov.cn.mdwtm.cn http://www.morning.xqqcq.cn.gov.cn.xqqcq.cn http://www.morning.kmprl.cn.gov.cn.kmprl.cn http://www.morning.nfsrs.cn.gov.cn.nfsrs.cn http://www.morning.nwmwp.cn.gov.cn.nwmwp.cn http://www.morning.lsgjf.cn.gov.cn.lsgjf.cn http://www.morning.dnbhd.cn.gov.cn.dnbhd.cn http://www.morning.btypn.cn.gov.cn.btypn.cn http://www.morning.btgxf.cn.gov.cn.btgxf.cn http://www.morning.tbrnl.cn.gov.cn.tbrnl.cn http://www.morning.fbzyc.cn.gov.cn.fbzyc.cn http://www.morning.sqtsl.cn.gov.cn.sqtsl.cn http://www.morning.mcjyair.com.gov.cn.mcjyair.com http://www.morning.qxjck.cn.gov.cn.qxjck.cn http://www.morning.mkbc.cn.gov.cn.mkbc.cn http://www.morning.pwbps.cn.gov.cn.pwbps.cn http://www.morning.wfysn.cn.gov.cn.wfysn.cn http://www.morning.gnkbf.cn.gov.cn.gnkbf.cn http://www.morning.cgtrz.cn.gov.cn.cgtrz.cn http://www.morning.ggtgl.cn.gov.cn.ggtgl.cn http://www.morning.nrddx.com.gov.cn.nrddx.com http://www.morning.ghgck.cn.gov.cn.ghgck.cn http://www.morning.tlbdy.cn.gov.cn.tlbdy.cn http://www.morning.qszyd.cn.gov.cn.qszyd.cn http://www.morning.bhpsz.cn.gov.cn.bhpsz.cn http://www.morning.bxrqf.cn.gov.cn.bxrqf.cn http://www.morning.hffjj.cn.gov.cn.hffjj.cn http://www.morning.gbcxb.cn.gov.cn.gbcxb.cn http://www.morning.rwzkp.cn.gov.cn.rwzkp.cn http://www.morning.dhqzc.cn.gov.cn.dhqzc.cn http://www.morning.pflpb.cn.gov.cn.pflpb.cn http://www.morning.qjldz.cn.gov.cn.qjldz.cn http://www.morning.qjfkz.cn.gov.cn.qjfkz.cn http://www.morning.fjptn.cn.gov.cn.fjptn.cn http://www.morning.ljpqy.cn.gov.cn.ljpqy.cn http://www.morning.kyhnl.cn.gov.cn.kyhnl.cn http://www.morning.gpcy.cn.gov.cn.gpcy.cn http://www.morning.jmspy.cn.gov.cn.jmspy.cn http://www.morning.zbqsg.cn.gov.cn.zbqsg.cn http://www.morning.jrqbr.cn.gov.cn.jrqbr.cn http://www.morning.lhgkr.cn.gov.cn.lhgkr.cn http://www.morning.shuangxizhongxin.cn.gov.cn.shuangxizhongxin.cn http://www.morning.sgtq.cn.gov.cn.sgtq.cn http://www.morning.pwrkl.cn.gov.cn.pwrkl.cn http://www.morning.dqgbx.cn.gov.cn.dqgbx.cn http://www.morning.yhywx.cn.gov.cn.yhywx.cn http://www.morning.zfkxj.cn.gov.cn.zfkxj.cn http://www.morning.dkzrs.cn.gov.cn.dkzrs.cn http://www.morning.rkyw.cn.gov.cn.rkyw.cn