Ruby程序員修煉之道 第2版 The Well-Grounded Rubyist, 2/e

[美]戴維 A. 布萊克(David A. Black)

  • Ruby程序員修煉之道 第2版-preview-1
  • Ruby程序員修煉之道 第2版-preview-2
Ruby程序員修煉之道 第2版-preview-1

買這商品的人也買了...

商品描述

<內容簡介>

這是一本深受好評的書。它不僅是一本純Ruby的書,也不僅是一本純Rails的書,而是一本為Rails程序員“優化”過的Ruby書。

本書從Ruby編程語言的基礎開始一直講到動態特性,其中包含大量的真實代碼示例並附有詳細的註解,對日常使用Ruby進行編程中會遇到的每個知識點都進行了清晰的講解。本書的內容由淺入深,主要包含Ruby編程語言的語法、面向對象的特性、默認對象self、控制流技術、常用的內置類、正則表達式、I/O操作,最後用大量的篇幅講述了Ruby中最值得關註的動態特性。

<章節目錄>

第一部分Ruby語言基礎
第1章進入Ruby的世界
第2章對象、方法和局部變量
第3章使用類組織對象
第4章模塊和程序組織
第5章默認對象(self)、作用域和可見性
第6章控制流技術
第二部分內置類和模塊
第7章內置要點
第8章字符串、符號和其他標量對象
第9章集合和容器對象
第10章集合類型核心: Enumerable和Enumerator
第11章正則表達式和基於正則表達式的字符串操作
第12章文件和I/O操作
第三部分Ruby動態編程
第13章對象的個性化
第14章可調用和可運行對象
第15章回調、鉤子和運行時自省
歡迎來到異步社區!

作者簡介

David A. Black是国际知名的Ruby开 发者、作家、培训师、演讲者、活动组织者、Ruby Central创办人、Cyrus Innovation首 席顾问。

目錄大綱

目錄

 

第 一部分 Ruby語言基礎

第 1章 進入Ruby的世界 2

1.1 Ruby語言基礎知識 3

1.1.1 Ruby語法生存包 4

1.1.2 多種多樣的Ruby標識符 5

1.1.3 方法調用、消息和Ruby對象 7

1.1.4 編寫和保存一個簡單程序 8

1.1.5 給Ruby提供程序 9

1.1.6 鍵盤和文件I/O 11

1.2 剖析Ruby的安裝 13

1.2.1 Ruby標準庫子目錄(RbConfig::CONFIG[rubylibdir]) 14

1.2.2 C語言擴展目錄(RbConfig::CONFIG[archdir]) 14

1.2.3 site_ruby (RbConfig::CONFIG[sitedir])和vendor_ruby(RbConfig::CONFIG[vendordir])

1.2.4 gems目錄 15

1.3 Ruby擴展和編程庫 15

1.3.1 加載外部文件和擴展 16

1.3.2 加載位於默認加載路徑中的文件 17

1.3.3 請求功能 18

1.3.4 require_relative指令 19

1.4 易用的Ruby工具和應用程序 19

1.4.1 解釋器的命令行開關 20

1.4.2 走近Ruby的交互式解釋器irb 23

1.4.3 ri和RDoc 25

1.4.4 任務管理實用工具:rake 26

1.4.5 使用gem命令安裝組件包 28

1.5 小結 29

第 2章 對象、方法和局部變量 30

2.1 與對象對話 30

2.1.1 Ruby和麵向對象技術 31

2.1.2 創建通用對象 31

2.1.3 帶參數的方法 33

2.1.4 方法的返回值 34

2.2 製作一個對象:一個ticket對象的行為 35

2.2.1 ticket對象,行為優先 35

2.2.2 查詢ticket對象 36

2.2.3 通過字符串插值縮短ticket代碼 37

2.2.4 入場券有效性:用方法表達布爾狀態 37

2.3 對象的原生行為 39

