1. 程式人生 > >帶你Dart帶你Diao之重要概念

帶你Dart帶你Diao之重要概念

核心內容
  • 最基礎的Dart程式
  • Dart一些重要的概念
  • KeyWord(關鍵字)
  • Variable(變數)
  • Final&&Const
  • Dart的內建型別

最基礎的Dart程式

先看一個最基礎的Dart程式

void log(Object object) {
  print(object.toString());
}

/// Returns a Boolean representation for [arg], which must
/// be a String or bool.
bool convertToBool(dynamic arg) {
  if (arg is bool) return arg;
  if (arg is String) return arg == 'true';
  throw ArgumentError('Cannot convert $arg to a bool.');
}

上面的程式碼寫出了Dart最基本的一些特性。

以下的東西基本會出現在所有的Dart程式中

int
一種型別。其他一些內建型別還有是Sting, list,和bool等

42
數字,一個編譯時的常數.

print()
顯示輸出的print方法。

‘…’(或"…")
字串文字

$variableName或${表達方式}

字串插值:在字串文字中包含一個變數或表示式的字串等效的字串。

main()
應用程式執行開始的頂級方法

var
一種在不指定變數型別的情況下宣告變數的方法。

Dart一些重要的概念

(1)與Java不同,Dart沒有公開、受保護和私有的關鍵字。如果識別符號以下劃線(_)開頭,則它對其庫是私有的。

(2)識別符號可以字母或下劃線(_)開頭,後面跟著這些字元的任何組合加上數字

(3)DART工具可以報告兩種問題:警告和錯誤。警告只是表明您的程式碼可能無法工作,但它們並不妨礙您的程式執行。錯誤可以是編譯時,也可以是執行時。編譯時錯誤完全阻止程式碼執行;執行時錯誤導致在執行程式碼時引發異常。

(4)DART有表示式(有執行時值)和語句(沒有)。例如,條件表示式條件?expr1:expr2的值為expr1或expr2。將其與沒有值的if-etc語句進行比較。語句通常包含一個或多個表示式,但表示式不能直接包含語句。

(5)雖然DART是強型別的,但型別註釋是可選的,因為DART可以推斷型別。在上面的程式碼中,number推斷為型別INT。當您想明確表示不需要任何型別時,使用特殊型別dynamic.

(6)DAT支援泛型型別,如List(整數列表)或List(任何型別的物體的清單)。

(7)DART支援頂級函式(如main()),以及繫結到類或物件的函式(靜態和例項方法分別)。您還可以在函式中建立函式(巢式或區域性函式).

‘…’(或"…")表示字串文字

KeyWord(關鍵字)

避免使用這些詞作為識別符號。但是,如果有必要,標記上標的關鍵字可以是識別符號,但是表中的其他單詞是保留字不能作為是識別符號

keyword.png

  1. 上標詞1是語境關鍵詞,只有在特定的地方才有意義。到處都是有效的識別符號。
  2. 上標詞2是內建識別符號。為了簡化將JavaScript程式碼移植到DART的任務,這些關鍵字在大多數地方都是有效的識別符號,但它們不能用作類名或型別名稱,也不能用作匯入字首。
  3. 上標詞3是與非同步支援這是在Dart的1.0版本之後新增的。你不能用await或yield作為識別符號,在任何被標記為async, async*,或sync*.

Variable(變數)

建立變數有三種方式

String name = 'Bob';
var name = 'Bob';
dynamic name = 'Bob';

(1)String很簡單,就是顯式宣告變數型別是String型別

(2)var表示name變數可以根據值(‘Bob’)從而推斷出它的型別(String)

(3)如果物件不限於單個型別,就使用dynamic關鍵字,指定物件為dynamic型別

對於區域性變數,這裡按程式碼風格推薦部分的建議,使用 var 而不是具體的型別來定義區域性變數

變數的預設值

比如語句:
int a;

那麼它的預設值就是null,並不是0。
int型別的變數和Dart中的其他所有一切都是物件

Final&&Const

Final變數必須要給個初始值,並且給定後,就不能再次賦值給該變數

final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';

再次賦值會報錯

name = 'Alice'; // Error: a final variable can only be set once.

Const變數是編譯時常量.(Const變數是隱式最終變數。)第一次使用時,將初始化最後一個頂級變數或類變數。
如果const變數位於類級別,則標記它為static const

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

不僅用於宣告常量變數。您也可以使用它來建立常量值,以及宣告建構函式創造常數值任何變數都可以有一個常量值。

