028-86261949

当前位置:首页 > 技术交流 > Dart语言入门

Dart语言入门

2019/03/20 10:26 分类: 技术交流 浏览:15

今天我们跟着老师一起来看看Dart语言

 

一、Dart语言介绍

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

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

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

二、Dart语言入门

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

https://dartpad.dartlang.org/

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();

#标签:Dart语言,Dart语言入门