一文了解 Dart 语法,kotlin 密封接口
Dart 语言支持以下类型
numbers
包含 int 和 double 两种类型,没有像 Java 中的 float 类型,int 和 double 都是 num 的子类型。
strings
Dart 的字符串是一系列 UTF-16 代码单元。创建方法如下:
String str1 = "hello"; //可以使用单引号或双引号 print("str1 = str2");
输出结果为
str1 = hellostr2 = Hi,BruceThis is Xiaoming.
booleans
Dart 有一个名为 bool 的类型,只有两个对象具有 bool 类型:true 和 false,他们都是编译时常量。
lists
和其他编程语言常见的集合一样,Dart 中使用的集合是数组或有序的对象组。Dart 中数组是 List 对象。
List arr = ["Bruce", "Nick", "John"];print("arr = $arr");
maps
Map map = {"name": "Bruce","age": 18,"high": 1.70};
print("map = {map['name']}");
var map1 = {1: "hi",2: "h
ello",3: "yep"};print("map1 = {map1[1]}");
输出结果为
map = {name: Bruce, age: 18, high: 1.7}map['name'] = Brucemap1 = {1: hi, 2: hello, 3: yep}map1[1] = hi
runes
符文是字符串的 UTF-32 代码点。在字符串中表示 32 位 Unicode 值需要特殊语法,常用方法是 \uXXXX,其中 XXXX 是 4 位十六进制值,比如小心心(?)是\u2665
。要指定多于或少于 4 个十六进制数字,请将值放在大括号中。 比如,微笑(??)是\u{1f600}
。
String smile = '\u{1f600}';print("微笑:$smile");
Runes input = new Runes('\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');print(String.fromCharCodes(input));
输出结果为
微笑:??? ?? ?? ?? ?? ??
函数
Dart 是一种真正的面向对象语言,因此即使是函数也是对象并且具有类型 Function。这意味着函数可以分配给变量或作为参数传递给其他函数。
定义方法
和绝大多数编程语言一样,Dart 函数通常的定义方式为
String getName() {return "Bruce";}
如果函数体中只包含一个表达式,则可以使用简写语法
String getName() => "Bruce";
可选参数
Dart 函数可以设置可选参数,可以使用命名参数也可以使用位置参数。
命名参数,定义格式如 {param1, param2, …}
// 函数定义 void showDesc({var name, var age}) {if(name != null) {print("name = name");}if(age != null) {print("age = age");}}
// 函数调用 showDesc(name: "Bruce");
// 输出结果 name = Bruce
位置参数,使用 [] 来标记可选参数。
// 函数定义 void showDesc(var name, [var age]) {print("name = $name");
if(age != null) {print("age = $age");}}
// 函数调用 showDesc("Bruce");
// 输出结果 name = Bruce
默认值
函数的可选参数也可以使用 = 设置默认值
// 函数定义 void showDesc(var name, [var age = 18]) {print("name = $name");
if(age != null) {print("age = $age");}}
// 函数调用 showDesc("Bruce");
// 输出结果 name = Bruceage = 18
main 函数
和其他编程语言一样,Dart 中每个应用程序都必须有一个顶级 main()函数,该函数作为应用程序的入口点。
函数作为参数
Dart 中的函数可以作为另一个函数的参数。
// 函数定义 void println(String name) {print("name = $name");}
void showDesc(var name, Function log) {log(name);}
// 函数调用 showDesc("Bruce", println);
// 输出结果 name = Bruce
匿名函数
// 函数定义 void showDesc(var name, Function log) {log(name);}
// 函数调用,匿名函数作为参数 showDesc("Bruce", (name) {print("name = $name");});
// 输出结果 name = Bruce
嵌套函数
Dart 支持嵌套函数,也就是函数中可以定义函数。
// 函数定义 void showDesc(var name) {print("That is a nested function!");
//函数中定义函数 void println(var name) {print("name = $name");}
println(name);}
// 函数调用 showDesc("Bruce");
// 输出结果 That is a nested function!name = Bruce
运算符
Dart 中使用到的运算符如下表格
下面就对一些对于 Java 或 Objective-C 来说未使用过的运算符通过代码来做个介绍。
?.
的使用
//定义类 class Person {var name;Person(this.name);}
// 调用 Person p;var name = p?.name; //先判断 p 是否为 null,如果是,则 name 为 null;如果否,则返回 p.name 值 print("name = $name");
// 输出结果 name = null
~/
的使用
// 代码语句 var num = 10;var result = num ~/ 3; //得出一个小于等于(num/3)的最大整数 print("result = $result");
// 输出结果 result = 3
as
的使用,as 用来做类型转化
// 类定义 class Banana {var weight;Banana(this.weight);}
class Apple {var weight;Apple(this.weight);}
// 调用 dynamic b = Banana(20);(b as Banana).weight = 20; // 正常执行 print("b.weight = {(b as Apple).weight}");
//输出结果 b.weight = 20Uncaught exception:CastError: Instance of 'Banana': type 'Banana' is not a subtype of type 'Apple'
is
的使用
// 函数和类代码定义 getFruit() => Banana(20); // 获取一个水果对象
class Banana {var weight;Banana(this.weight);}
class Apple {var color;Apple(this.color);}
// 调用 var b = getFruit();if(b is Apple) { //判断对象是否为 Apple 类 print("The fruit is an apple");} else if(b is Banana) { //判断水果是否为 Banana 类 print("The fruit is a banana");}
// 输出结果 The fruit is a banana
??
的使用
// 操作代码块 String name;String nickName = name ?? "Nick"; //如果 name 不为 null,则 nickName 值为 name 的值,否则值为 Nickprint("nickName = $nickName");
name = "Bruce";nickName = name ?? "Nick"; //如果 name 不为 null,则 nickName 值为 name 的值,否则值为 Nickprint("nickName = $nickName");
// 输出结果 nickName = NicknickName = Bruce
..
的使用,级联操作允许对同一个对象进行一系列操作。
// 类定义 class Banana {var weight;var color;Banana(this.weight, this.color);
void showWeight() {print("weight = $weight");}
void showColor() {print("color = $color");}}
// 调用 Banana(20, 'yellow')..showWeight()..showColor();
// 输出结果 weight = 20color = yellow
控制流语句
Dart 中的控制流语句和其他语言一样,包含以下方式
if and else
for 循环
while 和 do-while 循环
break 和 continue
switch-case 语句
以上控制流语句和其他编程语言用法一样,switch-case 有一个特殊的用法如下,可以使用 continue 语句和标签来执行指定 case 语句。
var fruit = 'apple';switch (fruit) {case 'banana':print("this is a banana");continue anotherFruit;
anotherFruit:case 'apple':print("this is an apple");break;}
// 输出结果 this is an apple
异常
Dart 的异常捕获也是使用 try-catch 语法,不过与 java 等语言稍有不同
// 定义一个抛出异常的函数 void handleOperator() => throw Exception("this operator exception!");
// 函数调用 try {handleOperator();} on Exception catch(e) {print(e);} finally { // finally 语句可选 print("finally");}
// 输出结果 Exception: this operator exception!finally
评论