2.3.1 使用object_id方法唯 一標識對象 40

2.3.2 使用respond_to 方法查詢對象的能力 41

2.3.3 使用send方法發送信息給對象 41

2.4 走近方法參數 43

2.4.1 必選參數和可選參數 43

2.4.2 參數的默認值 44

2.4.3 形參和實參的順序 45

2.4.4 實際參數列表的錯誤使用方式 47

2.5 局部變量和變量賦值 48

2.5.1 變量、對象和引用 49

2.5.2 變量賦值和重新賦值中的引用 51

2.5.3 引用和方法參數 52

2.5.4 局部變量及類似的事物 53

2.6 小結 54

第3章 使用類組織對象 55

3.1 類和繼承 56

3.1.1 實例方法 56

3.1.2 覆蓋方法 57

3.1.3 重開類 57

3.2 實例變量和對象狀態 59

3.3 setter方法 62

3.3.1 方法命名中的等號 62

3.3.2 用於賦值風格方法的

語法糖 63

3.3.3 充分使用setter方法 64

3.4 屬性和attr_*方法體系 66

3.4.1 自動創建屬性 66

3.4.2 總結attr_*方法 68

3.5 繼承和Ruby類層級結構 69

3.5.1 單繼承:繼承一個customer 70

3.5.2 對象祖先和永不缺失的聯系:Object類 70

3.5.3 El Viejo的長兄:BasicObject 71

3.6 類作為對象和消息接收者 72

3.6.1 創建類對象 72

3.6.2 類對象如何調用方法 73

3.6.3 單例方法的另一種使用方式 74

3.6.4 編寫一個類方法的時機和原因 75

3.6.5 類方法與實例方法 76

3.7 走近常量 77

3.7.1 常量的基礎應用 77

3.7.2 重賦值與修改常量 78

3.8 Ruby對象的“先天與後天” 79

3.9 小結 81

第4章 模塊和程序組織 82

4.1 模塊創建和基礎應用 82

4.1.1 使用模塊封裝“棧特性” 83

4.1.2 將模塊混合到類中 85

4.1.3 進一步使用模塊 87

4.2 模塊、類和方法查找 89

4.2.1 方法查找的基本原理 89

4.2.2 同名方法的多次定義 92

4.2.3 prepend的工作原理 94

4.2.4 總結方法查找的規則 95

4.2.5 使用super向上追溯方法路徑 96

4.3 method_missing方法 98

4.4 類和模塊的設計與命名 102

4.4.1 混合和繼承 103

4.4.2 內嵌模塊和類 104

4.5 小結 105

第5章 默認對象(self)、作用域和可見性 107

5.1 理解self、當前對象或默認對象 108

5.1.1 轉變為self的對象和上下文 108

5.1.2 頂層的self對象 109

5.1.3 類、模塊和方法定義中的self 110

5.1.4 self作為消息的默認接收者 112

5.1.5 通過self解析實例變量 115

5.2 判定作用域 116

5.2.1 全局作用域和全局變量 116

5.2.2 局部作用域 118

5.2.3 局部作用域和self的相互作用 121

5.2.4 作用域和常量的解析 122

5.2.5 類變量語法、作用域和可見性 124

5.3 部署方法訪問規則 130

5.3.1 私有方法 130

5.3.2 受保護的方法 133

5.4 編寫和使用頂層方法 134

5.4.1 定義一個頂層方法 134

5.4.2 預定義的(內置的)頂層方法 135

5.5 小結 136

第6章 控制流技術 137

6.1 條件代碼執行 137

6.1.1 if和它的朋友們 138

6.1.2 在條件語句主體和測試中的賦值語法 142

6.1.3 case語句 144

6.2 使用循環重復執行 148

6.2.1 在loop方法中無條件地循環 148

6.2.2 使用while和until關鍵字進行條件循環 149

6.2.3 基於值列表循環 151

6.3 迭代器和代碼塊 152

