Dart 语言基础入门篇


Dart 语言基础入门篇

文章插图
 
 
本文是【从零开始学习,开发个Flutter App】路上的第 1 篇文章 。
这篇文章介绍了 Dart 的基础特性,目的在于让大家建立对 Dart 语言的总体认知,初步掌握 Dart 的语法 。
我们假定读者已经有一定的编程基础,如果你了解 JAVAScript 或者 Java 等面向对象语言,那 Dart 学习起来应该很有亲切感 。
Dart 是一门采取众家之长的编程语言 。尽管 Dart 很多语法和 JavaScript 很相似,但 Dart 语言同时是一门强类型的语言,它同时结合了像 Java 这样强类型面向对象语言的特性,这使得它能胜任大型应用开发,同时它没有 Java 的臃肿,Dart 语言在设计上非常简洁、灵活和高效 。
JavaScript 从简单的浏览器脚本到服务端(nodejs),慢慢延伸到PC客户端(electron)、App (React Native)甚至小程序开发,它已然成为一门真正意义上的全栈开发语言 。
如果说 JavaScript 是在漫长的时光里野蛮生长,那 Dart 从一开始就是精心设计出来的 。如果说有一门语言取代JavaScript的位置,那很可能就是Dart 。
Talk is cheep,下面就让我们来亲自感受一下这门语言的吧 。
变量你可以像 JavaScript 那样声明一个变量:
var name = 'Bob';编译器会推导出 name 的类型是String 类型,等价于:
String name = 'Bob';我们可以从下面代码窥见 Dart 是强类型语言的特性:
var name = 'Bob';// 调用 String 的方法print(name.toLowerCase());// 编译错误// name = 1;前面我们说过,Dart 除了具备简洁的特点,而且也可以是非常灵活的,如果你想变换一个变量的类型,你也可以使用dynamic 来声明变量,这就跟 JavaScript 一样了:
dynamic name = 'Bob'; //String 类型name = 1;// int 类型print(name);上面的代码可以正常编译和运行,但除非你有足够的理由,请不要轻易使用 。
final 的语义和 Java 的一样,表示该变量是不可变的:
// String 可以省略final String name = 'Bob'; // 编译错误// name = 'Mary';其中 String 可以省略,Dart 编译器足够聪明地知道变量name 的类型 。
如果要声明常量,可以使用const 关键词:
const PI = '3.14';class Person{static const name = 'KK';}如果类变量,则需要声明为static const。
内置类型不像Java把类型分的特别细,比如整数类型,就有byte、short、int 、long。Dart 的类型设计相当简洁,这也是 Dart 容易上手的原因之一,可以理解为通过牺牲空间来换取效率吧 。
数值类型Dart 内置支持两种数值类型,分别是int 和double ,它们的大小都是64位 。
var x = 1;// 0x开头为16进制整数var hex = 0xDEADBEEF;var y = 1.1;// 指数形式var exponents = 1.42e5;需要注意的是,在Dart中,所有变量值都是一个对象,int和double类型也不例外,它们都是num类型的子类,这点和Java和JavaScript都不太一样:
// String -> intvar one = int.parse('1');assert(one == 1);// String -> doublevar onePointOne = double.parse('1.1');assert(onePointOne == 1.1);// int -> StringString oneAsString = 1.toString();assert(oneAsString == '1');// double -> StringString piAsString = 3.14159.toStringAsFixed(2);assert(piAsString == '3.14');字符串Dart 字符串使用的是UTF-16编码 。
var s = '中';s.codeUnits.forEach((ch) => print(ch));// 输出为UNICODE值20013Dart 采用了 JavaScript 中类似模板字符串的概念,可以在字符串通过${expression}语法插入变量:
var s = "hello";print('${s}, world!');//可以简化成:print('$s, world!');//调用方法print('${s.toUpperCase()}, world!');Dart 可以直接通过==来比较字符串:
var s1 = "hello";var s2 = "HELLO";assert(s1.toUpperCase() == s2);布尔类型Dart 布尔类型对应为bool关键词,它有true和false两个值,这点和其他语言区别不大 。值得一提的是,在Dart的条件语句if和assert表达式里面,它们的值必须是bool类型,这点和 JavaScript 不同 。
var s = '';assert(s.isEmpty);if(s.isNotEmpty){// do something}//编译错误,在JavaScript常用来判断undefinedif(s){}Lists你可以把Dart中的List对应到 JavaScript 的数组或者 Java 中的ArrayList,但 Dart 的设计更为精巧 。
你可以通过类似 JavaScript 一样声明一个数组对象:
var list = [];list.add('Hello');list.add(1);


推荐阅读