Dynamic Static

Jaron的博客 - 关于代码及其他

Fork me on GitHub

Dartlang学习笔记:Dartlang的重要概念

因为最近工作比较忙,对Dart的学习也是断断续续,积累下来的东西不多,还是写点学习笔记吧。今天先来第一篇,记录一下Dartlang的一些重要概念(或者说区别于其他编程语言的一些特性,这里主要使用Java与JavaScript来作些对比)。

Dart能在前端/后端运行

Dart代码是通过dart2js编译成JavaScript在浏览器上运行的,它的标准库包含专门处理HTML的dart:hmtl库,在应用层也有Polymer.dart、AngularDart这样的web框架(Angular2也将支持Dart),通过它们,你可以方便的编写web应用。另一方面,通过DartVM,Dart也能运行在服务端,虽然这样使用的人可能不多,但凭借易用的标准库以及逐渐丰富的第三方库,用Dart来开发中小型命令行应用还是绰绰有余的。

“真正的面向对象”

在谈到面向对象的编程语言时,Java经常被人提起,但其实Java并非“真正的面向对象”,因为它的基本数据类型都不是对象。而在Dart中,“一切皆对象”。Dart的类都继承自Object类,所有的变量都指向一个对象,数字、函数甚至null本身也是一个对象,所有未被初始化的变量也都被赋予null,可以说Dart才是一门“真正面向对象”的编程语言。示例如下:

类型是可选的

Dart的类型,似乎是Java跟JavaScript类型系统的结合。你不想使用类型时,可以用var声明变量,这样你就可以像写JavaScript一样自由的书写代码。反过来,你也可以像Java一样,为每个变量都指定类型,这就使得编辑器能对代码进行静态检查,如果你把数字赋给了一个String类型的变量,编辑器就会有警告信息提示你。示例如下:

函数是一等公民

跟JavaScript类似,Dart的函数是对象,你可以定义顶层函数,或是把函数存放到变量里面,又或是通过函数嵌套来实现闭包。示例如下:

库与可见性

Dart的库(library)初看可能有点像Java的包(package),但其实它们非常不同。Dart的library是一个或多个dart文件,一个dart文件内可以包含多个变量、函数与类。而Java的包是一个文件夹,其中包含多个java文件,一个java文件只能包含一个public类。在可见性方面,Dart不像Java那样拥有public、private等访问控制符,它的设计非常简洁:以library为单位,所有变量、函数、类等对外默认都是可见的,只有在它们的标志符以下划线开头的情况下,它们才变为私有的,对外不可见。

运行模式

Dart运行时(runtime)有两种运行模式:production与checked。Production是默认模式,它对运行速度进行了优化,但是也关闭了类型检查以及断言(assert)。Checked模式则相反,它打开了断言与类型检查,但运行速度就比不过production。具体来说,如果你把数字赋给了一个String类型的变量,在checked模式下运行会抛出异常,但是在production模式下则不会。所以,开发时建议使用checked模式,在生产环境下才使用production模式。

以上。

评论