1. 注释
// 单行注释/* ... */ 注释块
2. 变量
Dart有2种变量var与finalfinal必需要初使化且只能赋值一次
3. 函数
Dart的函数格式:[返回类型] [函数名] 参数列表 函数体参数列表与函数体是必需的其余可省略
而 Dart的函数体有2种形式
=> 单一表达式
{ 各种表达式 }
由此以函数都是合法的
(a, b) => a + b;
() => 'yes';
(a, b) { return a + b; };
() { return 'yes'; };
add(a, b) => a+b;
int add2(a, b) { return a+b; };
print((a, b) { return a + b; }(3, 4)); // 输出 7
print(((a, b) => a + b)(3,4)); // 输出 7
final add = (a, b) => a + b;
但只能在函数体中使用,无法在类与全局中使用,否则会出 Error: line 1 pos 13: initializer must be a compile time constant 错误
合法
main()
{
final add = (a, b) => a + b; //合法
print(add(3,4));
}
class Foo
{
final add = (a, b) => a + b; // 不合法 1
}
final add = (a, b) => a + b; // 不合法 2,1与2两者实质是一样的
main ()
{
}
4. 闭包
Dart可谓是为专门闭包而生,由以上的函数定义,可以写一个闭包的小例子
foo()
{
var hello = 'hello';
return () {
return hello;
};
}
main()
{
print(foo()()); // 输出 hello
}
5. 类
Dart万物皆类,所以类是Dart中不可缺少的一部分类定义
class 类名称 { [各种成员与方法] }
[static] [返回类型] [get|set] 名称 参数列表
abstract [static] [返回类型] [get|set] 名称
class Foo
{
static add(a, b) => a + b;
sub(a, b)
{
return a - b;
}
get a()
{
return 'a';
}
}
main()
{
print(Foo.add(3, 4)); // 输出 7
print((new Foo()).sub(4, 3)); // 输出 1
print((new Foo()).a); // Getter a,输出 a
}
class 类名 extends 类名
调用父方法 super
Dart支持多个接口
interface, implements 与 factory
interface 名称 [factory 名称]
{
}
class 名称 [implements 以,分割的多个名称]
{
}
6. 数组与Hash
[ ] Array 例 [1, 2]{} Hash 例 {'a': 'b'}
7. 循环
for (名称 in 容器) {
}
for (定义; 条件; 执行) {
}
while (条件) {
}
do {
} while (条件);
main()
{
for (var i in [1, 2]) {
print(i);
}
for (var i=0; i<10; ++i) {
print(i);
}
var i =0;
while (i < 10) {
print(i);
++i;
}
i = 0;
do {
print(i);
++i;
} while (i < 10);
}
静观其变
==在试验中发现如下代码==
main()
{
var st = new Date.now();
var j = 0;
for (var i=1; i <= 100000; ++i)
{
j += i;
}
var ed = new Date.now();
print(j);
print(ed.difference(st));
}
5000050000 0:00:00.288
Dart评论
缺点与疑点1、class {} 后不能接分号
理论上;号作为分隔符存在class {};理应是合法的,class行为过于诡异。
2、Dart强制分号作分割
说不上好坏,但定位显得有问题,对于部份不习惯用;结尾的js使用者来说会有不适
3、怪异的私有变量声明,前置 _
根据Dart规范中描述前置 _ 变量名意为私有,_在C里是作为系统或内部命令存在,而在Dart中成了普遍,更奇怪的除了若要声明私有除了前置_别无选择。
4、展开的'字串行为
对于目前所有流行语言,皆为"#{嵌入的语句}"或"{$foo}"等,而单引号不展开,而Dart中单引号却会展开如 'hello $world'
5、不尽人意的性能
Dart的纯面向对象的设定出发点是支持的,我也希望能有好的表现,但现在来看此设定大大影响了语言的性能,而且实现上似乎有问题,在数值计算中连Ruby都比不过,Dart若用于Canvas,游戏运算等,定会面对大量的数值运算,如果未来性能仍然不佳,难免沦落成为一个鸡肋的存在。
优点
更加完整的OO支持,OO虽然不是必需的,但有比没有好,但担心复杂的特性或多或少会带来性能上的损失,不清楚Dart能优化到什么程度。
同样Dart的严格,使灵活性大大不如Javascript,失去灵活性代码量必然会上升,严格与灵活,各有所长,但在追求代码简练高产的脚本领域,Dart显得有些劣势。