Dart语言学习
Dart语言学习
1.Hello Word
void main() {
print('hello world!');
}
2.变量和常量
2.1 定义变量
通过var
关键字定义变量:
var v ;
2.2 变量初始值
所有未初始化的变量的值都为null
,dart中所有能够使用变量引用的都是对象!
2.3 可选类型
在定义变量的时候可以指定其具体类型:
num类:
- int:整数值,其取值通常位于 -253 和 253 之间。
int i = 0;
- double: (双精度) 浮点数,符合 IEEE 754 标准。
double d = 1.0;
String类:
String:可以用单引号/双引号/三引号(代格式)定义创建字符串文本
String s = '单引号文本';
String s1 = "双引号文本";
String s = '''a
b
c
d''';
#### 2.3.1 在字符串中引用变量值
```js
String s = '12';
String s = 'abc${s}'; // abc12
布尔值:
bool:true/false
列表:
集合:
var list = [1, 'a', true];
Map:
var gifts = {
2 : 'a',
"ab" : 12
};
print(gifts[2]);
print(gifts['ab']);
常量
常量可以通过或者const
和final
来定义!
const c1 = '1';
final a = '2';
3.方法
3.1 定义和调用方法
void main() {
add();
}
add() {
print("hello world");
}
3.2 如果方法中只有一条语句可以省略
所有方法都有返回值,如果没有显示指定,默认返回null.
void main() => add();
add() => print("hello world");
3.3 方法返回值
void main() {
var r = add();
print(r);
}
add () {
return 1 + 2;
}
3.4 定义方法返回值类型
void main() {
var r = add();
print(r);
}
int add () {
return 1 + 2;
}
3.5 方法参数
main() {
var r = add(1, 3);
print(r);
}
add(a, b) => a + b;
3.6 方法参数指定类型
main() {
var r = add(1, 3.2);
print(r);
}
add(double a, double b) => a + b;
3.7 命名参数
通过{}
指定参数命名,如{double a, double b}
,在传入参数的时候就可以指定a
和b
的值,该类型参数只能存在于函数参数列表最后!
main() {
var r = add(2, b: 1, a: 3.2);
print(r);
}
add(c, {double a, double b}) => c +a + b;
3.8 可选位置参数
[]
定义可选参数,该参数可以不传参数.
main() {
fun(1);
fun(2, '3');
}
fun(c, [String s]) {
if (s == null) {
print(c);
} else {
print(s);
}
}
3.9 参数默认值
main() {
fun(c: 1);
}
fun({c = 0, a = 'a'}) {
// ....
}
3.10 方法作为参数传递
main() {
fun1(fun2);
}
fun1(a) {
a();
}
fun2() {
print('object');
}
3.11 匿名方法
main() {
var list = [1, 3, 5, 6];
list.forEach((f) => print(f)) ;
}
4.类
4.1 定义一个并实例化
main() {
var p = new Point();
p.x = 1;
p.y = 2;
print(p);
}
class Point {
num x;
num y;
@override
String toString() {
return 'x:${x}, y:${y}';
}
}
4.2 避免null调用报错
定义一个变量p1,p1并没有被初始化,所以为null,如果直接用p1.y肯定要报错,这时就可以用p1?.y来调用!
var p1;
p1?.y=4;
4.3 构造函数
main() {
var p = new Point(1, 2);
print(p);
}
class Point {
num x;
num y;
// 构造函数
Point(this.x, this.y) ;
@override
String toString() {
return 'x:${x}, y:${y}';
}
}
4.4 命名构造函数
main() {
var p = new Point.named1(1, 2);
print(p);
}
class Point {
num x;
num y;
// 构造函数
Point(this.x, this.y) ;
// 命名构造函数
Point.named1(x, y) {
this.x = x +1;
this.y = y - 1;
}
@override
String toString() {
return 'x:${x}, y:${y}';
}
}
4.5调用父类构造方法
main() {
var p = new Point1();
print(p);
}
class Point {
num x;
num y;
// 构造函数
Point(this.x, this.y) ;
// 命名构造函数
Point.named1(x, y) {
this.x = x +1;
this.y = y - 1;
}
@override
String toString() {
return 'x:${x}, y:${y}';
}
}
class Point1 extends Point {
Point1() :super(1, 2) ;
Point1.name(x, y) : super.named1(x, y);
}
4.6 构造函数中调用其他构造函数
main() {
var p = new Point1();
print(p);
}
class Point {
num x;
num y;
// 构造函数
Point(this.x, this.y) ;
// 命名构造函数
Point.named1(x, y) {
this.x = x +1;
this.y = y - 1;
}
@override
String toString() {
return 'x:${x}, y:${y}';
}
}
class Point1 extends Point {
Point1() :super(1, 2) ;
Point1.name(x, y) : super.named1(x, y);
// 调用其他构造函数
Point1.name2(x, y) : this();
}