快速学习Dart语言

Posted MobileDev小园地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速学习Dart语言相关的知识,希望对你有一定的参考价值。


2018年2月27日,在2018世界移动大会上,Google发布了Flutter的第一个Beta版本。2018年12月5日,Google官方宣布Flutter 的 1.0 版本正式发布!

Flutter是Google打造的UI工具包,帮助你通过一套代码同时在iosandroid上构建媲美原生体验的应用。

简单来说它与RN、Weex等众多混合开发平台框架一样,都是一套代码实现多平台发布的跨平台框架。


Flutter是用Dart语言编写的,早期的Flutter团队评估了10多种语言,最终选择了 Dart,基于以下原因:

  • Dart是AOT(Ahead of Time)编译的,可以直接将 Dart 源码编译出 .S 文件,然后通过汇编器生成对应架构的代码,保证了运行速度。

  • Dart也可以是JIT(Just in Time)编译,开发周期快。

  • Dart可以更轻松地创建以60fps运行的流畅动画和转场。

  • Dart使Flutter不需要单独的声明式布局语言,如JSX或XML,或单独的可视化界面构建器,因为Dart的声明式编程布局易于阅读和可视化。

  • Dart语言非常容易学习,无论是Java程序员还是javascript程序员,都可以在很短的时间快速入手。Dart语言虽然是强类型的,但是它结合了很多动态语言的特性,使得无论编写代码还是执行程序都非常方便。


虽然这些特性并非Dart语言特有,但是Dart语言却将它们组合的恰到好处,使Dart在实现Flutter方面独一无二。因此,没有Dart,很难想象Flutter像现在这样强大。


同时Dart也是Google下一代操作系统Fuchsia的官方前端编程语言。


Dart开发环境搭建



一、使用DartPad

DartPad(https://dartpad.dartlang.org)是一个可以直接在浏览器里编写和运行Dart程序的开源工具,它看起来如下图(注意,在国内访问的话,请使用https://dartpad.cn):

快速学习Dart语言


DartPad支持web应用运行所需要的所有dart:*库,但是它不支持dart:io和和一些第三方的库。如果要支持dart:io,可以使用dart的SDK。


二、使用Dart SDK

Dart SDK包含很多Dart库,还有一个可以运行Dart程序的命令行工具。在MacOS下可以通过brew来安装Dart SDK

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


在Windows和Linux下请参考https://www.dartlang.org/tools/sdk


安装完成后,在命令行下可以使用dart命令来运行(如果需要,请添加环境变量),例如把上图dartpad中的代码存储为example.dart。在存放代码的路径下用命令行运行这个程序,会看到程序的正确输出:

$dart example.dart
hello 1
hello 2
hello 3
hello 4
hello 5


三、使用IDE

在AndroidStudio、IntelliJ IDEA和Visual Studio Code中,安装Dart插件即可编写Dart程序。下面是在Visual Studio Code的效果:


Dart语言学习



先来看一个Dart程序:

class Person {
  String firstName;
  String lastName;

  Person(this.firstName, this.lastName);

  void introduce() {
    print('I am $firstName $lastName');
  }
}

class Employee extends Person {
  String title;

  Employee(String firstName, String lastName, String title)
    : super(firstName, lastName) {
    this.title = title;
  }

  @override
  void introduce() {
    super.introduce();
    print('I am a $title');
  }
}

void main() {
  var employee = Employee('Bob''Smith''Manager');
  employee.introduce();
  // result is
  // I am Bob Smith
  // I am a Manager
}


是不是似曾相似?


首先Dart是一种强类型的语言,但是Dart有类型推断能力,所以在声明变量时可以不用指定类型:

var num = 5.3;


Dart有numbers, strings, booleans, lists, maps, runes, symbols等内置类型,它们也都是对象。


Dart是一种真正的面向对象编程语言,在Dart里万事万物皆对象,即使函数也是对象,甚至是第一等的对象,函数可以被赋值给一个变量,也可以作为参数传递给另一个函数(这一点是不是和JavaScript很像?)


Dart的类继承非常方便(这一点是JavaScript被诟病的很重要原因),甚至可以混合继承另一个类。Dart同时支持抽象类和接口实现(类似Java)。


Dart支持方法的覆写(override)和运算符(如==)的覆写。


Dart支持泛型,不仅在类中支持,在独立的方法中也可以支持泛型。Dart的泛型和Java非常相似,不同的是Dart的泛型在运行时是类型携带的,而Java的泛型在运行时是类型擦除的。例如一个List<String>的对象你可以在Dart中识别它的类型为List<String>,在Java中程序运行时它只能被识别为List。


Dart支持异步编程,Future和Stream两个类是异步编程的两个最重要的类。使用关键字async和await可以把异步程序写的像同步程序一样简洁。


Dart同时支持同步和异步的生成器,主要使用yield实现(和其他编程语言非常相似)。


多线程的应用程序可以共享内存以充分利用多核CPU,但Dart不同,它的所有代码都运行在独立的隔离带中(isolate)。


Dart支持单行、多行以及文档注释。




主要介绍重要概念、关键字、变量和内建类型



主要介绍函数、运算符、控制语句和异常



主要介绍类和泛型



主要介绍库、异步编程、生成器、可调用类、isolate、注释等


Dart语言依赖库。Dart不仅定义了核心内置库,也可以扩展支持第三方库。Dart的很多特性都是定义在它的内置库中,下面文章主要介绍了Dart的内置库。



随着Flutter的应用越来越广泛,相信会推动Dart这门语言的发展,实际上Dart已经推出很多年了,Google最初是想用Dart来替代JavaScript,由于各方面的原因,这一目的并未达到,现在Google也转换了思路,主要使用它来进行跨平台的开发以及将来Fuchsia系统上前端应用的开发。目前Dart的应用场景如下:

  • 跨平台应用开发,Flutter

  • Web开发,目前它可以运行在大多数现代浏览器上,Dart语言会使用dart2js将dart程序转换为js程序。

  • 命令行应用以及Server端的开发。


就Dart本身的语言特性和目前Flutter的发展而言,它非常值得学习,而且也非常容易学习。




 

以上是关于快速学习Dart语言的主要内容,如果未能解决你的问题,请参考以下文章

Dart入门语言特性库异步编程

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务

Dart学习笔记:搭建Dart开发环境

Dart语言学习笔记

Flutter学习笔记·初识Dart语言

Dart语言基础