Dart 语言简易教程(一)

在 InteIIiJ IDEA 中搭建 Dart 的开发环境: http://www.jianshu.com/p/fa275a08b083

Dart 语言简易教程(一)

一个简单的dart 程序

// Define a function.
printNumber(num aNumber) {
  print('The number is $aNumber.'); // Print to console.
}

// This is where the app starts executing.
main() {
  var number = 42; // Declare and initialize a variable.
  printNumber(number); // Call a function.
}

从这个程序里面我们可以看到如下的东西:

  • 使用//来注释。同时/* ...*/也可以用来注释。
  • num 是一个数据类型,定义在语言中。同样的类型还有Stringintbool
    就是说Dart语言是有数据类型的概念的。这点与Python语言不同。
  • print() 是显示输出的方法。
  • '...'(或者"..."),表示是有个 string 类型的数据。
    这一点与 Python 中string 类型数据一样的使用方法。
  • var 定义了一个变量,但是没有指定特定的数据类型。
    这种用法是很灵活的,既可以像Java类似的语言采取强数据类型,也可以像Python那样在第一次赋值的时候确认数据类型。

按照Dart 的编程规范,使用2个空格来缩进。
这一点与Python 语言建议的4个空格不一样。

一些重要的概念

  • 所有的东西都是对象,无论是变量,数字,函数等。
    所以的对象都是类的实例。
    所有的对应都继承自内置的Object类。

  • 程序中指定数据类型是为了指出自己的使用意图,并帮助语言进行语法检查。但是,指定类型不是必须的。
    Dart 语言是弱数据类型。

  • Dart 代码在运行前解析。
    指定数据类型和编译时的常量,可以提高运行速度。

  • Dart 程序有统一的程序入口: main()
    这一点是C / C++语言相像。

  • Dart 支持顶级的变量定义。

  • Dart 没有publicprotectedand private的概念。
    但是如果变量或函数以下划线(_)开始,则该函数或变量属于这个包私有(private)的方法。

  • Dart 中变量或函数以下划线(_)或字母开始,后面接上任意组合的下划线(_),数字或字母。
    这点与大部分的编程语言是一样的。

  • 严格区分expressionstatement

  • Dart 的工具可以检查出警告信息(warning)和错误(errors)。
    警告信息只是表明代码可能不工作,但是不会妨碍程序运行。
    错误可以是编译时的错误,也可能是运行时的错误。编译的错误将阻止程序运行,运行时的错误将会以exception的方式呈现。

  • Dart 使用 ; 来分割语句
    这点类似Java / C++, 但是与Python语言不同。

关键字

Dart 语言提供的关键字如下表所示:

1 2 3 4 5
abstract continue false new this
as default final null throw
assert deferred finally operator true
async do for part try
async dynamic get rethrow typedef
await else if return var
break enum implements set void
case export import static while
catch external in super with
class extends is switch yield
const factory library sync yield

变量(Variable

变量赋值的例子

// The variable called name contains a reference to a String object with a value of “Bob”.
var name = 'Bob';

默认值

没有初始化的变量都会被赋予默认值 null.
即使是数字也是如此, 因为在Dart 中数字也是一个对象。

int lineCount;
assert(lineCount == null);
// Variables (even if they will be numbers) are initially null.
```language

Note: The assert() call is ignored in production mode. In checked mode, assert(condition) throws an exception unless condition is true.

可选类型

也可以在定义的时候指定变量的类型。

String name = 'Bob';

指定数据类型可以更好的辨明自己的使用意图,编译器和IDE 工具可以根据这些类型信息来做检查,更早的发现问题。
如前文所说,通过指定类型,也可以减少编译和运行时间。

常量和固定值

  1. 如果定义的变量不会变化,可以使用finalconst来指明。
    也可以使用finalconst来代替类型声明。

    • final的值只能被设定一次。
    • const 是一个编译时的常量。( Const variables are implicitly final.)
    final name = 'Bob'; // Or: final String name = 'Bob';
    // name = 'Alice';  // Uncommenting this causes an error
    
  2. 通过对const类型做四则运算将自动得到一个const类型的值。

const bar = 1000000;       // Unit of pressure (dynes/cm2)
const atm = 1.01325 * bar; // Standard atmosphere
```language
  1. 可以通过const来创建常量的值
    就是说const[] 本身是构造函数。
// Note: [] creates an empty list.
// const [] creates an empty, immutable list (EIA).
var foo = const [];   // foo is currently an EIA.
final bar = const []; // bar will always be an EIA.
const baz = const []; // baz is a compile-time constant EIA.
// You can change the value of a non-final, non-const variable,
// even if it used to have a const value.
foo = [];
// You can't change the value of a final or const variable.
// bar = []; // Unhandled exception.
// baz = []; // Unhandled exception.

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 70,585评论 12 116
  • 注:这是第三遍读《C语言深度解剖》,想想好像自从大学开始就没读完过几本书,其中谭浩强的那本《C语言程序设计(第四版...
    HavenXie阅读 348评论 0 3
  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 2,556评论 2 32
  • Dart 语言简易教程(一): http://www.jianshu.com/p/8a62b1a2fd75Dart...
    You的日常阅读 11,625评论 4 7
  • 前言 把《C++ Primer》读薄系列笔记全集。 目录 第I部分:C++基础 开始学习C++ 变量和基本类型 字...
    尤汐_Jennica阅读 3,323评论 1 36