编程语言虽然千差万别,但归根结底,它们的设计思想无非就是回答两个问题:javascript
一、如何表示信息;java
二、如何处理信息;编程
bool isZero(int number) => number == 0; void printInfo(int number, Function check) => print("$number is Zero: ${check(number)}");
bool isZero(int number) => number == 0; void printInfo(int number, Function check) => print("$number is Zero: ${check(number)}"); // 要达到可选命名参数的用法,那就在定义函数的时候给参数加上{} void enableFlagsA({bool bold, bool hidden}) => print("$bold, $hidden"); // 定义可选命名参数时增长默认值 void enableFlagesB({bool bold = true, bool hidden = false}) => print("$bold, $hidden"); // 可忽略的参数在函数定义时用[]符号指定 void enableFlagesC(bool bold, [bool hidden]) => print("$bold, $hidden"); // 定义可忽略参数时增长默认值 void enableFlagesD(bool bold, [bool hidden = false]) => print("$bold, $hidden");
Dart是面向对象的语言,每一个对象都是一个类的实例,都继承自顶层类型Object。 Dart中并无public、protected、private这些关键字,只要在声明变量与方法时,在前面加上_
便可做为private方法使用,若是不加_
,则默认为public。不过_
的限制范围并非类访问级别的,而是库访问级别。安全
class Point { num x, y; static num factor = 0; // 语法糖,等同于在函数体内:this.x = x; this.y = y; Point(this.x, this.y); void printInfo() => print('($x,$y)'); static void printZValue() => print('$factor'); }
此外,与C++相似,Dart支持初始化列表。在构造函数的函数体真正执行以前,还有机会给实例变量赋值,甚至重定向至另外一个构造函数。编程语言
class Point { num x, y, z; Point(this.x, this.y) : z = 0; // 初始化变量z Point.bottom(num x) : this(x, 0); // 重定向构造函数 void printInfo() => print('($x, $y, $z)'); } var p = Point.bottom(100); p.printInfo(); // 输出(100,0,0)
在面向对象的编程语言中,将其余类的变量与方法归入本类中进行复用的方式通常有两种:继承父类和接口实现。ide
class Point { num x = 0, y = 0; void printInfo() => print('($x, $y)'); } // Vector 继承自 Point class Vector extends Point { num z = 0; @override void printInfo() => print('($x,$y,$z)'); // 覆写了printInfo实现 } // Coordinate 是对 Point 的接口实现 class Coordinate implements Point { num x = 0, y = 0; // 成员变量须要从新声明 void printInfo() => print('($x, $y)'); // 成员函数须要从新声明实现 } var xxx = Vector(); xxx ..x = 1 ..y = 2 ..z = 3; // 级联运算符,等同于 xxx.x = 1; xxx.y = 2; xxx.z = 3; xxx.printInfo(); // 输出(1,2,3) var yyy = Coordinate(); yyy ..x = 1 ..y = 2; // 级联运算符,等同于 yyy.x = 1; yyy.y = 2; yyy.printInfo(); // 输出 (1,2) print(yyy is Point); // true print(yyy is Coordinate); // true
要使用混入,只须要with关键字便可。函数
class Coordinate with Point { } var yyy = Coordinate(); yyy ..x = 1 ..y = 2; // 级联运算符,等同于 yyy.x = 1; yyy.y = 2; yyy.printInfo(); // 输出 (1,2) print(yyy is Point); // true print(yyy is Coordinate); // true
Dart提供了相似C++的运算符覆写机制,使得咱们不只能够覆写方法,还能够覆写或者自定义运算符。ui
class Vector { num x, y; Vector(this.x, this.y); // 自定义相加运算符,实现向量相加 Vector operator + (Vector v) => Vector(x + v.x, y + v.y); // 覆写相等运算符,判断向量相等 bool operator == (dynamic v) => x == v.x && y == v.y; } final x = Vector(3,3); final y = Vector(2,2); final z = Vector(1,1); print(x==(y+z)); // 输出 true