6.3.1 迭代的細節 152

6.3.2 迭代:“家常菜” 152

6.3.3 解析方法調用 153

6.3.4 代碼塊語法:花括號與do/end 154

6.3.5 實現times方法 155

6.3.6 each方法的重要性 156

6.3.7 從each到map 158

6.3.8 代碼塊參數和變量作用域 159

6.4 錯誤處理和異常 162

6.4.1 引發和捕獲異常 162

6.4.2 使用rescue關鍵字輓救程序 163

6.4.3 顯式地引發異常 165

6.4.4 在rescue子句中捕獲異常 165

6.4.5 ensure子句 167

6.4.6 創建自己的異常類 168

6.5 小結 169

第 二部分 內置類和模塊

第7章 內置要點 173

7.1 Ruby的字面構造器 174

7.2 常用的語法糖 175

7.2.1 通過定義方法定義運算符 175

7.2.2 自定義一元運算符 177

7.3 bang(!)方法和“危險” 178

7.3.1 破壞性(接收者改變)影響的危險 178

7.3.2 破壞能力和“危險”相對獨立的不同點 179

7.4 內置和自定義to_*(轉換)方法 180

7.4.1 字符串轉換:to_s 181

7.4.2 使用to_a和*運算符進行數組轉換 183

7.4.3 使用to_i和to_f進行數字轉換 184

7.4.4 角色扮演to_*方法 185

7.5 布爾狀態、布爾對象和nil 187

7.5.1 true和false作為狀態使用 187

7.5.2 true和false作為對象 189

7.5.3 特殊的對象nil 190

7.6 對象比較 191

7.6.1 相等性測試 191

7.6.2 比較和Comparable模塊 192

7.7 審查對象的能力 194

7.7.1 列出對象的方法 194

7.7.2 查詢類和模塊對象 196

7.7.3 過濾和選擇性的方法列表 196

7.8 小結 197

第8章 字符串、符號和其他標 量對象 198

8.1 字符串的使用 198

8.1.1 字符串表示法 199

8.1.2 基礎的字符串操作 202

8.1.3 查詢字符串 206

8.1.4 字符串比較和排序 208

8.1.5 字符串轉換 209

8.1.6 字符串轉型 212

8.1.7 字符串編碼的簡介 213

8.2 符號及其使用 214

8.2.1 符號的主要特點 215

8.2.2 符號和標識符 216

8.2.3 實踐中的符號 217

8.2.4 比較字符串和符號 219

8.3 數值對象 220

8.3.1 數值類 221

8.3.2 執行算術運算 221

8.4 時間和日期 222

8.4.1 實例化日期和時間對象 223

8.4.2 日期對象查詢的方法 225

8.4.3 日期時間格式化的方法 226

8.4.4 日期/時間對象的轉換方法 227

8.5 小結 228

第9章 集合和容器對象 230

9.1 數組和散列的比較 231

9.2 使用數組處理集合 232

9.2.1 創建新數組 232

9.2.2 插入、取回和移除數組的元素 236

9.2.3 數組的合並 238

9.2.4 數組轉換 240

9.2.5 數組查詢 241

9.3 散列 241

9.3.1 創建新的散列 242

9.3.2 插入、取回和移除散列鍵值對 243

9.3.3 指定默認的散列值和行為 245

9.3.4 與其他散列合並 246

9.3.5 散列轉換 247

9.3.6 散列查詢 248

9.3.7 散列用於方法的**終參數 249

9.3.8 回到參數的語法:具名(關鍵字)參數 250

9.4 範圍 251

9.4.1 創建範圍 252

9.4.2 範圍的包含邏輯 253

9.5 集合 255

9.5.1 集合的創建 255

9.5.2 操作集合的元素 256

9.5.3 子集和超集 258

9.6 小結 259

第 10章 集合類型核心:Enumerable和Enumerator 260

10.1 運用each獲得枚舉能力 261

