Flutter之Dart语言

目录

 

Dart是啥?

安装SDK

基础介绍

变量

Final and const

基本数据类型

numbers 支持两种int,double,int double都是num的子类。

Strings 

Booleans(布尔值)

Lists(列表)

Maps

Runes

Symbols

Functions

Optional parameters(可选参数)

Optional named parameters(可选命名参数)

Optional positional parameters(可选位置参数)

Default parameter values(默认参数值)

Anonymous functions(匿名方法)

Operators(操作符)

Cascade notation (..)(级联操作符)

Control flow statements(流程控制语句)

Exceptions(异常)

 


Dart是啥?

官网地址:https://www.dartlang.org/,这么介绍的,是用来可以编写高质量的Android,iOS以及Web应用程序的语言。

有哪些特点呢?

  • 语法简洁,工具简单但强大,尽早的发现错误,核心库已经很成熟了。
  • 快,提供AOT编译,以便在移动平台和web更快的启动。
  • JIT编译,开发效率高,热重载。
  • 可移植,跨平台姓,Android,iOS,Web。
  • 上手简单,如果熟悉了c++,java,c#,都是面向对象,易学。
  • 支持响应式编程,更快的内存分配和垃圾收集,支持异步编程。

安装SDK

$ brew tap dart-lang/dart
$ brew install dart

前提是已经安装homebrew,没有安装的可以复制下面这段命令:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

IDE的选择:vim,emacs.atom,vscode等。

如果是想快速熟悉语法可以使用dartpad https://dartpad.dartlang.org/,在线IDE。

基础介绍

一段代码:

// 定义个方法。
printNumber(num aNumber) {
  print('The number is $aNumber.'); // 在控制台打印内容。
}

// 这是程序执行的入口。
main() {
  var number = 42; // 定义并初始化一个变量。
  printNumber(number); // 调用一个方法。
}

提示:使用两个空格来缩进代码。

一些重要的概念:

  • 所有能够使用变量引用的都是对象, 每个对象都是一个的实例。在 Dart 中 甚至连 数字、方法和 null 都是对象。所有的对象都继承于 Object 类。
  • 和 Java 不同的是,Dart 没有 public、 protected、 和 private 关键字。如果一个标识符以 (_) 开头,则该标识符 在库内是私有的。
  • 标识符可以以字母或者 _ 下划线开头,后面可以是 其他字符和数字的组合。
  • Dart 在运行之前会先解析你的代码。你可以通过使用 类型或者编译时常量来帮助 Dart 去捕获异常以及 让代码运行的更高效。

变量

var name = 'Bob';

  变量是一个引用。上面名字为 name 的变量引用了 一个内容为 “Bob” 的 String 对象。

  Default value(默认值) 没有初始化的变量自动获取一个默认值为 null。类型为数字的 变量如何没有初始化其值也是 null,不 要忘记了 数字类型也是对象。

 可选类型

String name = 'Bob';

添加类型可以更加清晰的表达你的意图。 IDE 编译器等工具有可以使用类型来更好的帮助你, 可以提供代码补全、提前发现 bug 等功能。

Final and const

如果你以后不打算修改一个变量,使用 final 或者 const。 一个 final 变量只能赋值一次;一个 const 变量是编译时常量。 (Const 变量同时也是 final 变量。) 顶级的 final 变量或者类中的 final 变量在 第一次使用的时候初始化。

final name = 'Bob'; // Or: final String name = 'Bob';
// name = 'Alice';  // Uncommenting this causes an error

const 变量为编译时常量。 如果 const 变量在类中,请定义为 static const。 可以直接定义 const 和其值,也 可以定义一个 const 变量使用其他 const 变量的值来初始化其值。

const bar = 1000000;       // Unit of pressure (dynes/cm2)
const atm = 1.01325 * bar; // Standard atmosphere

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.

基本数据类型

Dart 内置支持下面这些类型:

  • numbers
  • strings
  • booleans
  • lists (也被称之为 arrays)
  • maps
  • runes (用于在字符串中表示 Unicode 字符)
  • symbols

numbers 支持两种int,double,int double都是num的子类。

var x = 1;
var hex = 0xDEADBEEF;
var bigInt = 34653465834652437659238476592374958739845729;

var y = 1.1;
var exponents = 1.42e5;

Strings 

Dart 字符串是 UTF-16 编码的字符序列。 可以使用单引号或者双引号来创建字符串:

var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
var s3 = 'It\'s easy to escape the string delimiter.';
var s4 = "It's even easier to use the other delimiter.";

Booleans(布尔值)

为了代表布尔值,Dart 有一个名字为 bool 的类型。 只有两个对象是布尔类型的:true 和 false 所创建的对象, 这两个对象也都是编译时常量。

var name = 'Bob';
if (name) {
  // Prints in JavaScript, not in Dart.
  print('You have a name!');
}

Lists(列表)

也许 array (或者有序集合)是所有编程语言中最常见的集合类型。 在 Dart 中数组就是 List 对象。所以 通常我们都称之为 lists