var foo = const [];
final bar = const [];
const baz = []; // 等同於const [] 

注意:可以省略常量的初始化表示式常量宣告

可以改變不是final、const修飾的變數,即使它被賦值過const常量

例如修改上述的var foo

foo = [1, 2, 3]; // Was const []

不能改變一個const常量的值,例如修改上述的const baz,就會報錯

baz = [42]; // Error: Constant variables can't be assigned a value.

內建型別

DART語言支援以下資料型別

  1. numbers
  2. strings
  3. booleans
  4. lists (also known as arrays)
  5. maps
  6. runes (for expressing Unicode characters in a string)
  7. symbols
(一)numbers

Dart的numbers有兩種形式

一個是int,它的整數值不大於64位,具體範圍取決於平臺。在dart vm上,值可以是
-2^63 至 2^63-1 。編譯為JavaScript的DART使用JavaScript數字允許-2^53 至2^53-1

另一個是double。64位雙精度浮點數,由IEEE 754標準指定

int和double支援基本的加減乘除運算,也可以找到abs()、ceil()和floor()其他方法。如果一些方法在int和double類裡面沒有找到,那麼在dart::math庫裡面或許可以找到

int x = 1;
int hex = 0xDEADBEEF;

double y = 1.1;
double exponents = 1.42e5;

字串轉數字的方法

// String -> int
var one = int.parse('1');
assert(one == 1);

// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);

// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');
(二)String

DART字串是一個UTF-16碼單元的序列.可以使用單引號或雙引號建立字串:

var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";

可以將表示式的值放入字串中,方法是${表達}。如果表示式是識別符號,則可以跳過{}。要獲取與物件對應的字串,DAT呼叫物件的字串toString()方法。

var s = 'string interpolation';

assert('Dart has $s, which is very handy.' ==
    'Dart has string interpolation, ' +
        'which is very handy.');
        
assert('That deserves all caps. ' +
        '${s.toUpperCase()} is very handy!' ==
    'That deserves all caps. ' +
        'STRING INTERPOLATION is very handy!');

==操作符表示判斷兩個物件是否相等

相鄰的多個字串會自動拼成一個字串,或者使用”+”拼裝

var s1 = 'String '
    'concatenation'
    " works even over line breaks.";
assert(s1 ==
    'String concatenation works even over '
    'line breaks.');

var s2 = 'The + operator ' + 'works, as well.';
assert(s2 == 'The + operator works, as well.');

注意:文字字串要求是編譯時常量,只要任何內插表示式是編譯時常量,比如說結果是為NULL或數值或字串或布林值。

//這些是可以內嵌到字串中的
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';

// 這些不能內嵌到字串中
var aNum = 0;
var aBool = true;
var aString = 'a string';
const aConstList = [1, 2, 3];


const validConstString = '$aConstNum $aConstBool $aConstString';
// const invalidConstString = '$aNum $aBool $aString $aConstList';

提供一個 r 字首可以建立一個 “原始 raw” 字串

var s = r"In a raw string, even \n isn't special.";  //加上r 可以防止\n換行

使用三個單引號或者雙引號也可以 建立多行字串物件


var s1 = '''a
You can create
multi-line strings like this one.
''';
輸出s1結果是
a
You can create
multi-line strings like this one.
(三)Booleans

為了表達布林值,Dart把型別命名為bool,有兩種型別值,true和false,他們都是編譯時常量。

當 Dart 需要一個布林值的時候,只有 true 物件才被認為是 true。 所有其他的值都是 false。這點和 JavaScript 不一樣, 像 1、 “aString”、 以及 someObject 等值都被認為是 false。

例如

// Check for an empty string.
var fullName = '';
assert(fullName.isEmpty);

// Check for zero.
var hitPoints = 0;
assert(hitPoints <= 0);

// Check for null.
var unicorn;
assert(unicorn == null);

// Check for NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

var name = 'Bob';
if (name) {  //name被轉換成bool型別,預設是false
  // Prints in JavaScript, not in Dart.
  print('You have a name!');
}

如果在 JavaScript 中執行,則會打印出 “You have a name!”,在 JavaScript 中 name 是非 null 物件所以認為是 true。但是在 Dart 的生產模式下 執行,這不會列印任何內容,原因是 name 被轉換為 false了,原因在於 name != true。 如果在 Dart 檢查模式執行,上面的 程式碼將會丟擲一個異常,表示 name 變數不是一個布林值。

(四)List

