在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一.Dart 简介 Dart是谷歌发布的一门面向对象的开源编程语言,诞生于2011年10月10日,Dart是一种“结构化的Web编程”语言,在所有现代的浏览器和环境中提供高性能。 Dart主要用途分为三种:
下面即将开启Dart学习之旅 二.Dart语法 重要概念(Important concepts) 在学习Dart的时候,请牢记下面的一下事实和概念:
1. 变量 变量是一个引用,根据Dart中“万物皆对象”原则,即变量存储的都是对象的引用,或者说它们都是指向对象 1) 声明变量 声明可以有两种方式,一种是不指定类型,即使用var关键字 var name = "Bob"; 另一种是明确指定类型(Optional types) String name = "Bob"; 因为有类型推导,所以两种实现效果一样,官方推荐在函数内的本地变量尽量使用var声明。 在变量类型并不明确的情况下,可以使用dynamic关键字 dynamic name = "Bob"; 2 ) 默认值 没有初始化的变量自动获取一个默认值为null。类型为数字的变量如果没有初始化其值也是null,不要忘记数字类型也是对象。 var name; var age; print(name); // null print(age); // null 2. Final与const 如果一个变量的值不再修改,则使用final或者const代替var。 一个final变量只能赋值一次;一个const变量是编译时常量,const变量默认为final变量。顶层final变量与类变量在首次访问时才执行初始化。需要注意的是,实例变量可以为final,但是不能是const // 常量 const bar = 1000; // 常量计算也是常量 const atm = 0.15 * bar; const 关键字不仅仅只能用来定义常量,也可以用来创建不变的值,还能定义构造函数为const类型的,这中类型的构造函数创建的对象是不可改变的。任何变量都可以有一个不变的值。 var foo = const[1,2,3]; final baz = const[2,3,4]; 3. 内置类型 Dart内置支持下面这些类型
1) Numbers(数值) Dart支持两种类型的数字 int 整数值、double (双精度) 浮点数,两者都是num的子类。Num类型定义了基本的操作符,例如+-*/,还定义了abs()、ceil()、和floor()等函数。 2) 字符串(String) Dart字符串使用单引号或者双引号来创建字符串; String s1 = 'Single quotes work well for string literals.'; String s2 = "Double quotes work just as well."; 可以使用+操作符来把多个字符串连接为一个,也可以把多个字符串放到一起实现同样的功能 String s3 = 'String ''concatenation' ' works even over line breaks.'; String s4 = 'The + operator ' + 'work,as well.'; print(s3); print(s4); 输出结果: 其中官方不建议使用+操作符连接字符串。 使用三个单引号或者双引号也可以创建多行字符串对象 String s5 = ''' You can create multi-line strings like this one. '''; String s6 = """ This is alse a multi-line string. """; print(s5); print(s6); 输出结果: 通过提供一个r前缀可以创建一个“原始raw”字符串 var s = r"In a raw string, even \n isn't special."; var ss = "In a raw string, even \n isn't special."; print(s); print(ss); 输出结果: 可以在字符串中使用表达式,用法为:${expression}。如果表达式是一个标识符,可以省略{},如果表达式的结果为一个对象,则Dart会调用对象的toString()函数来获取一个字符串 var str = 'string interpolation'; if("Dart has $str ,which is very handy." == "Dart has string interpolation ,which is very handy."){ print("yes"); } if('Dart has ${str.toUpperCase()} ,which is very handy.' == 'Dart has STRING INTERPOLATION ,which is very handy.'){ print("upperCase is yes"); } 3) Booleans(布尔值) 为了代表布尔值,Dart有个名为bool的类型。只有两个对象是布尔类型的:true和false所创建的对象,这两个对象也都是编译时常量。 当Dart需要一个布尔值的时候,只有true对象才被认为是true,所有其他的值都是false,这点和javascript不一样,像1,“aString”以及someObject等值都认为是false。 如果在javascript中运行,则会打印Bob,在javascript中name是非null对象,所以为true,但在Dart的生产模式下运行,则不打印任何内容,原因是name != true; name被转换为false了。如果在Dart检查模式运行,代码会抛出异常,表示变量name不是一个布尔值。 4) Lists(列表) 也称array(有序集合)是所有编程语言中最常见的集合类型。在Dart中数组就是List对象。所以通常称之为lists。 var list = [1,2,3]; print("list长度为:"+list.length.toString()); //list长度为:3 print("第二个数值为:"+list[1].toString()); //第二个数值为:2 list[1] = 1; print("修改后,第二个数值为:"+list[1].toString()); //修改后,第二个数值为:1 list可以使用const关键字,可以定义一个不变的list对象(编译时常量) var constantList = const[1,2,3]; 定义一个空的可变的list,尽量使用[],如(var points = []),如果您想创建一个不可变的list,护着其他自定义类型的集合,可以使用构造函数。 如果有必要还可以提供泛型类型 var points = <Point>[]; 5 ) Maps 通常来说,Map是一个键值对相关的对象。键和值可以是任何类型的对象。每个键出现一次,而一个值则可以出现多次。 下面是一些简单实例 var gifts = { 'frist':'partridge', 'second':'turtldoves', 'fifth':'golden rings' }; var nobleGases = { 2 : 'helium', 10: 'neon', 18: 'argon', }; 使用map构造函数也可以实现同样的功能: var gifts2 = new Map(); gifts['first'] = 'partridge'; gifts['second'] = 'turtledoves'; gifts['fifth'] = 'golden rings'; var nobleGases2 = new Map(); nobleGases[2] = 'helium'; nobleGases[10] = 'neon'; nobleGases[18] = 'argon'; 往map中添加新的键值对和在javascript中用法一样 gifts['fourth'] = "calling birds"; // 添加新的键值对 获取map中的对象 print(gifts['fourth']); //calling birds 使用length来获取map中键值对的数目: print("gifts中总数为:"+gifts.length.toString()); //gifts中总数为:4 同样使用const可以创建一个编译时常量的map final constantMap = const { 2: 'helium', 10: 'neon', 18: 'argon', };
|
请发表评论