var list = [1, 2, 3];

Maps

通常来说,Map 是一个键值对相关的对象。 键和值可以是任何类型的对象。每个  只出现一次, 而一个值则可以出现多次。Dart 通过 map 字面量 和 Map 类型支持 map。

var gifts = {
// Keys      Values
  'first' : 'partridge',
  'second': 'turtledoves',
  'fifth' : 'golden rings'
};

var nobleGases = {
// Keys  Values
  2 :   'helium',
  10:   'neon',
  18:   'argon',
};

Runes

在 Dart 中,runes 代表字符串的 UTF-32 code points。

Unicode 为每一个字符、标点符号、表情符号等都定义了 一个唯一的数值。 由于 Dart 字符串是 UTF-16 code units 字符序列, 所以在字符串中表达 32-bit Unicode 值就需要 新的语法了。

Symbols

一个 Symbol object 代表 Dart 程序中声明的操作符或者标识符。 你也许从来不会用到 Symbol,但是该功能对于通过名字来引用标识符的情况 是非常有价值的,特别是混淆后的代码, 标识符的名字被混淆了,但是 Symbol 的名字不会改变。

Functions

Dart 是一个真正的面向对象语言,方法也是对象并且具有一种 类型, Function。 这意味着,方法可以赋值给变量,也可以当做其他方法的参数。 也可以把 Dart 类的实例当做方法来调用。

bool isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

Optional parameters(可选参数)

可选参数可以是命名参数或者基于位置的参数,但是这两种参数不能同时当做可选参数。

Optional named parameters(可选命名参数)

调用方法的时候,你可以使用这种形式 paramNamevalue 来指定命名参数。

enableFlags(bold: true, hidden: false);

在定义方法的时候,使用 {param1param2, …} 的形式来指定命名参数

/// Sets the [bold] and [hidden] flags to the values
/// you specify.
enableFlags({bool bold, bool hidden}) {
  // ...
}

Optional positional parameters(可选位置参数)

把一些方法的参数放到 [] 中就变成可选 位置参数了:

String say(String from, String msg, [String device]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  return result;
}

Default parameter values(默认参数值)

在定义方法的时候,可以使用 = 来定义可选参数的默认值。 默认值只能是编译时常量。 如果没有提供默认值,则默认值为 null

/// Sets the [bold] and [hidden] flags to the values you
/// specify, defaulting to false.
void enableFlags({bool bold = false, bool hidden = false}) {
  // ...
}

// bold will be true; hidden will be false.
enableFlags(bold: true);

Anonymous functions(匿名方法)

大部分方法都带有名字,例如 main() 或者 printElement()。 你有可以创建没有名字的方法,称之为 匿名方法,有时候也被称为 lambda 或者 closure 闭包。 你可以把匿名方法赋值给一个变量, 然后你可以使用这个方法,比如添加到集合或者从集合中删除。

匿名函数和命名函数看起来类似— 在括号之间可以定义一些参数,参数使用逗号 分割,也可以是可选参数。 后面大括号中的代码为函数体:

([[Typeparam1[, …]]) { 
  codeBlock
}; 

var list = ['apples', 'oranges', 'grapes', 'bananas', 'plums'];
list.forEach((i) {
  print(list.indexOf(i).toString() + ': ' + i);
});

Operators(操作符)

Dart 支持常用的算术操作符,如下:

操作符解释
+加号
减号
-expr负号
*乘号
/除号
~/除号,但是返回值为整数
%取模

 

Dart 还支持递增、递减前缀 和后缀操作:

OperatorMeaning
++varvar = var + 1 (expression value is var + 1)
var++var = var + 1 (expression value is var)
--varvar = var – 1 (expression value is var – 1)
var--var = var – 1 (expression value is var)

Cascade notation (..)(级联操作符)

级联操作符 (..) 可以在同一个对象上 连续调用多个函数以及访问成员变量。 使用级联操作符可以避免创建 临时变量, 并且写出来的代码看起来 更加流畅:

例如下面的代码:

querySelector('#button') // Get an object.
  ..text = 'Confirm'   // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

Control flow statements(流程控制语句)

可以使用下面的语句来控制 Dart 代码的流程:

  • if and else

  • for loops

  • while and do-while loops

  • break and continue

  • switch and case

  • assert

使用 try-catch 和 throw 还能影响控制流程的 跳转

Exceptions(异常)

代码中可以出现异常和捕获异常。异常表示一些 未知的错误情况。如果异常没有捕获, 则异常会抛出,导致 抛出异常的代码终止执行。

和 Java 不同的是,所有的 Dart 异常是非检查异常。 方法不一定声明了他们所抛出的异常, 并且你不要求捕获任何异常。

Dart 提供了 Exception 和 Error 类型, 以及一些子类型。你还 可以定义自己的异常类型。但是, Dart 代码可以 抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者 Error 的对象。

 

 

参考文档:

http://dart.goodev.org/guides/language/language-tour#built-in-types%E5%86%85%E7%BD%AE%E7%9A%84%E7%B1%BB%E5%9E%8B

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值