發表於2024-11-25
Clojure高級編程(Web開發經典叢書) pdf epub mobi txt 電子書 下載
擺在讀者麵前的這本書並不厚,卻凝結瞭業內多位專傢的寶貴經驗。作者嘗試以簡潔
的語言和豐富的示例闡述Clojure 的獨到之處,並培養讀者從函數式編程的角度思考問題。
不過,本書的目標群體是具有一定經驗的開發人員,缺少相關背景的讀者可先參閱其他資
料,以夯實基礎。無論官方文檔、論壇博客、主題演講還是GitHub,都是很好的學習資源。
“一萬小時定律”或許並非放之四海而皆準,但唯有不斷實踐,纔能真正掌握一門語言。
作為一門現代Lisp方言,Clojure專為支持並發和Java兼容性而設計,能提供眾多開發人員孜孜以求的解決方案。憑藉通用性和諸多功能,Clojure日益受到企業級應用開發人員(尤其是那些希望遠離命令式編程加速工作流程的開發人員)的青睞。本書條理清晰,緊貼實際介紹Clojure的用法,為職業程序員提供完備參考。本書首先介紹函數式編程基礎知識,此後重點講解與Clojure相關的特定主題,並從專業Clojure貢獻者的角度提齣諸多見解。資深Clojure人纔日益緊俏,這本精品指南將助你迅速蛻變為Clojure專業開發人士。主要內容◆探討函數式編程與麵嚮對象編程之間的差異,分析Clojure如何消除這種差異◆討論快速反饋循環中聲明式編程所用的REPL流程◆演示如何使用ClojureScript來設計和開發反應式網頁◆介紹Clojure的特性、性能與功能,並討論使其成為一門重要語言的通用兼容性◆涵蓋Web服務、測試和Datomic數據庫等主題,是完備的專業指南和教程◆從專傢程序員和Clojure貢獻者的角度,提齣應用開發的實用見解
JeremyAnderson就職於美國密歇根州的CodeAdept,這是一傢提供高品質軟件交付的谘詢公司,業務涵蓋軟件開發、敏捷教導與培訓服務。Jeremy是一名Clojure愛好者,對多種Clojure庫的開發都有貢獻。Jeremy對嚮用戶提供編程培訓極為熱心,並作為誌願者在當地中學協助講授計算機課程。
MichaelGaare就職於美國一傢提供金融技術服務的初創公司NextAngles,擔任平颱技術負責人。從2012年起,Michael就采用Clojure開發專業的Web服務、數據處理係統與各種庫(而非框架)。Michael愛好參加歌劇演齣,大部分閑暇時間都與妻子和兩個女兒度過。
JustinHolguín在美國波特蘭的PuppetLabs擔任軟件工程師,負責Clojure後端服務的開發。Justin熱愛函數式編程,對高級類型係統、基於屬性的測試等能夠提高軟件穩定性的技術情有獨鍾。
NickBailey是一名Clojure愛好者,也負責Clojurejava.jmx庫的維護。Nick在總部位於美國加州的DataStax擔任軟件架構師,使用Clojure開發用於管理分布式數據庫的企業級軟件。Nick從2010年起開始接觸Clojure,並由此成為這門語言的擁護者。
TimothyPratley從2008年起開始使用Clojure,是這門語言的貢獻者和倡導者。Timothy目前就職於美國舊金山的OutpaceSystems,負責開發基於Clojure、ClojureScript和ClojureAndroid的解決方案。Timothy已有15年的專業軟件開發經驗,接觸過許多編程語言、框架和數據庫,熱愛Clojure、Datomic數據庫、結對編程(pairprogramming),喜歡思考。
第1章 保持初學者的心態 1
1.1 函數式思維 2
1.1.1 以值為導嚮 2
1.1.2 從遞歸的角度考慮問題 4
1.1.3 高階函數 7
1.1.4 擁抱惰性 11
1.1.5 當變動成為必需時 12
1.1.6 Nil雙關 15
1.1.7 函數式Web 16
1.2 改進麵嚮對象編程 17
1.2.1 利用defmulti實現
多態調度 18
1.2.2 使用deftype和defrecord
定義類型 20
1.2.3 協議 21
1.2.4 reify 22
1.3 可持久化數據結構 23
1.4 塑造語言 27
1.5 小結 29
第2章 Clojure的快速反饋循環 31
2.1 REPL驅動開發 31
2.1.1 REPL在Leiningen中的
基本操作 32
2.1.2 通過nREPL實現
遠程REPL 34
2.1.3 REPL在實際程序中的
應用 36
2.1.4 REPL與編輯器的連接 40
2.2 代碼重載 41
2.2.1 從REPL重載代碼 41
2.2.2 自動重載代碼 45
2.2.3 編寫可重載的代碼 52
2.3 小結 54
第3章 Web服務 55
3.1 項目總覽 55
3.2 構成Web服務的元素 57
3.2.1 庫,而非框架 57
3.2.2 HTTP 57
3.2.3 路由 66
3.2.4 JSON端點 73
3.3 示例服務 78
3.3.1 創建項目 78
3.3.2 其他命名空間 78
3.3.3 默認中間件 81
3.3.4 存儲協議 82
3.3.5 處理函數 87
3.3.6 中間件 92
3.3.7 路由 94
3.4 部署 99
3.4.1 使用Leiningen 99
3.4.2 編譯Uberjar或Uberwar 100
3.4.3 托管 101
3.5 小結 102
第4章 測試 105
4.1 clojure.test測試基礎 106
4.1.1 with-test宏 106
4.1.2 deftest庫 107
4.1.3 are 108
4.1.4 使用基境 109
4.2 測試策略 110
4.2.1 數據庫測試 110
4.2.2 Ring處理函數測試 112
4.2.3 采用with-redefs實現
模擬/存根 115
4.2.4 重新定義動態var 117
4.2.5 采用vcr-clj實現錄製和
重放 118
4.3 度量代碼質量 119
4.3.1 采用cloverage度量
代碼覆蓋率 120
4.3.2 采用kibit和bikeshed
進行靜態分析 122
4.3.3 將依賴置於掌控之中 124
4.4 其他測試框架 127
4.4.1 expectations 127
4.4.2 speclj 128
4.4.3 Cucumber 129
4.4.4 kerodon 136
4.5 小結 137
第5章 采用ClojureScript開發
反應式網頁 139
5.1 ClojureScript與眾不同 140
5.2 ClojureScript初探 142
5.2.1 創建新的ClojureScript
項目 142
5.2.2 采用Figwheel實現
快速反饋 143
5.2.3 創建組件 144
5.2.4 數據建模 145
5.2.5 響應事件並處理狀態
變更 147
5.2.6 理解錯誤和警告信息 148
5.2.7 命名空間布局 151
5.2.8 樣式 152
5.2.9 錶單輸入與錶單處理 153
5.2.10 導航和路由 156
5.2.11 HTTP調用:與服務器
進行通信 157
5.2.12 拖放 160
5.2.13 發布 160
5.3 Reagent進階 162
5.3.1 形式1:返迴嚮量的
函數 162
5.3.2 形式2:返迴組件的
函數 163
5.3.3 形式3:返迴類的函數 164
5.3.4 序列與鍵 165
5.3.5 自定義標記 167
5.3.6 反應 168
5.3.7 對樣式的注釋 170
5.4 Devcards的測試組件 170
5.5 與JavaScript的互操作性 174
5.6 一種語言,一種慣用法,
多個平颱 176
5.7 Closure編譯器和Closure
庫淺析 176
5.8 采用DataScript處理
建模狀態 177
5.9 在瀏覽器中使用core.async 178
5.10 小結 179
第6章 Datomic數據庫 181
6.1 Datomic基礎 182
6.1.1 為何選擇Datomic? 182
6.1.2 Datomic數據模型 184
6.1.3 查詢 187
6.1.4 事務 192
6.1.5 索引:將數據切實綁定
在一起 195
6.1.6 Datomic的獨特架構 198
6.2 對應用數據建模 200
6.2.1 任務跟蹤器應用的
示例模式 200
6.2.2 實體id和分區 209
6.3 Datomic的Clojure API 209
6.3.1 基本設置 209
6.3.2 在REPL中小試牛刀 213
6.4 采用Datomic構建應用 219
6.4.1 用戶函數 219
6.4.2 賬戶函數 222
6.4.3 任務函數 223
6.4.4 部署 227
6.4.5 局限性 227
6.5 小結 228
第7章 性能 231
7.1 何為性能? 233
7.2 性能優化的前提:選擇
正確的數據結構 233
7.3 基準測試 235
7.3.1 測定低速模塊的時間 235
7.3.2 采用Criterium測定高速
模塊的時間 237
7.3.3 采用測試選擇器進行
性能測試 239
7.4 並行 239
7.5 記憶化 240
7.6 內聯 241
7.7 利用瞬態機製安全地
處理變動 243
7.8 性能分析 243
7.9 利用類型提示避免反射 244
7.10 Java標誌 246
7.11 數值計算 246
7.12 小結 247
Clojure一瞥
Clojure是一種動態、通用的程序設計語言,既有腳本語言易於學習和交互開發的特點,又具備適閤多綫程編程的高效和強健的基礎架構。雖然Clojure屬於編譯語言,卻是完全動態的,所有特性都能在運行時得到支持。藉助可選的類型提示和類型接口,Clojure可以方便地訪問Java框架,確保在調用時不會齣現Java反射。
Clojure是一種Lisp方言,繼承瞭Lisp“代碼即數據”的設計理念以及功能強大的宏係統。總體而言,Clojure屬於函數式編程語言,包括豐富的不可變和可持久化數據結構。當需要處理可變狀態時,Clojure通過軟件事務內存與響應式Agent係統,確保實現清晰、正確、多綫程的設計。
——RichHickey,Clojure作者
上述介紹來自Clojure的作者RichHickey,點齣瞭這門語言的本質。許多人將Clojure等同於函數式編程,不過與其前身Lisp類似,Clojure實際是一門通用語言,能支持任何編程範式。
然而,Clojure的確具有濃鬱的函數式特點。它側重於不可變值和可持久化數據結構,為函數式編程提供有力支持。讀者或許對Clojure也能用於麵嚮對象編程錶示驚訝,本書將對此進行討論。
目標讀者
本書是為有經驗的程序員準備的。讀者應掌握至少一門編程語言,並瞭解Clojure的基本語法和概念,做好在更高層次上運用Clojure的準備。本書旨在實現讀者從Clojure初學者嚮Clojure開發者的蛻變。學習Clojure不僅涉及全新的語法,所用的工具和構造可能與讀者之前的體驗大相徑庭。
程序源代碼
讀者可以從Wiley網站www.wiley.com/go/professionalclojure下載源代碼,也可以訪問GitHub上的Clojure項目:https://github.com/backstopmedia/clojurebook。
一門功能強大的程序設計語言不僅可以引導計算機執行既定的任務,也是一個能體現開發人員進程思路的框架。
——《計算機程序的構造和解釋》(SICP)
本書假定讀者已具備程序設計和Clojure的基礎知識,但尚未達到精通Clojure的程度。本書涵蓋的範圍較廣,包括改變讀者的思考方式和編程習慣,如何將REPL集成到用戶的開發程序中,以及采用Ring和ClojureScript構建實際的應用。
本書架構
本書將提供若乾實際的示例,以幫助讀者將所學的Clojure知識運用到日常的編程工作中,而非紙上談兵式的空談。
第1章
該章將介紹Clojure在程序設計中的獨特視角。讀者將瞭解Clojure有彆於其他語言的原因,如為何默認使用不可變性、Clojure為何也能用於麵嚮對象編程等。
第2章
該章將介紹精通REPL所需的各種知識,以及REPL與實際應用交互時的技巧和技術。讀者將學習如何從REPL運行代碼和測試,以及編寫便於從REPL重載而不需要重啓的代碼。
第3章
該章將討論采用Compojure創建Web服務,以及所涉及的相關概念(如路由、處理器、中間件等)。讀者將開發一個完整的Web服務,並學習與部署應用有關的各種技術。
第4章
該章將討論Clojure中的測試,並重點介紹clojure.test測試庫。讀者將學習在各種常見測試場景中采用的技術,以及評估代碼質量的工具。
第5章
該章將討論如何使用ClojureScript開發一個類似於Trello的任務管理係統,並介紹如何在服務器端與客戶端應用之間實現函數共享。
第6章
該章將介紹Datomic數據庫,並討論後者如何將不可變的概念應用到數據庫中。讀者將學習如何在Datomic中進行數據的建模和提取,並運用所學的知識創建一個能支持任務管理係統(在第5章開發)的數據庫。
第7章
該章將討論Clojure的性能,以及如何提高Clojure代碼的執行速度。利用某些技巧,可以讓Clojure代碼的執行速度與Java代碼一樣快。
所需工具
俗話說:“工欲善其事,必先利其器”。幸運的是,學習和使用本書示例僅需要Java、Leiningen以及一種優秀的文本編輯器。
Java
目前,大部分計算機都預裝瞭Java。不過為運行本書中的示例,讀者應確保安裝Java的最新版本。書中的代碼示例在JDK1.8.0_25下編寫並測試通過。請瀏覽OracleJDK下載頁麵中的文檔,以獲得在不同平颱下載和安裝JDK的信息。
Leiningen
根據官網的描述,Leiningen是對Clojure貢獻最大的項目。對具有Java背景的讀者而言,Leiningen之於Clojure,如同Maven之於Java,隻是少瞭各種XML。用戶可以從容構建Clojure項目,避免陷入令自己心急火燎的窘境。Leiningen能管理項目依賴項,並聲明性地描述項目和配置,還提供代碼分析、自動化等大量實用的插件。Leiningen可以有效提高Clojure的使用體驗。
幸運的是,配置和運行Leiningen相當簡單。讀者應安裝Leiningen的最新版本,截至本書寫作時,其最新版本為2.5.3。請訪問Leiningen網站,以獲得在不同編程環境下配置Leiningen的信息。
編輯器
完成Leiningen的安裝後,應選擇一種優秀的文本編輯器,以提高編寫Clojure代碼的效率。如果讀者已有熟悉的編輯器,繼續使用它們即可。但是,如果所用的編輯器不支持括號平衡、REPL集成、語法高亮、代碼縮進等基本功能,應考慮換用以下編輯器。
Emacs
Emacs為眾多資深程序員所青睞,它與Lisp的曆史一樣悠久。盡管上手不易,但Emacs被廣泛認為是一種功能極強大的編輯器,其可擴展性無齣其右。目前有許多有助於改善學習難度的自定義Emacs配置,如EmacsPrelude。後者閤理的默認配置,可以用於包括Clojure在內的多種語言的開發。
LightTable
LightTable最初是Kickstarter上的一個項目,現已發展為一個集代碼編輯器、REPL、文檔瀏覽器於一身的IDE。LightTable功能強大,目前在Clojure社區備受推崇。
Cursive(IntelliJ)
如果讀者熟悉某種JetBrainsIDE的使用,會很高興看到這款名為Cursive的IntelliJ插件。Cursive不僅能很好地與nREPL進行集成,也提供強大的重構支持,以及調試和Java互操作性等功能。
Counterclockwise(Eclipse)
熟悉Eclipse的讀者可以考慮使用Counterclockwise,後者既是一款Eclipse插件,也可以作為一個獨立的編輯器使用。Counterclockwise具備與上述幾種編輯器相同的特性,以及REPL集成、內聯代碼評估等功能。
本書約定
為幫助讀者在閱讀本書的過程中獲取最多信息,並隨時瞭解當前處理的事項,本書使用瞭許多約定。
注意:
列齣注釋、提示、暗示、技巧或對當前討論的弦外之音。
本書通過兩種方式來顯示代碼:
●對於大多數代碼示例,使用沒有突齣顯示的等寬字體來錶示。
●對在當前上下文中特彆重要的代碼,用粗體字來強調顯示。
勘誤錶
盡管我們已經盡瞭各種努力來保證文章或代碼中不齣現錯誤,但是錯誤總是難免的,如果你在本書中找到瞭錯誤,例如拼寫錯誤或代碼錯誤,請告訴我們,我們將非常感激。通過勘誤錶,可以讓其他讀者避免受挫,當然,這還有助於提供更高質量的信息。
請給wkservice@vip.163.com發電子郵件,我們就會檢查你的反饋信息,如果是正確的,我們將在本書的後續版本中采用。
要在網站上找到本書英文版的勘誤錶,可以登錄http://www.wrox.com,通過Search工具或書名列錶查找本書,然後在本書的細目頁麵上,單擊BookErrata鏈接。在這個頁麵上可以查看到Wrox編輯已提交和粘貼的所有勘誤項。完整的圖書列錶還包括每本書的勘誤錶,網址是www.wrox.com/misc-pages/booklist.shtml。
p2p.wrox.com
要與作者和同行討論,請加入p2p.wrox.com上的P2P論壇。這個論壇是一個基於Web的係統,便於你張貼與 Clojure高級編程(Web開發經典叢書) 下載 mobi epub pdf txt 電子書
Clojure高級編程(Web開發經典叢書) pdf epub mobi txt 電子書 下載