-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Dart編程語言

( 簡體 字)
作者:戴?類別:1. -> 程式設計 -> 綜合
譯者:
出版社:電子工業出版社Dart編程語言 3dWoo書號: 46983
詢問書籍請說出此書號!

缺書
NT售價: 345

出版日:6/1/2017
頁數:212
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121315114
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

譯者序

Dart是一門由Google開發并被批準為ECMA標準(ECMA-408)的通用編程語言。它可以用于構建Web端、服務端和移動端應用程序。它是開源的,使用寬松的免費軟件許可證(修改版BSD許可證)。Dart是完全面向對象的,使用類和單繼承,可編譯為JavaScript,語法風格是類C的。它支持接口、mixin、抽象類、泛型和可選類型。
Dart目前在業界的認識度不高,社區規模也比較小,主要原因是Dart自身還在不斷地發展、完善中,而Google對外還沒有真正地對Dart做過推廣。幸好,近兩年Dart的發展開始步入正軌。Dart是2016年Google內部使用量增長最快的編程語言,多個重要項目如AdSense、AdWords等Web應用,正在用Dart重寫。Google正在研發中的跨平臺移動端開發工具Flutter,也正在使用Dart。Dart未來的發展值得我們期待。
本書雖然名為《Dart編程語言》,且內容也涉及了對象、類型、表達式與語句等基礎知識,但它總體還是著重于講解語言背后的原理和思想。這意味著本書并不適合真正的初學者,讀者至少要具備基本的編程知識,最好對Dart有基本的了解且使用過一門編程語言,例如JavaScript、Java或C#等。
作為一門新生的可選類型編程語言,Dart目前的關注者比較少,可參考的資料也非常匱乏,而本書內容具有一定深度,加上筆者水平有限,翻譯時出現錯誤或偏差在所難免,歡迎讀者朋友指正。
感謝出版社編輯的校對,特別感謝付睿編輯,讓我得到了翻譯(學習)本書的機會。翻譯工作耗費了我大量的業余時間。也感謝家人的支持與理解。

推薦序

