程序入口
在Dart中都必须有一个顶级的main()
$函数作为程序的入口。
void main() {
}
控制台输出
想要在Dart中打印到控制台,可使用print
:
print('Hello World!');
变量
Dart是类型安全的- 它使用静态类型检查和运行时的组合,以确保变量的值始终与变量的静态值类型匹配。但某些类型注释是可选的,Dart会执行类型推断。
int a = 123;
var a = 123;
创建和分配变量
在Dart中,变量必须是明确的类型或者系统能够解析的类型。
//Both are acceptable in Dart.
String name = 'dart'; //Explicitly typed as a string.
var otherName = 'dart'; //Inferred string.
默认值
在Dart中,未初始化的变量初始值为null
。
注意:数字在Dart中也被当成对象,所以只要是带有数字类型的未初始化变量的值都是“null”。
var name; // == null
int x; // == null
有关更多信息,可参考Dart官网关于变量的介绍。
检查null或者零
在Dart中,只有布尔值“true”被视为true。
var myNull = null;
if (myNull == null) {
print('myNull "== null" to check null');
}
var zero = 0;
if (zero == 0) {
print('zero "== 0" to check zero');
}
运行结果:
myNull "== null" to check null
zero "== 0" to check zero
从Dart 1.12开始,null-aware
运算符可用来帮我们做null的检查:
class Student {
String name;
int age;
Student({this.name,this.age});
}
void main(){
Student student = Student(name: '张三');
print(student?.name??'null');
print(student?.age??0);
}
运行结果:
张三
0
?.
运算符在左边为null的情况下会阻断右边的调用,??
运算符主要作用是在左侧表达式为null时为其设置默认值。
对其表达式:
student?.name??'null'
如果student为null或name为null都会导致表达式为null。
函数
Dart是一种真正的面向对象语言,所以即使是函数也是对象,并且有一个类型,Function。这意味着函数可以分配给变量或作为参数传递给其他函数。
例如:
int add(int a, int b) {
return a + b;
}
void main() {
add(1, 2); //return 3
}
函数只有一行表达式的,可以使用尖头语法简写成:
int add(int a, int b) => a + b;
void main() {
add(1, 2); //return 3
}
可选参数函数
Dart定义可选参数有两种方式一种使用{}
, 另一种使用[]
。区别就是, 如果用{}
声明,在使用时必须带着参数名,如:a:123;如果用[]
声明,在使用时需要按照顺序使用。
int add1(int a, {int b, int c}) {
return a + b + c ;
}
int add2(int a, [int b, int c]) {
return a + b + c;
}
void main() {
add1(1, b:2); //return 3
add1(1, c:3); //return 4
add1(1, b:2, c:3); //return 6
add2(1); //return 3
add2(1, 2); //return 3
add2(1, 2, 3); //return 6
}
关于函数的更多内容,可参考Dart官网关于functions的介绍。
异步编程
Futures
Dart是一个单线程编程语言。如果任何代码阻塞线程执行都会导致程序卡死。异步编程防止出现阻塞操作。Dart使用Future对象表示异步操作。
void main() {
_getIPAddress() {
final url = 'https://httpbin.org/ip';
HttpRequest.request(url).then((value) {
String ip = json.decode(value.responseText)['origin'];
print(ip);
}).catchError((error) => print(error));
}
_getIPAddress();
}
async和await
在Dart中,async
函数返回一个Future
,函数的主体稍后执行。await
运算符用于等待Future
:
_getIPAddress() {
final url = 'https://httpbin.org/ip';
var request = await HttpRequest.request(url);
String ip = json.decode(request.responseText)['origin'];
print(ip);
}
关于函数的更多内容,可参考Dart官网关于async and await的介绍
网友评论