大多數程式語言中的集合都是資料或者物件組。在dart裡面陣列就是list物件

Dart list就像JavaScript陣列文字。下面是Dart的一個簡單list

var list = [1, 2, 3];

分析器推斷list有型List。如果嘗試向此列表新增非整數物件,分析器或執行時將引發錯誤。list的索引從0開始,即0是第一個元素的索引

list[1] = 1;
assert(list[1] == 1);

List型別支援很多操作list的方法,不可以像陣列賦值那樣直接對元素賦值

var constantList = const [1, 2, 3];
// constantList[1] = 1; // Uncommenting this causes an error.
(五)Map

可以使用Map構造方法建立物件

var gifts = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';

我們發現沒有new Map(),在Dart 2裡new關鍵字是可選的。

向現有的對映中新增元素

var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair

從對映中查詢值

var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');

要獲取對映中鍵值對的數目,使用.length

var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);

獲取鍵值對的值

//Map的用法
final constantMap = const {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};


print(constantMap[11]);  //列印為null
print(constantMap[10]);  //列印 neon
print(constantMap.length);  //列印 3
(六)Runes

在DART中,runes表示字串的UTF-32編碼

Unicode為所有世界上的書寫系統中使用的每個字母、數字和符號定義一個唯一的數字值。由於DART字串是由UTF-16程式碼單元組成的序列,因此在字串中表示32位Unicode值需要特殊的語法。
通常表示Unicode程式碼點的方法是\uXXXX,其中XXXX是一個4位的十六進位制值。例如,愛心字元(♥)是\u2665。

String類具有幾個可用於提取符文資訊的屬性,codeUnitAt和codeUnit屬性返回16位程式碼單元。使用runes屬性獲取字串的符文。

例如

main() {
  var clapping = '\u{1f44f}';
  print(clapping);
  print(clapping.codeUnits);
  print(clapping.runes.toList());
 
  Runes input = new Runes(
      '\u2665  \u{1f605}  \u{1f60e}  \u{1f47b}  \u{1f596}  \u{1f44d}');
  print(new String.fromCharCodes(input));
}

執行結果是這樣

runes.png

(七)Symbols

Symbol物件表示在Dart程式中宣告的運算子或識別符號。您可能永遠不需要使用符號,但它們對於按名稱引用識別符號的API非常有用,因為縮小會更改識別符號名稱而不會更改識別符號符號。要獲取識別符號的符號,請使用符號文字,它只是#後跟識別符號:

#radix
#bar

這個很不常用,就暫時忽略吧…

這裡的很多內容都只是大概介紹個基礎點,裡面的每個部分都還有很多知識點細節需要學習,在之後的系列會慢慢展開來說。

漫漫人生路,偶爾還是要喝點有營養的雞湯的

人生都是走著走著就開闊了,現在的你,不用著急。讓未來的,本該屬於你的樹再長長,那些花再開開,等你遇見的時候,才是他們最美的時候。

相關推薦

DartDiao重要概念