10.2 Enumerable的布爾值查詢 263

10.3 可枚舉對象的搜索和選擇 265

10.3.1 通過find方法進行第 一次 匹配 265

10.3.2 使用find_all(又名select)和reject獲取 所有的匹配元素 266

10.3.3 使用基於三等號匹配的grep來選擇元素 267

10.3.4 使用group_by和partition組織選擇的結果 268

10.4 可枚舉對象的元素級操作 269

10.4.1 first方法 270

10.4.2 take方法和drop方法 271

10.4.3 min方法和max方法 272

10.5 與each相關的方法 273

10.5.1 reverse_each方法 273

10.5.2 each_with_index方法(和each.with_index) 273

10.5.3 each_slice方法和each_cons方法 275

10.5.4 cycle方法 275

10.5.5 使用inject減少可枚舉集合類型對象的數量 276

10.6 map方法 277

10.6.1 map的返回值 278

10.6.2 使用map!原位映射 278

10.7 將字符串作為準可枚舉對象 279

10.8 可枚舉對象的排序 281

10.8.1 在可枚舉對象排序中使用(或不使用)Comparable 模塊 282

10.8.2 使用代碼塊定義排序 邏輯 282

10.8.3 使用sort_by快捷排序 283

10.9 枚舉器和可枚舉性的下一個維度 283

10.9.1 使用代碼塊創建枚舉器 284

10.9.2 附加枚舉器到其他對象 286

10.9.3 無代碼塊迭代器隱式創建 枚舉器 287

10.10 枚舉器的語義和使用 288

10.10.1 枚舉器each方法的運用 288

10.10.2 使用枚舉器保護對象 290

10.10.3 使用枚舉器的細粒度迭代 291

10.10.4 使用枚舉器添加可枚舉性 292

10.11 枚舉器的方法鏈 293

10.11.1 節約使用中間對象 293

10.11.2 使用with_index檢索可枚舉對象 295

10.11.3 使用枚舉器在字符串上執行異或操作 295

10.12 延遲枚舉器 297

10.13 小結 299

第 11章 正則表達式和基於正則表達式的字符串操作 300

11.1 什麽是正則表達式 300

11.2 編寫正則表達式 301

11.2.1 理解模式 301

11.2.2 使用正則表達式的字面構造器執行簡單匹配 302

11.3 構建正則表達式的模式 303

11.3.1 模式中的文字字符 303

11.3.2 點通配符(.) 303

11.3.3 字符類 304

11.4 匹配、子串截取和MatchData 305

11.4.1 分組捕獲 305

11.4.2 匹配成功和失敗 307

11.4.3 獲取捕獲結果的兩種方式 308

11.4.4 其他MatchData的信息 309

11.5 使用量詞、錨點和修飾符微調正則表達式 310

11.5.1 使用量詞約束匹配 310

11.5.2 貪婪的(和非貪婪的)量詞 312

11.5.3 正則表達式的錨點和斷言 314

11.5.4 修飾符 317

11.6 字符串和正則表達式的相互轉換 318

11.6.1 字符串轉換為正則表達式的習語 318

11.6.2 轉換正則表達式為字符串 320

11.7 正則表達式的常用方法 320

11.7.1 String#scan 321

11.7.2 String#split 322

11.7.3 sub/sub!和gsub/gsub! 323

11.7.4 case相等性和grep方法 324

11.8 小結 326

第 12章 文件和I/O操作 327

12.1 Ruby中I/O系統的組成 327

12.1.1 IO類 328

12.1.2 將IO對象用作可枚舉對象 328

12.1.3 STDIN、STDOUT、STDERR 329

12.1.4 關於鍵盤輸入的更多內容 330

12.2 基本文件操作 331

12.2.1 文件讀取基礎 331

12.2.2 基於行的文件讀取 332

12.2.3 基於字節和字符的文件讀取 333

12.2.4 搜索和查詢文件位置 333

12.2.5 使用File的類方法讀取文件 334

12.2.6 寫入文件 335

12.2.7 使用代碼塊限定文件操作的作用域 336

12.2.8 File對象的可枚舉性 337

12.2.9 文件I/O異常和錯誤 338

12.3 查詢IO和File對象 339

12.3.1 從File類和FileTest模塊中獲得信息 339

12.3.2 使File::Stat獲取文件信息 340

12.4 使用Dir類進行目錄操作 341

12.4.1 讀取目錄下的條目 341

12.4.2 目錄操作和查詢 343

12.5 標準庫中的文件處理工具 344

12.5.1 FileUtils模塊 345

12.5.2 Pathname類 346

12.5.3 StringIO類 348

12.5.4 open-uri庫 349

12.6 小結 349

第三部分 Ruby動態編程

第 13章 對象的個性化 353

13.1 單例對象存在的位置:單例類 354

13.1.1 通過單例類雙重決定 355

13.1.2 直接檢查和修改單例類 355

13.1.3 查找路徑中的單例類 357

13.1.4 singleton_class方法 361

13.1.5 深入類方法 361

13.2 修改Ruby核心類和模塊 363

13.2.1 改變核心功能的風險 363

13.2.2 附加修改 368

13.2.3 穿透覆蓋 368

13.2.4 通過extend修改獨立對象 370

13.2.5 使用精化修改核心行為 373

13.3 BasicObject作為祖先類和類 374

13.3.1 使用BasicObject 374

13.3.2 實現BasicObject的子類 376

13.4 小結 378

第 14章 可調用和可運行

對象 379

14.1 基礎的匿名函數:Proc類 380

14.1.1 Proc對象 380

14.1.2 proc和代碼塊以及區別 381

14.1.3 代碼塊與proc相互轉換 382

14.1.4 簡潔的Symbol#to_proc 385

14.1.5 proc作為閉包使用 386

14.1.6 Proc的形式參數和實際參數 388

14.2 使用lambda和->創建函數 389

14.3 將方法作為對象使用 390

14.3.1 捕獲方法對象 391

14.3.2 方法對象的基本原理 391

14.4 eval方法體系 393

14.4.1 使用eval執行任意的字符串 393

14.4.2 eval的危險 394

14.4.3 instance_eval方法 395

14.4.4 使用class_eval(又名module_eval) 397

14.5 使用線程並行執行 398

14.5.1 終止、停止和開啟線程 399

14.5.2 基於線程實現的日期服務器 401

14.5.3 使用套接字和線程編寫聊天服務器 402

14.5.4 線程與變量 404

14.5.5 操作線程鍵 405

14.6 從Ruby內部程序中發出系統命令 408

14.6.1 system方法和反引號 408

14.6.2 通過open和popen3與程序通信 410

14.7 小結 412

第 15章 回調、鉤子和運行時自省 414

15.1 回調和鉤子 414

15.1.1 使用method_missing攔截不可識別的消息 415

15.1.2 捕獲include和prepend操作 418

15.1.3 攔截extend 419

15.1.4 使用Class#inherited攔截繼承事件 421

15.1.5 Module#const_missing方法 422

15.1.6 method_added方法和singleton_method_added方法 422

15.2 攔截針對對象能力的查詢 424

15.2.1 列出對象的非私有方法 424

15.2.2 列出私有和受保護方法 426

15.2.3 獲得類和模塊的實例方法 427

15.2.4 列出對象的單例方法 429

15.3 變量和常量的自省機制 431

15.3.1 列出局部和全局變量 431

15.3.2 列出實例變量 431

15.4 執行追蹤 432

15.4.1 使用caller檢查棧追蹤 432

15.4.2 編寫工具以解析棧追蹤 433

15.5 回調和方法審查的實踐 436

15.5.1 MicroTest的背景: MiniTest 436

15.5.2 說明和實現 MicroTest 439

15.6 小結 441