在2006年的早春時節,我在博客上寫了一篇簡短的文章《Gilad是正確的》,主要內容是表述作為一名靜態類型主義者,我認同Gilad關于可選和分層類型系統的想法,靜態類型不能改變程序的運行時行為,不阻止非法程序的編譯或執行,是面向數百萬開發人員的編程語言必然要做出的設計權衡。當時我正在忙于學習Visual Basic語言,它通過Option Strict Off語句已經可以支持可選類型,但該特性受到靜態類型支持者的猛烈抨擊。類型系統通常是高度非線性的,當它成長至某一節點之后,其復雜性將呈爆炸性增長,帶給開發者的價值卻很少,還使語言實現者的生活變得暗淡無光。可選和分層類型系統通過允許強制靜態類型與動態類型和平共存來實現一種更加緩和的處理方式。現在,近十年后,Gilad開創性的愿景已經化名為漸進類型并逐步成為主流。過去幾年中所誕生的許多編程語言,如Hack、TypeScript、Flow、Racket和Dart,都選擇了漸進類型。即使是學術界,也接受了這個想法,并用包含如“三人行”和“責備”等輕蔑字眼的標題,來編寫與之相關的論文。
Dart另一個務實且沒有被語言純粹主義者所接受的事實是,Dart的類型系統被故意設計為非嚴格的。用正常的語言來描述,這意味著Dart類型檢查器在編譯時不會標記某些類型錯誤,反而依靠運行時檢查來確保類型安全。Dart中類型非嚴格的主要來源是協變泛型。為了解釋其中的分歧,讓我們先看看一臺自動售貨機,我們只能從中取飲料。如果自助餐廳需要售賣汽水的自動售貨機,則我們可以合法地安裝售賣根汁汽水的自動售貨機,因為根汁汽水是一種汽水(但是在需要售賣根汁汽水的自動售貨機的地方,安裝售賣汽水的自動售貨機則是非法的)。在編程語言中,我們說自動售貨機是協變的。接下來讓我們看看只能用來裝填垃圾的垃圾桶。如果自助餐廳需要一個垃圾桶來回收垃圾,則我們可以合法安裝一個普通的垃圾桶,因為可回收垃圾是垃圾的一種(但對于需要普通垃圾桶的地方,安裝可回收垃圾桶是非法的)。在編程語言中,我們說垃圾桶是逆變的。你不是唯一對協變和逆變感到困惑的人,你會欣賞Dart的決定,使所有的泛型類型協變。這種選擇的后果是,如果你需要普通垃圾桶,則你可以合法安裝一個用于可回收垃圾的垃圾桶,但該垃圾桶會拒絕回收人們向其中投入的所有不可回收的垃圾。雖然理論上非嚴格,但對于大多數開發人員來說,不安全的協變實際上是很自然的,我贊賞Dart設計者在這里做出的選擇。作為曾經掙扎于選擇super或extends的人可以證明,選擇支持靜態類型安全的泛型語言,其付出的代價是建立在減少用戶之上的。
Dart語言設計者做出的其他務實選擇,使Dart的編碼過程變得流暢。例如,Dart沒有接口、抽象基類或“普通”類。相反,Dart只有作為接口的類,你可以實現它們,或者通過繼承它們來作為基類使用,或者通過mixin來重用它們的實現。Dart中的每個類型都是一個對象,所以基礎類型(如數字)和常規對象類型是沒有區別的。雖然Dart中的所有內容都是對象,但定義頂級函數和變量也是可以的,所以頂層類中不再需要可怕的public static void咒語了。Dart允許用戶自定義算術運算符,但不支持基于類型的方法重載,這大大簡化了語言本身。其他支持基于類型重載的編程語言,它們的語言規范花費了大量不必要的篇幅來描述此特征的語義。null感知運算符(null也是一個普通的對象)和級聯為點操作符賦予了更多的能力,也使API的作者不費吹灰之力就能編寫出可讓用戶流暢使用的API。
因為所有類型都是可選的,所以Dart本質上是一種動態語言,雖然如此,與其他大多數動態語言相比,你很少有機會產生疑問。有null但沒有undefined,因此只有==但沒有===。只有true是true,所以也不需要使用 (foo && foo.bar()) 來檢查null。Dart有常見的整數和浮點數字類型,但是+和==不會產生令人驚訝的運行時類型轉換,類型轉換可能會是偉大的考試問題或有趣的會議演示,但都會帶來令人沮喪的錯誤。
在我看來,雖然我明顯存在偏見,但Dart成為我最喜歡的編程語言的原因是,它是我知道的唯一支持以下四種模式的編程語言。
也就是說,Dart通過使用sync*塊中的生成器和for循環,對同步數據流(Iterable <T>)的生成和使用提供良好的支持,使用async塊中的await表達式,生成和使用future(Future <T>),最后且最重要的是,使用async*塊中的異步生成器和for循環生成及使用異步數據流(Stream <T>)。內置對異步編程的支持在任何現代編程語言中都是必不可少的,雖然數據存在于內存中,但讓它們在網絡上傳輸,那是非常“遙遠”的,在如此高延遲下進行同步訪問的代價極高。類似于JavaScript,但又不同于其他支持生成器的語言,Dart擁有所謂的委派生成器,避免流的生成在嵌套和遞歸中呈現二次方規模的爆發性增長。
盡管有以上諸多優點,Dart在大體上是一門被設計得比較無趣的語言。由于支持getter、setter、lambda、enum、reified generic、模塊、一個精心設計的標準庫和一個簡單的包管理器,如果你用過Java或C#,則使用Dart會讓你感覺非常舒適,就像一雙合腳的鞋子;如果你用過JavaScript,那么你會覺得Dart像新鮮的空氣。本書將幫助你了解Dart的所有特性,了解為什么需要這些特性及它們是如何實現的,Gilad對細節的詳細講解和其獨特的方式,可讓你在短時間內熟悉Dart。
Erik Meijer
加利福尼亞州 帕羅奧圖
2015年10月

前言

