一、入口函数 很多程序入口都是从main函数开始,所以dart也不例外,一起来看下百变的main函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 void main() { print ('Hello World!' ); } main() { print ('Hello World!' ); } void main() => print ('Hello World!' );main() => print ('Hello World!' );
二、数据类型 在dart中的一切皆是对象,包括数字、布尔值、函数等,它们和Java一样都继承于Object, 所以它们的默认值也就是null. 在dart主要有: 布尔类型bool、数字类型num(数字类型又分为int,double,并且两者父类都是num)、字符串类型String、集合类型(List, Set, Map)、Runes类和Symbols类型(后两个用的并不太多)
1、布尔类型(bool) 在dart中和C语言一样都是使用bool来声明一个布尔类型变量或常量,但是一致的是它对应的值只有两个true和false.
1 2 3 4 main() { bool isClosed = true ; bool isOpened = false ; }
2、数字类型(num、int、double) 在dart中num、int、double都是类,然后int、double都继承num抽象类

1 2 3 4 5 6 7 main() { double pi = 3.141592653 ; int width = 200 ; int height = 300 ; print (width / height); print (width ~/ height); }
dart也拥有一些数字常用的函数:
1 2 3 4 5 6 7 8 9 10 11 12 main() { print (3.141592653 .toStringAsFixed(3 )); print (6.6 .floor()); print ((-6.6 ).ceil()); print (9.9 .ceil()); print (666.6 .round()); print ((-666.6 ).abs()); print (666.6 .toInt()); print (999. isEven); print (999. isOdd); print (666.6 .toString()); }
3、字符串类型(String) 在Dart中支持单引号、双引号、三引号以及$字符串模板用法和Kotlin是一模一样的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 main() { String name = 'Hello Dart!' ; String title = "'Hello Dart!'" ; String description = """ Hello Dart! Hello Dart! Hello Dart! Hello Dart! Hello Dart! """ ; num value = 2 ; String result = "The result is $value " ; num width = 200 ; num height = 300 ; String square = "The square is ${width * height} " ; }
dart中也有很多字符串操作的方法,比如字符串拆分、子串等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 main() { String url = "https://mrale.ph/dartvm/" ; print (url.split("://" )[0 ]); print (url.substring(3 , 9 )); print (url.codeUnitAt(0 )); print (url.startsWith("https" )); print (url.endsWith("/" )); print (url.toUpperCase()); print (url.toLowerCase()); print (url.indexOf("ph" )); print (url.contains("http" )); print (url.trim()); print (url.length); print (url.replaceFirst("t" , "A" )); print (url.replaceAll("m" , "M" )); }
4、类型检查(is和is!)和强制类型转换(as) dart也是通过 is 关键字来对类型进行检查以及使用 as 关键字对类型进行强制转换,如果判断不是某个类型dart中使用 is! 。
1 2 3 4 5 6 7 8 main() { int number = 100 ; double distance = 200.5 ; num age = 18 ; print (number is num ); print (distance is ! int ); print (age as int ); }
5、Runes和Symbols类型 在Dart中的Runes和Symbols类型使用并不多,这里做个简单的介绍, Runes类型是UTF-32字节单元定义的Unicode字符串,Unicode可以使用数字表示字母、数字和符号,然而在dart中String是一系列的UTF-16的字节单元,所以想要表示32位的Unicode的值,就需要用到Runes类型。我们一般使用\uxxxx这种形式来表示一个Unicode码,xxxx 表示4个十六进制值。当十六进制数据多余或者少于4位时,将十六进制数放入到花括号中,例如,微笑表情(😆)是\u{1f600}。而Symbols类型则用得很少,一般用于Dart中的反射,但是注意在Flutter中禁止使用反射。
1 2 3 4 5 6 7 8 9 10 main() { var clapping = '\u{1f44f}' ; print (clapping); print (clapping.codeUnits); print (clapping.runes.toList()); Runes input = new Runes( '\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}' ); print (new String .fromCharCodes(input)); }
6、Object类型 在Dart中所有东西都是对象,都继承于Object, 所以可以使用Object可以定义任何的变量,而且赋值后,类型也可以更改。
1 2 3 4 main() { Object color = 'black' ; color = 0xff000000 ; }
7、dynamic类型 在Dart中还有一个和Object类型非常类似的类型那就是dynamic类型,下面讲到的var声明的变量未赋值的时候就是dynamic类型, 它可以像Object一样可以改变类型。dynamic类型一般用于无法确定具体类型, 注意: 建议不要滥用dynamic,一般尽量使用Object, 如果你对Flutter和Native原生通信PlatformChannel代码熟悉的话,你会发现里面大量使用了dynamic, 因为可能native数据类型无法对应dart中的数据类型,此时dart接收一般就会使用dynamic.
Object和dynamic区别在于: Object会在编译阶段检查类型,而dynamic不会在编译阶段检查类型。
1 2 3 4 main() { dynamic color = 'black' ; color = 0xff000000 ; }
三、变量和常量 1、var关键字 在dart中可以使用var来替代具体类型的声明,会自动推导变量的类型,这是因为var并不是直接存储值,而是存储值的对象引用,所以var可以声明任何变量。注意: 在Flutter开发一般会经常使用var声明变量,以便于可以自动推导变量的类型。
1 2 3 4 5 6 7 8 main() { int colorValue = 0xff000000 ; var colorKey = 'black' ; var colorList = ['red' , 'yellow' , 'blue' , 'green' ]; var colorSet = {'red' , 'yellow' , 'blue' , 'green' }; var colorMap = {'white' : 0xffffffff , 'black' : 0xff000000 }; }
但是在使用var声明变量的时候,需要注意的是: 如果var声明的变量开始不初始化,不仅值可以改变它的类型也是可以被修改的,但是一旦开始初始化赋值后,它的类型就确定了,后续不能被改变。
1 2 3 4 5 6 7 8 9 10 11 main() { var color; color = 'red' ; print (color is String ); color = 0xffff0000 ; print (color is int ); var colorValue = 0xffff0000 ; colorValue = 'red' ; print (colorValue is int ); }
2、常量(final和const) 在dart中声明常量可以使用const或final 两个关键字,注意: 这两者的区别在于如果常量是编译期就能初始化的就用const如果常量是运行时期初始化的就用final
1 2 3 4 main() { const PI = 3.141592653 ; final nowTime = DateTime .now(); }