Dart语言简介:如何迅速掌握入门技巧?

发表时间: 2019-03-22 13:56


一、Dart语言介绍

Dart语言是由谷歌公司开发的网络编程语言,于2011年10月10日发布。有了Dart,你可用的网页脚本将不只是Java专属.在使用Chromium的浏览器中,你可以直接运行Dart程序,而且有可靠的虚拟机帮助你提升程序性能和安全性.

即使你的浏览器不支持Dart语言,Dart也可以被转换为Java代码,也不必再担心兼容上的问题.

同时,Dart还可以用来编写桌面应用程序,这很像Java的Node.js。


二、Dart语言入门

Flutter使用dart语言来进行开发,dart官方也提供了在线编译器来学习dart语言语法

2.1 程序入口 main函数

// 这是dart程序执行的入口。

main() {

var number = 42; // 定义并初始化一个变量。

printNumber(number); // 调用一个方法。

}

在dart应用里,main函数表示程序的执行入口,执行一个dart应用,就会调用文件的main函数进行启动。

2.2 变量

main() {

var a = 'a';

int b = 10;

String s = "hello";

}

你可以明确指定某个变量的类型,如int bool String,也可以用var或 dynamic来声明一个变量,Dart会自动推断其数据类型。

Dart有如下几种内建的数据类型:

1、numbers 数字

2、strings 字符串

3、booleans 布尔

4、lists(或者是arrays) 数组

5、Maps

6、runes(UTF-32字符集的字符)

7、Symbols

下面用代码说明:

main() {

// numbers

var a = 0;

int b = 1; //整数

double c = 0.1; //浮点数

// strings

var s1 = 'hello';

String s2 = "world";

// booleans

var real = true;

bool isReal = false;

// lists

var arr = [1, 2, 3, 4, 5];

List<String> arr2 = ['hello', 'world', "123", "456"]; //String的数组

List<dynamic> arr3 = [1, true, 'haha', 1.0]; //自动推断数据类型

// maps

var map = new Map();

map['name'] = 'zhangsan';

map['age'] = 10;

Map m = new Map();

m['a'] = 'a';

//runes,Dart 中 使用runes 来获取UTF-32字符集的字符。String的 codeUnitAt and codeUnit属性可以获取UTF-16字符集的字符

var clapping = '\u{1f44f}';

print(clapping); // 打印的是拍手emoji的表情

// symbols

print(#s == new Symbol("s")); // true

}

注意:没有赋初值的变量都会有默认为null

2.3 函数

Dart 的函数支持函数声明、函数字面量、箭头函数、函数表达式、匿名函数。

int add(int a, int b) {

return a + b;

}

// 类型可省略

add(a, b) {

return a + b;

}

// 箭头函数

var add = (a, b) => a + b;

int add(int a, int b) => a + b;

// 可选参数,使用 [] 限定

int add(int a, int b, [int c = 1, int d = 2]) => a + b + c + d;

// 显示指定参数名称,默认参数

int add({ int a = 1, int b = 2 }) {

return a + b;

}

add(a: 1, b: 2);

2.3 操作符

操作符包括了:expr++、expr--、()、[]、.、?、等,基本和 ES6 一致,除了没有 === 的判断。

例外有三个特色的操作:is、as、is?。

// is运算符用于判断一个变量是不是某个类型的数据

// is!则是判断变量不是某个类型的数据

var s = "hello";

print(s is String); // true

var num = 6;

print(num is! String); // true

// ~/才是取整运算符,如果使用/则是除法运算,不取整

int k = 1;

int j = 2;

print(k / j); // 0.5

print(k ~/ j); // 0

// as运算符类似于Java中的cast操作,将一个对象强制类型转换

(emp as Person).teach();

// ??=运算符 如果 ??= 运算符前面的变量为null,则赋值,否则不赋值

var param1 = "hello", param2 = null;

param1 ??= "world";

param2 ??= "world";

print("param1 = $param1"); // param1 = hello

print("param2 = $param2"); // param2 = world

// ?.运算符

var str1 = "hello world";

var str2 = null;

print(str1?.length); // 11

print(str2?.length); // null

print(str2.length); // 报错

2.4 控制流程

Dart 的控制流程支持:if、 if-else、 for、 while、 do-while、 switch、try-catch-finally

if (isRaining()) {

// ...

} else if (isSnowing()) {

// ...

} else {

// ...

}

var message = new StringBuffer('Dart is fun');

for (var i = 0; i < 5; i++) {

message.write('!');

}

var collection = [0, 1, 2];

for (var x in collection) {

print(x); // 0 1 2

}

2.5 类(Class)

类的定义与构造方法

Dart中的类没有访问控制,所以你不需要用private, protected, public等修饰成员变量或成员函数,一个简单的类如下代码所示:

class Person {

String name;

int age;

String gender;

Person(this.name, this.age, this.gender);

sayHello() {

print("hello, this is $name, I am $age years old, I am a $gender");

}

}

上面的Person类中有3个成员变量,一个构造方法和一个成员方法,看起来比较奇怪的是Person的构造方法,里面传入的3个参数都是this.xxx,而且没有大括号{}包裹的方法体,这种语法是Dart比较独特而简洁的构造方法声明方式,它等同于下面的代码:

Person(String name, int age, String gender) {

this.name = name;

this.age = age;

this.gender = gender;

}

要调用Person类的成员变量或成员方法,可以用下面的代码:

var p = new Person("zhangsan", 20, "male");

p.sayHello();

p.age = 50;

p.gender = "female";

p.sayHello();

Dart 中的实现接口类

class Impostor implements Person {

get _name => '';

String greet(String who) => 'Hi $who. Do you know who I am?';

}

2.6 模块

Dart 的模块导入。

// 全部导入,并且是全局变量

import 'dart:math';

max(1, 2);

// 别名

import 'dart:math' as math;

math.max(1, 2);

// 只导入部分

import 'dart:math' show min;

min(1, 2);

// 懒加载,类似 ES6 的 import()

import 'dart:math' deferred as math;

Future greet() async {

await math.max(1, 2);

}

2.7 异步

在 ES6 与异步相关的就是 Promise、async、await。而在 Dart 则是 Future、async、await。

使用 async/await 之前需要引入 dart:async 模块。

import 'dart:async';

Future<String> lookUpVersion() async => '1.0.0';

Future main() async {

await for (var request in requestServer) {

handleRequest(request);

}

}

2.8 正则表达式

正则使用的是 RegExp 对象。

RegExp exp = new RegExp(r"(\w+)");

// 返回正则表达式匹配项的可迭代对象

exp.allMatches("abc def ghi");

// 搜索并返回第一个匹配项,没有则返回null

exp.firstMatch("");

// 正则表达式是否找到匹配项

exp.hasMatch("as");

// 从第几个字符开始匹配正则表达式

exp.matchAsPrefix("ab cd", 3);

// 返回正则表达式的第一个匹配字符串

exp.stringMatch("abc de");

// 返回正则表达式的字符串表示

exp.toString();

作者:源码时代本文版权归源码时代所有,转载请注明出处,如果您觉得有用欢迎点赞留言,更多开发技术学习资料查看源码时代主页。