本書與其他Dart書籍有什么不同?其他Dart書籍都注重于實操,本書著重于講解原理和思想。
Dart的實操非常重要,但它們可能會逐年變化,并可能一直變化下去。相比之下,Dart背后的原理應該很少會隨時間而改變。如果你對激發Dart語言設計的想法及它們是如何實現的,還有如何權衡現實世界對Dart的需求等感興趣,那么你應該閱讀本書。
Dart的主要思想之一是可選類型。我在幾十年前就開始從事可選類型的工作,今天我們看到使用可選類型系統的語言在飛速增加,我對此感到非常欣慰。雖然Dart和它的任何競爭對手都不像我想要的那樣實現可選類型,但可選類型成為主流的事實才是最重要的。
更重要的思想是,Dart是一種面向對象的語言,這不等同于傳統意義上的類、繼承或其他大多數開發者所理解的概念,它的深層含義可以表述為,一個對象最重要的是它可觀察的行為。同樣,Dart對這個想法并沒有完美地實現,但比大多數主流語言要好。
本書中涉及的另一個關鍵思想是反射。大部分關于編程的書籍都沒有很好地討論反射。因此,我非常渴望在本書中探討反射。然而,Dart的反射歷史卻意外地曲折。
一方面,很多Dart用戶都渴望使用反射,有時只是為了用而用,但并不一定適用。另一方面,某些作為Dart編譯目標的平臺存在嚴重限制,使得對反射的支持異常昂貴,尤其是需要考慮代碼的體積。這種雙向壓力使Dart的反射陷入尷尬的境地。
我們從一開始就知道代碼體積和反射對其影響的敏感性。這個問題及其解決方案在2011年11月的第1個Dart反射設計文檔中被討論。然而,直到實現解決方案且開發者可以輕松使用時,已經花費了四年。
我希望本書有效地傳達上述及其他語言設計相關的想法,但它們的好壞由讀者來判斷。我們可能可以創造一門更加純粹的語言,并做得更好,但另一方面,我們也不清楚是否可以得到大家的認可。也許有一天我會進行那樣的嘗試。
本書的寫作歷時很久。直到我能完整講述一個關于反射的合理故事,我才完成本書。拖延本書寫作的另一個原因是,本書的主題發展得如此之快,以至于它總是面臨過時的風險。這種風險還沒有過去,但在某個時刻我們需要說“適可而止”。
Dart并沒有完美實現驅動其設計的思想。沒有人比它的設計者更了解這個事實。然而,它是一門真正的語言,已經被用來書寫數百萬行的關鍵任務代碼。它以某種方式推動了編程文化的發展,最引人注目的是在可選類型領域。正如有人在丹麥說的:“它本可能更糟”。

致謝

Dart編程語言是大團隊努力的結果。Dart的開發工作讓我收獲許多快樂,我需要跟許多同事合作,其中有很多人更可以稱為朋友,跟他們合作是一件非常愉快的事情。我非常榮幸地在本書及Dart語言規范中列舉部分曾經和我合作過的同事。
Dart語言是由Lars Bak和Kasper Lund構思和設計的,所以沒有他們,本書就不可能存在。Lars是我長期的朋友和同事,從一開始就管理Dart項目。除此之外,Lars讓我參與Dart的設計工作,為此,我特別感謝他。Lars和Kasper不僅是非常有天賦的系統設計師和實現者,而且很好相處!
特別感謝Erik Meijer,和他共同開發Dart的異步功能是一種快樂。Erik是一名真正的編程語言專家,且屬于非常少見的那種。
如果本書第8章的完成需要感謝Erik,那么第7章的完成就需要感謝Ryan Macnak、Peter Ahe、Erik Ernst的幫助了,他們分別實現了Dart VM中mirrors、dart2js中的mirrors及reflectable庫。
本書的寫作,不僅得到了Lars的支持,也得到了我的經理Ivan Posva的支持。在過去的四年里,我與Ivan和VM團隊的其他成員共享辦公空間,他們是:Zachary Anderson、Daniel Andersson、Siva Annamalai、Regis Crelier、Matthias Hausner、Ryan Macnak、John McCutchan、Srdjan Mitrovic和Todd Turnidge。感謝他們的愉快陪伴。
我經常拜訪位于丹麥奧胡斯的Dart總部,其過程充滿樂趣(即使實際旅途并不有趣)。Linda Lykke Rasmussen的行政支持是無價的。
我對Dart語言規范的編寫工作是本書的直接基礎來源。這項工作得益于許多人的建議,但只有Lasse Nielsen對細節的不尋常的覺察,使他捕捉到了許多微妙的問題。
我也參與了Dart的標準化工作,Anders Sandholm幫我承擔了其中的大部分工作,我對他表示感謝。我還要感謝Dart標準委員會ECMA TC52的其他參與者。
如果沒有其他Dart團隊成員一直以來的工作,Dart不可能有今天。人很多,這里不便一一列出,但他們都為Dart的今天付出了努力。
和我長期合作的編輯Greg Doench一直非常耐心,我很高興能與他合作。
和往常一樣,我的妻子Weihong和我的兒子Teva,讓這一切都是值得的。
Gilad Bracha
加利福尼亞州 洛思阿圖斯
2015年11月
內容簡介:

本書總計9章,前6章對Dart的對象、庫、函數、類型、表達式與語句等基礎知識進行了詳細介紹;第7、8章對反射和isolate等進階內容進行了深入講解;第9章為總結。本書與眾不同之處是,除了介紹語言特性,更著重于講解語言背后的原理和思想。本書內容較為深入,不太適合初學者,讀者至少要具備基本的編程知識,最好是接觸過其他編程語言且對Dart有基本了解。