核心內容 最基礎的Dart程式 Dart一些重要的概念 KeyWord(關鍵字) Variable(變數) Final&&Const Dart的內建型別 最基礎的Dart程式 先看一個最基礎的Dart程式 void log(Object

DartDiao之類(一)

在前面的系列文章(文章末尾會有傳送門哦~~)都是些比較簡單的基礎概念,之後就要開始介紹一些注重理解和手動實踐的Dart知識了。這篇的內容主要是Dart中的類的構造方法。 Dart是一種面向物件的語言,具有類和基於mixin的繼承。每個物件都是一個類的例項,所有的類都是Obje

DartDiao之類(二)

在上一篇部落格,筆者介紹了Dart類的構造方法 帶你Dart帶你Diao之類(一) 這一篇部落格是介紹Dart類的其他內容,主要包括: Getters和Setters 方法 抽象類和抽象方法 隱式介面 繼承 列舉 mi

Dart飛之類的構造方法

在前面的系列文章(文章末尾會有傳送門哦~~)都是些比較簡單的基礎概念,之後就要開始介紹一些注重理解和手動實踐的Dart知識了。這篇的內容主要是Dart中的類的構造方法。 Dart是一種面向物件的語言,具有類和基於mixin的繼承。每個物件都是一個類的例項,所有

重拾JavaScript(2)console的所不知道的功能

斷言 adding devel bcf dev ces com 字符 bom JavaScript最常用的調試工具就是console.info()了。console是瀏覽器中window對象的屬性之一,由瀏覽器對象模型(BOM)提供,作用是訪問瀏覽器控制臺,你可以通過

一文了解激光雷達重要指標及參數

因此 一個 https 速度 .com p s 展示 jpg left 博客轉載自:https://www.leiphone.com/news/201801/oySuWNzftbNrWwpv.html 雷鋒網(公眾號:雷鋒網)按:本文作者SLAMTEC(思嵐科技公號slam

10年老兵走上MySQL王者路--免費視頻直播課邀來看

log 分享圖片 生態圈 mon mongodb 最新版本 tps 內容 mongod 直播老師簡介: 張甦·數據庫專家,10年互聯網線上處理及培訓經驗,專註於MySQL數據庫,對MongoDB、Redis等NoSQL數據庫以及Hadoop生態圈相關技術有深入研究。麾下學員

C語言推薦書籍從入門到進階走上大牛路(珍藏版)

轉載自某大佬部落格:https://pymlovelyq.github.io/2018/10/10/CC/ 前言:技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好

通透Netty原理架構解析

      Netty 是一個非同步事件驅動的網路應用程式框架,用於快速開發可維護的高效能協議伺服器和客戶端。   給大家推薦一個程式設計師學習扣群:854818273。群裡有分享的視訊,還有思維導圖 群公告有視訊,都是乾貨的,

C語言推薦書籍pdf版附下載連結共30+本從入門到進階走上大牛

前言:技術書閱讀方法論一.速讀一遍(最好在1~2天內完成)人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在

C語言推薦書籍從入門到進階走上大牛路(收藏版)

前言: 技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定

資深架構師詳細瞭解,SpringIoC容器

    一、 IoC概述 IoC(Inverse of Control,控制反轉)是Spring容

裝B,飛》pytest修煉路1- 簡介和環境準備

1. pytest簡介   pytest是python的一種單元測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,效率更高。根據pytest的官方網站介紹,它具有如下特點: 非常容易上手,入門簡單,文件豐富,文件中有很多例項可以參考 能夠支援簡單的單元測試

【執行力決定命】第2集《老板開始喜歡著責任心開啟執行力》

執行力、職場、老板、晉升「音頻原文」http://dwz.cn/6sANwk大家好,我是林琳笨,今天和大家一起分享責任心的重要性,為什麽老板喜歡有責任心的人?甚至相親也一定要求對方是一個有責任心的人。所以本期話題我取名《老板開始喜歡你,帶著責任心開啟執行力》責任心的理論定義是:個人對自己和他人、對家庭和集體、

一個團隊,怎麼

有人說,管理者面臨的最大問題是:不懂帶團隊!所以,很多管理者往往扮演的是團隊的柺杖、保姆等角色,四處救火,身心俱疲,而整個團隊也缺乏激情,士氣渙散,執行力低下。 帶團隊,不是簡單地發號施令,不是簡單地分解指標,而是一個系統工程。 關於如何帶團隊的1個理念、9個方法,一定會對身為管理者的你有所

史上最全Java面試題(全部答案,可能要收藏!)

原文地址:前幾天,有朋友去面試之前問我關於後端架構相關的問題,但奈於我去年更多的工作是在移動SDK開發上,對此有所遺忘,實屬無奈,後面準備總結下.今天要談的主題是關於求職.求職是在每個技術人員的生涯中都要經歷多次,對於我們大部分人而言,在進入自己心儀的公司之前少不了準備工作,

一篇文章了解網絡爬蟲的概念及其工作原理

開發 才有 機器 graph jpg eight 效率 查找 規則 眾所周知,隨著計算機、互聯網、物聯網、雲計算等網絡技術的風起雲湧,網絡上的信息呈爆炸式增長。毋庸置疑,互聯網上的信息幾乎囊括了社會、文化、政治、經濟、娛樂等所有話題。使用傳統數據收集機制(如問卷調查法、訪談

不知道的HTTPHTTPS

發的 graph 實的 layer 這份 方式 發送 機構 加密 確保web安全的HTTPS   HTTPS=HTTP+ 加密 + 認證 + 完整性保護   1、加密:     1)通信的加密       所謂互聯網,是由能連通到全世界的網絡組成的。無論世界哪個角 落的服務

不知道的HTTP首部字段一覽

warning erer 標記 字段 expec 已過期 gpo table 主體 一、HTTP/1.1 首部字段一覽   HTTP 首部字段根據實際用途被分為以下 4 種類型:   1、通用首部字段:請求報文和響應報文兩方都會使用的首部。 首部字段名 說明 Ca