写点什么

一文了解 Dart 语法,kotlin 密封接口

用户头像
Android架构
关注
发布于: 2021 年 11 月 05 日

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


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


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

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
一文了解Dart语法,kotlin密封接口