目錄:

第1章 簡介 1
1.1 動機 1
1.2 設計準則 2
1.2.1 萬物皆對象 2
1.2.2 面向接口編程,而非面向實現 2
1.2.3 類型是為開發者服務的 3
1.3 限制 4
1.4 概述 4
1.5 本書結構 10
1.6 相關語言及其對Dart的影響 11
第2章 對象、接口、類與mixin 12
2.1 accessor 13
2.2 實例變量 16
2.3 類變量 16
2.4 final變量 18
2.5 相同與相等 18
2.6 類與父類 20
2.7 抽象方法與抽象類 22
2.8 接口 23
2.9 對象的創建 24
2.9.1 重定向構造函數 28
2.9.2 工廠構造函數 29
2.10 noSuchMethod() 30
2.11 常量對象與字段 31
2.12 類方法 31
2.13 實例及其類與元類 33
2.14 Object與其方法 34
2.15 mixin 35
2.16 相關語言 46
2.17 總結 46
第3章 庫 47
3.1 頂層 47
3.2 腳本 48
3.3 隱私 49
3.4 導入 49
3.5 將庫拆分成part 54
3.6 導出 55
3.7 鉆石導入 56
3.8 延遲加載 58
3.9 相關語言 59
3.10 總結 60
第4章 函數 61
4.1 參數 61
4.1.1 位置參數 61
4.1.2 命名參數 62
4.2 函數體 63
4.3 函數聲明 64
4.4 閉包 65
4.5 調用方法與函數 66
4.5.1 級聯 66
4.5.2 賦值 68
4.5.3 使用運算符 68
4.6 Function類 68
4.7 函數作為對象 70
4.8 生成器函數 72
4.8.1 迭代器與可迭代對象 72
4.8.2 同步生成器 73
4.9 相關語言 74
4.10 總結 75
第5章 類型 76
5.1 可選類型 76
5.2 類型之旅 78
5.3 接口類型 81
5.4 類型實踐:添加類型的表達式問題 83
5.5 泛型 87
5.6 函數類型 93
5.6.1 可選位置參數 94
5.6.2 命名參數 95
5.6.3 重溫Call() 96
5.7 類型具體化 97
5.7.1 類型檢測 97
5.7.2 強制類型轉換 98
5.7.3 檢查模式 99
5.7.4 具體化泛型 100
5.7.5 具體化和可選類型 100
5.7.6 類型和代理 101
5.8 malformed類型 104
5.9 非嚴格 106
5.10 相關語言 108
5.11 總結 109
第6章 表達式和語句 110
6.1 表達式 110
6.1.1 字面量 110
6.1.2 標識符 117
6.1.3 this 121
6.1.4 常量 121
6.1.5 創建對象 122
6.1.6 賦值 123
6.1.7 抽取屬性 124
6.1.8 方法調用 124
6.1.9 使用運算符 125
6.1.10 Throw 126
6.1.11 條件運算符 127
6.2 語句 127
6.2.1 block 127
6.2.2 if 127
6.2.3 循環 128
6.2.4 try-catch 130
6.2.5 rethrow 131
6.2.6 switch 131
6.2.7 assert 133
6.2.8 return 135
6.2.9 yield和yield-each 137
6.2.10 label 138
6.2.11 break和continue 139
6.3 總結 140
第7章 反射 141
7.1 自省 141
7.1.1 速度與大小的影響 144
7.1.2 例子:代理 146
7.1.3 例子:序列化 147
7.1.4 例子:解析器組合器 158
7.2 為什么使用mirror 168
7.3 元數據 169
7.4 通過代碼生成執行反射 169
7.5 自省之外 172
7.6 相關語言 173
7.7 總結 173
第8章 異步和isolate 174
8.1 異步 174
8.2 future 175
8.2.1 使用future 175
8.2.2 生成future 176
8.2.3 調度 177
8.3 stream 178
8.4 isolate 178
8.4.1 Port 179
8.4.2 spawning 179
8.4.3 安全 180
8.5 例子:客戶端-服務器通信 180
8.5.1 promise:更好的future 180
8.5.2 將isolate作為分布式對象 182
8.6 異步函數 187
8.6.1 await 187
8.6.2 異步Generator 188
8.6.3 await-for循環 189
8.7 相關語言 189
8.8 總結 189
第9章 結論 190
9.1 可選類型 190
9.2 面向對象 191
9.3 反射 192
9.4 工具 192
9.5 總結 193
相關文獻 194
序: