什麼是Dart語言?如何快速掌握Dart語言入門?

2021-01-04 源碼時代

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

作者:源碼時代

本文版權歸源碼時代所有,轉載請註明出處,如果您覺得有用歡迎點讚留言,更多開發技術學習資料查看源碼時代主頁。

相關焦點

  • Dart語言編程基礎
    dart 是一個谷歌開發的程式語言,它的用法和js差不多。聲明變量使用var s = 「1」;或者string s =「1」;都可以。所有的代碼要運行在main{}函數裡。dart 的數據類型:numbers:int,doublestrings:stringbooleans:boollistmap不會使用到的數據類型rune和 symbol定義字符串的時候 如果跨行需要使用「」「 XX」「」這種格式,否則會報錯。
  • Dart 發布 Beta 版本,結構化程式語言
    Dart是一種基於類的可選類型化程式語言,設計用於創建Web應用程式。
  • 谷歌、阿里都在使用的dart程式語言,你學過沒?
    一位網友發出疑問:dart沒人關注嗎?感覺它用起來比js還要優秀啊。對於這門由谷歌開發,誕生於2011年的前端程式語言,你又了解多少呢?為了滿足各位同學對高品質IT視頻教程的渴求,今天就為大家帶來了一套《好程式設計師2020年Dart Flutter開發教程》。本教程共分為含有48個小節,時長在500分鐘左右,教大家從0到1全面學習Dart。還是老規矩,視頻源碼筆記想學習的小夥伴可在文末領取!
  • 3-Flutter應用開發語言Dart語法介紹
    開發Flutter應用前,先要掌握Dart語法,對於Dart個人覺得有Java或JavaScript,Php等基礎,可以快速上手。但完全沒基礎的也能弄懂它,一步一腳印慢慢學。Dart是一門免費開源面向對象的語言(源碼地址https://github.com/dart-lang)。Dart有這些特點 簡潔靈活的語法,它這種風格方便了有不同面向對象語言基礎的人員學習。功能豐富的函數庫,通過應用依賴,高效實現業務功能。能編譯打包構建成移動,web 等平臺的應用。
  • Flutter技術:Dart語言學習詳解篇
    Flutter總結系列1.Dart語言特點在Dart中,一切都是對象,一切對象都是class的實例,哪怕是數字類型、方法甚至null都是對象,所有的對象都是繼承自Object雖然Dart是強類型語言,但變量類型是可選的因為
  • Google 發布 Dart SDK 1.4,結構化程式語言
    Google 今天 發布 了 Dart SDK 1.4 版本,Dart是一種基於類的可選類型化程式語言,設計用於創建Web應用程式。
  • Dart 2.5 發布,支持 Dart 與 C 相互調用
    dart:ffi 外部函數接口目前,直接從 Dart 調用 C 的支持僅限於使用原生擴展深入集成到 Dart VM 中,或者 Flutter 應用程式可以間接調用 C,通過使用 Platform Channel 調用主機,在那裡調用 C,這是一個不受歡迎的雙重間接。
  • Flutter準備篇之Dart語言初探
    什麼是DartDart 是一種跨平臺的客戶端開發語言。具有專門為客戶端優化、高生產力、快速高效、可移植易學的風格。Dart主要由Google負責開發和維護重要概念在 Dart 中 甚至連 數字、方法和 null 都是對象。
  • 《十天入門Flutter》第五天 Dart剩下的億點點
    和其它程式語言比較相似,這裡簡單地提一下,不重點講庫Dart中的庫主要有三種:我們自定義的庫import 'lib/xxx.dart';系統內置庫import 'dart:math';import 'dart:io';import 'dart:convert';Pub包管理系統中的庫https://pub.dev/packageshttps://pub.flutter-io.cn/packages
  • 零基礎學Flutter之Dart簡介和基本語法
    Dart介紹Dart是谷歌開發的計算機程式語言,它被用於web、伺服器、移動應用和物聯網等領域的開發,開始並沒有引起注意,直到Flutter的出現才被人們重新重視。Dart發布於2011年,2015年5月Dart開發者峰會上,亮相了基於Dart語言的行動應用程式開發框架Sky ,後更名為Flutter,所以要學Flutter的話我們必須首先得會Dart。Dart是面向對象的、類定義的、單繼承的語言。
  • 《十天入門Flutter》第一天,了解Dart
    它不會單獨使用,一般都是跟隨框架安裝,比如Flutter可以通過DartPad在線編寫和運行代碼編寫和運行這裡提供三個DartPad的網址,可以在線codinghttps://dartpad.dev/https://dartpad.cn/https://dart.dev
  • 你知道dart是什麼意思嗎?
    今天,我們一起看一下dart這個單詞,說到dart這個單詞,有部分英語學習者知道dart的意思是飛鏢、擲鏢遊戲。下面,我們就一起看一下dart這個單詞。首先,我們看一下dart做名詞的用法。1、Markov died after being struck by a poison dart.馬爾科夫身中毒鏢而亡。這句話中dart的意思是鏢、飛鏢。有毒的飛鏢也可以表達為a poisoned dart。
  • Dart 任務調度
    Dart匯總請點擊這裡如果你不知道如何使用Future 請參考: Dart 異步模型如果你不了解Dart的事件循環機制 請參考:Dart 事件循環文章目錄同步代碼和異步代碼;這兩類代碼的不同1.運行順序不同2.運行的機制不同控制任務調度將任務添加到MicroTask隊列有兩種方法將任務添加到Event隊列使用合理的隊列通過連結的方式指定任務順序延時任務如何處理重量級任務測試一下你的理解程度問題
  • Dart 1.13.1 發布,修復 Dart2js 崩潰問題
    Dart 1.13.1 發布,此版本主要包括 3 個問題修復:Dart2js crash fix: Resolves a crash in pkg/js and dart2js
  • 7-Flutter應用開發語言Dart語法類剖析
    類是對同一種事物(抽象或具象)的描述,它可以是現實世界的或思維產物,舉個例子現實生活中,人會對相同特徵的事物進行分類(特徵像類中的成員變量和函數)比如水果,蔬菜等等這些就像計算語言中的類有點抽象,水果中蘋果,桃具體事物相當於計算機中類對象。類的存在讓項目架構更有條理,簡潔,方便升級,版本兼容。Dart 是一種基於類和 mixin 繼承機制的面向對象的語言,所有類的超類(根或父類)是object。
  • 詳解Dart中如何通過註解生成代碼
    背景最近在項目中使用到了Dart中的註解代碼生成技術,這跟之前Java中APT+JavaPoet生成代碼那套技術還是有一些不同的地方,比如Flutter中在禁用了dart:mirror,無法使用反射情況下如何得到類相關信息?
  • Dart 2.10 發布,帶來新的 Dart 開發者工具
    Flutter 在 Flutter SDK 中已經包含了這個新的 Dart 工具。從 Flutter 1.22 SDK 開始, <flutter-sdk>/bin 同時包含 flutter 和 dart 命令。如果同時進行 Flutter 開發和通用 Dart 開發,則可以通過單個 Flutter SDK 滿足開發需求,而無需安裝其他任何東西。
  • 一文學會Dart事件循環及異步調用
    您將學習如何使用Future,並且能夠預測程序的執行順序。<u>注意:本文中的所有內容既適用於原生運行的Dart應用程式(使用Dart虛擬機),也適用於已經編譯成JavaScript的Dart應用程式(dart2js的輸出)。本文使用Dart一詞來區分Dart應用程式和其他語言編寫的軟體。
  • Dart 2 正式發布:專門針對 Web 和 App 的開發而優化
    Dart 2 還融合了包括 Flutter、AdWords 和 AdSense 在內的語言早期使用者的經驗教訓,以及針對客戶反饋的成千上萬大大小小的問題進行了改進。Dart 2:更好的客戶端開發在 Dart 2 中,Google 採取了進一步措施鞏固 Dart 作為客戶端開發語言的霸主地位。
  • Dart 2.1 正式發布:提升性能以及改進可用性
    這是 Dart 2 的更新版本,它提供了體積更小的代碼、更快的類型檢查、更好的類型錯誤可用性,以及新的語言特性,可在構建用戶體驗時提高工作效率。值得關注的更新Dart 2.1 支持 int-to-double 的轉換Dart 2.1 現在支持類型推導,例如靜默將 int 評估為 double 類型