帶你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(關鍵字)
避免使用這些詞作為識別符號。但是,如果有必要,標記上標的關鍵字可以是識別符號,但是表中的其他單詞是保留字不能作為是識別符號:
- 上標詞1是語境關鍵詞,只有在特定的地方才有意義。到處都是有效的識別符號。
- 上標詞2是內建識別符號。為了簡化將JavaScript程式碼移植到DART的任務,這些關鍵字在大多數地方都是有效的識別符號,但它們不能用作類名或型別名稱,也不能用作匯入字首。
- 上標詞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語言支援以下資料型別
- numbers
- strings
- booleans
- lists (also known as arrays)
- maps
- runes (for expressing Unicode characters in a string)
- 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));
}
執行結果是這樣
(七)Symbols
Symbol物件表示在Dart程式中宣告的運算子或識別符號。您可能永遠不需要使用符號,但它們對於按名稱引用識別符號的API非常有用,因為縮小會更改識別符號名稱而不會更改識別符號符號。要獲取識別符號的符號,請使用符號文字,它只是#後跟識別符號:
#radix
#bar
這個很不常用,就暫時忽略吧…
這裡的很多內容都只是大概介紹個基礎點,裡面的每個部分都還有很多知識點細節需要學習,在之後的系列會慢慢展開來說。
漫漫人生路,偶爾還是要喝點有營養的雞湯的
人生都是走著走著就開闊了,現在的你,不用著急。讓未來的,本該屬於你的樹再長長,那些花再開開,等你遇見的時候,才是他們最美的時候。
相關推薦
帶你Dart帶你Diao之重要概念
核心內容 最基礎的Dart程式 Dart一些重要的概念 KeyWord(關鍵字) Variable(變數) Final&&Const Dart的內建型別 最基礎的Dart程式 先看一個最基礎的Dart程式 void log(Object
帶你Dart帶你Diao之類(一)
在前面的系列文章(文章末尾會有傳送門哦~~)都是些比較簡單的基礎概念,之後就要開始介紹一些注重理解和手動實踐的Dart知識了。這篇的內容主要是Dart中的類的構造方法。 Dart是一種面向物件的語言,具有類和基於mixin的繼承。每個物件都是一個類的例項,所有的類都是Obje
帶你Dart帶你Diao之類(二)
在上一篇部落格,筆者介紹了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天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定
資深架構師帶你詳細瞭解,Spring之IoC容器
一、 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 效率 查找 規則 眾所周知,隨著計算機、互聯網、物聯網、雲計算等網絡技術的風起雲湧,網絡上的信息呈爆炸式增長。毋庸置疑,互聯網上的信息幾乎囊括了社會、文化、政治、經濟、娛樂等所有話題。使用傳統數據收集機制(如問卷調查法、訪談
你不知道的HTTP之HTTPS
發的 graph 實的 layer 這份 方式 發送 機構 加密 確保web安全的HTTPS HTTPS=HTTP+ 加密 + 認證 + 完整性保護 1、加密: 1)通信的加密 所謂互聯網,是由能連通到全世界的網絡組成的。無論世界哪個角 落的服務
你不知道的HTTP之首部字段一覽
warning erer 標記 字段 expec 已過期 gpo table 主體 一、HTTP/1.1 首部字段一覽 HTTP 首部字段根據實際用途被分為以下 4 種類型: 1、通用首部字段:請求報文和響應報文兩方都會使用的首部。 首部字段名 說明 Ca