在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Dart是一种“结构化的web编程”语言,Dart编程语言在所有现代浏览器和环境中提供高性能。Dart是谷歌开发的计算机编程语言,后来被ECMA认定为标准。 Dart重要的概念: 1、所有的东西都是对象。无论是变量、数字、函数等都是对象。所有的对象都是实例。所有的对象都继承自内置的Object类。这点类似于JAVA语言的“一切皆为对象”。 2、程序中指定数据类型使得程序合理地分配内存空间,并帮助编译器进行语法检查。但是,指定类型不是必须的。Dart语言是弱数据类型。 3、Dart代码在运行前解析。指定数据类型和编译时的长列,可以提高运行速度。 4、Dart程序有统一的程序入口:main()。这一点与JAVA、C/C++语言相像。 5、Dart没有public、protected和private的概念。私有特性通过变量或函数加下下划线来表示。 6、Dart的工具可以检查出警告信息(warning)和错误信息(errors)。警告信息只是表明代码可能不工作,但是不会妨碍程序运行。错误信息可以是编译时的错误,也可能是运行时的错误。编译时的错误将阻止程序运行,运行时的错误将会以异常(execption) 的方式呈现。 7、Dart支持anync/await异步处理。 8、关键字
避免使用这些单词作为标识符。但是,如有必要,标有上标的关键字可以是标识符:
表中的所有其他单词都是保留字,不能是标识符。 Dart语言的常用库
其中三个开发库的使用频率最高: dart:core 核心库,包含strings、numbers、collections、errors、dates、URIs等。 dart:html 网页开发里DOM相关的一些库。 dart:io I/O命令行使用的I/O库。 dart:core库时Dart语言初始已经包含的库,其他的任何库在使用前都需要加上import语句。 变量与基本数据类型:在Dart里,变量声明使用var关键字。在Dart语言里一切且为对象,所以如果没有将变量初始化,那么它的默认值为null。 全局变量特点:全局变量常驻内存、全局变量污染全局 1、常量和固定值 常量及固定值在开发中很常见。如果定义的变量不会变化,可以使用final或const来指明。const是一个编译时的常量;final的值只能被设定一次。 例如:第一行代码设置了一个常量,如果第二行进行重新赋值,那么将引发异常。 final username = "张三"; //定义了一个常量 //username = "李四"; //会引发一个错误 通过对const类型做四则运行将自动得到一个const类型的值。下面代码会得到一个常量,计算圆的面积: const pi = 3.1415926; const area = pi * 100 * 100; 可以通过const来创建常量的值,就是说const[]本身是构造函数,示例代码如下: final stars = const []; const buttons = const []; 2、基本数据类型 Dart语言常用的基本数据类型包括:Number、String、Boolean、List、Map。 (1)Number类型:包括int整型, double浮点型 int和double类型都是num类型的子类。int类型不能包含小数点。 int必须是整型;double即可以是整型,也可以是浮点型。 num类型包括的操作有:+,-,*,/,% 以及位移操作>>。num类型包括的常用方法有:abs、ceil和floor。 (2)String类型:字符串类型 String str = "This is flutter";
可以使用三个单引号或双引号来定义多行的String类型,在Flutter中我们专门用来表示大文本块。 var s1 = ''' ''' var s2 = """ """ //请注意这是一个用三个引号包裹起来的字符串,可以用来添加多行数据 字符串类型拼接: String str1 = "Hello"; String str2 = "World" print(str1 + str2); //Hello World print(str1 + " " + str2); //Hello World (3)Boolean类型 Dart是强bool类型检查,只有bool类型的值是true才被认为是true。有的语言里0是false,大于0是true。在Dart语言里则不是,值必须为true或者false。 var sex = "男"; if(sex){ print("你的性别是!" + sex); } 上面的示例代码编译不能正常通过,因为sex变量是一个字符串,不是使用条件判断语句,必须用bool类型才可以。 (4)List类型 在Dart语言中,具有一系列相同类型的数据称为List对象。Dart里的List对象类似于JavaScript语言的数组Array对象。 //第一种定义List方式 var list1 = [1, 2, 3]; //第二种定义List方式 var list2 = new List(); list2.add("a"); list2.add(123); list2.add("c"); //定义List指定类型 var list3 = new List<String>(); list3.add("a"); list3.add("b"); List常用属性: length 长度 var arr = ["香蕉","苹果","橘子"]; print(arr.length); //3 print(arr.reversed); //(橘子, 苹果, 香蕉) print(arr.isEmpty); //false print(arr.isNotEmpty); //true var newArr = arr.reversed.toList(); print(newArr); //[橘子, 苹果, 香蕉] List常用方法: add 增加 var arr = ["香蕉","苹果","橘子"]; arr.add("桃子"); print(arr); //[香蕉, 苹果, 橘子, 桃子] arr.addAll(["西瓜","草莓"]); print(arr); //[香蕉, 苹果, 橘子, 桃子, 西瓜, 草莓] print(arr.indexOf("苹果")); //1 //indexOf查找不到的话,返回-1;查找到的话,返回索引值 arr.remove("西瓜"); print(arr); //[香蕉, 苹果, 橘子, 桃子, 草莓] arr.removeAt(3); print(arr); //[香蕉, 苹果, 橘子, 草莓] arr.fillRange(1, 2, "aaa"); //修改 print(arr); //[香蕉, aaa, 橘子, 草莓] arr.insert(2, "bbb"); //插入 print(arr); //[香蕉, aaa, bbb, 橘子, 草莓] arr.insertAll(1, ["123","456"]); //插入多个 print(arr); //[香蕉, 123, 456, aaa, bbb, 橘子, 草莓] var arr = ["香蕉","苹果","橘子"]; var str = arr.join("-"); //List转换成字符串 print(str); //香蕉-苹果-橘子 var newArr = str.split("-"); //字符串转换成List print(newArr); //[香蕉, 苹果, 橘子] forEach:循环遍历 List arr = ["香蕉","苹果","橘子"]; arr.forEach((value){ print(value); }); map:常用于修改集合里的数据 //循环遍历修改List List myNum = [1,3,5]; List newNum = new List(); for(var i = 0; i < myNum.length; i++){ newNum.add(myNum[i]*2); } print(newNum); //[2, 6, 10] //可以用map来实现 List myNum = [1,3,5]; var newNum = myNum.map((value){ return value*2; }); print(newNum.toList()); //[2, 6, 10] where:把满足条件的返回一个新的集合 List myNum = [1,3,4,5,7,8,9]; var newNum = myNum.where((value){ return value > 5; }); print(newNum.toList()); //[7, 8, 9] any和every:判断List里有没有满足条件的,有的话返回true或false //any List myNum = [1,3,4,5,7,8,9]; var f = myNum.any((value){ //只要集合里有满足条件的就返回true return value >5; }); print(f); //true //every List myNum = [1,3,4,5,7,8,9]; var f = myNum.every((value){ //集合里面每一个都要满足条件返回true,否则返回false return value >5; }); print(f); //false (5)Map类型 Map常用属性: keys 获取所有的key值 var person = { "name":"张三", "age":20, "sex":"男", }; print(person.keys.toList()); //[name, age, sex] print(person.values.toList()); //[张三, 20, 男] print(person.isEmpty); //fales print(person.isNotEmpty); //true Map常用方法: remove(key) 删除指定key的数据 var person = { "name":"张三", "age":20, "sex":"男", }; person.addAll({"work":["程序员","外卖员"],"height":170}); print(person); //{name: 张三, age: 20, sex: 男, work: [程序员, 外卖员], height: 170} person.remove("sex"); print(person); //{name: 张三, age: 20, work: [程序员, 外卖员], height: 170} print(person.containsValue("张三")); //true forEach(): var person = { "name":"张三", "age":20, "sex":"男", }; person.forEach((key,vlaue){ print("$key--$vlaue"); }); //如果是一行代码也可以用=> person.forEach((key,vlaue)=>print("$key--$vlaue")); Map类型将key和value关联在一起,也就是键值对。像其他支持Map的编程语言一样,key必须是唯一的。 var week = { "Monday" : "星期一", "Tuesday" : "星期二", "Wednesday" : "星期三", "Thursday" : "星期四", "Friday" : "星期五", "Saturday" : "星期六", "Sunday" : "星期日", }; 添加新的key-value对,再给week添加一个值,注意,其中0为键不是数组的下标索引:week['0'] = '星期一'; 检查key是否在Map对象中:assert(week['Monday'] == null); 使用length来获取key-value对的数量,现在我们调用length输出长度为8,原因是刚才后面又添加了一个数据(0),代码如下: var week = new Map(); week['Monday'] = "星期一"; week['Tuesday'] = "星期二"; week['Wednesday'] = "星期三"; week['Thursday'] = "星期四"; week['Friday'] = "星期五"; week['Saturday'] = "星期六"; week['Sunday'] = "星期日"; week['0'] = '星期一'; print(week); //{Monday: 星期一, Tuesday: 星期二, Wednesday: 星期三, Thursday: 星期四, Friday: 星期五, Saturday: 星期六, Sunday: 星期日, 0: 星期一} print(week.length); //8 (6)Set:表示对象的集合,其中每个对象只能出现一次。 Set:用它最主要的功能就是去除数组重复内容 var ss = new Set(); ss.add("香蕉"); ss.add("苹果"); ss.add("香蕉"); print(ss); //{香蕉, 苹果} print(ss.toList()); //[香蕉, 苹果] var arr = new List(); arr.add("香蕉"); arr.add("苹果"); arr.add("香蕉"); print(arr); //[香蕉, 苹果, 香蕉] var arr = ["香蕉","苹果","橘子","香蕉","苹果","香蕉","苹果"]; var ss = new Set(); ss.addAll(arr); print(ss.toList()); //[香蕉, 苹果, 橘子] Set也可以用forEach()循环遍历:
var ss = new Set(); ss.addAll([11,22,333]); ss.forEach((value){ print(value); }); //如果只有一行代码可以用=> ss.forEach((value)=>print(value)); is 关键词来判断类型: //加入str是后台返回的数据,不知道是什么类型,可以用is来判断 var str = '1234'; if(str is String){ print('是string类型'); }else if(str is int){ print('是int类型'); }else{ print('是其他类型'); } //是string类型 Dart类型转换: (1)Number类型转换为String类型:toString() var myNum = 123; var str = myNum.toString(); print(str is String); //true (2)String类型转换为Number类型:parse() String str = "123"; var myNum = double.parse(str); //String类型转换Number类型的时候建议用double,用int的话,如果有小数会报错 print(myNum is double); //true (3)其他类型转换成Boolean类型 isEmpty:判断字符串是否为空 var str = 'xxx'; if(str.isEmpty){ print('str为空'); }else{ print('str不为空'); } //str不为空 var myNum1 = 0/0; if(myNum1.isNaN){ print('NaN'); }else{ print(myNum1); } //NaN var myNum2 = 1; if(myNum2.isNaN){ print('NaN'); }else{ print(myNum2); } //1 3、函数 Dart是一个面向对象的语言,所以函数也是对象,函数属于Function对象。 函数可以像参数一样传递给其他函数,这样便于做回调处理。 //判断两个字符串是否相等 bool equal(String str1, String str2) { retrue str1 == str2; } (1)可选参数 将参数使用中括号[]括起来,用来表明是可选位置参数。 例如:总共传入了三个参数,其中name和sex是必须传入的参数,from参数可以不传,代码如下: //获取用户信息 String getUserInfo(String name, String sex, [String from]) { var info = '$name 的性别是 $sex'; if(from != null){ info = ‘$info来自$from’; } return info; } void test(){ pring(getUserInfo(‘小王’, '男')); } (2)参数默认值 如果参数指定了默认值,当不传入值时,函数里会使用这个默认值。如果传入了值,则用传入的值取代默认值。通常参数的默认值为null。 改造上面获取用户信息的例子,给from参数赋上默认值,代码如下: //获取用户信息 使用等号= 来设置默认位置参数 String getUserInfo(String name, String sex, [String from = '中国']) { var info = '$name 的性别是 $sex'; if(from != null){ info = ‘$info来自$from’; } return info; } void test(){ pring(getUserInfo(‘小王’, '男')); } 调用上面的test()方法可以输 |
请发表评论