代碼之髓:編程語言核心概念

代碼之髓:編程語言核心概念
定價:270
NT $ 235
 

內容簡介

作者從編程語言設計的角度出發,圍繞語言中共通或特有的核心概念,通過語言演變過程中的縱向比較和在多門語言中的橫向比較,清晰地呈現了程序設計語言中函數、類型、作用域、類、繼承等核心知識。《代碼之髓:編程語言核心概念》旨在幫助讀者更好地理解各種概念是因何而起,並在此基礎上更好地判斷為何使用、何時使用及怎樣使用。同時,在閱讀本書后,讀者對今后不斷出現的新概念的理解能力也將得到提升。

《代碼之髓:編程語言核心概念》力求簡明、通俗,注重可讀性,可作為大學計算機科學和軟件工程等專業程序設計語言概論教材、計算機等級考試的參考資料,也可作為軟件開發人員的學習參考書。

西尾 泰和(Nishio Hirokazu),24歲取得理學博士學位。2007年起在Cybozu實驗室從事提高知識生產力的軟件開發工作。曾擔任「2011年全日本安全與程序設計實戰集訓」程序設計語言組組長。特別關注編程語言的多樣性及發展。著作有《Jython語言程序設計》《程序員應該了解的程序設計基礎知識》《WEB+DB PRESS》(第60期特輯)等。
 

目錄

第1章 如何深入高效地學習語言 1
1.1 在比較中學習 2
語言不同,規則不同 2
C語言和Ruby語言中的真假值 3
Java語言中的真假值 3
1.2 在歷史中學習 4
理解語言設計者的意圖 4
應該學哪種語言,我們無從所知 4
學習適用於各種語言的知識 5
1.3 小結 6

第2章 程序設計語言誕生史 7
2.1 程序設計語言誕生的歷史 8
連接電纜 8
程序內置 9
FORTRAN語言問世 10
2.2 程序設計語言產生的原因 11
懶惰:程序員的三大美德之一 11
語言們各有各的便捷 12
2.3 小結 13

第3章 語法的誕生 15
3.1 什麼是語法 16
運算符的優先順序 16
語法是語言設計者制定的規則 17
3.2 棧機器和FORTH語言 17
計算的流程 18
如何表達計算順序 18
現在仍然使用的棧機器 19
3.3 語法樹和LISP語言 20
計算流 20
如何表達計算順序 20
現在仍然使用的語法樹 21
專欄 要確認理解是否正確,首先得表達出來 23
3.4 中綴表示法 24
語法分析器 24
規則的競爭 25
專欄 當你不知道該學習什麼時 25
3.5 小結 26

第4章 程序的流程控制 27
4.1 結構化程序設計的誕生 28
4.2 if語句誕生以前 28
為什麼會有if語句 28
為什麼會有if...else語句 30
4.3 while語句——讓反復執行的if語句更簡潔 33
使用while語句的表達方式 33
不使用while語句的表達方式 34
4.4 for語句——讓數值漸增的while語句更簡潔 35
使用for語句的表達方式 35
不使用for語句的表達方式 35
foreach——根據處理的對象來控制循環操作 36
4.5 小結 37

第5章 函數 39
5.1 函數的作用 40
便於理解——如同一個組織 40
便於再利用——如同零部件 41
程序中再利用的特征 41
5.2 返回命令 42
函數的誕生 43
記錄跳轉目的地的專用內存 44
專欄 函數命名 45
棧 45
5.3 遞歸調用 47
嵌套結構體的高效處理 48
嵌套結構體的處理方法 48
5.4 小結 52

第6章 錯誤處理 53
6.1 程序也會出錯 54
6.2 如何傳達錯誤 55
通過返回值傳達出錯信息 55
出錯則跳轉 58
6.3 將可能出錯的代碼括起來的語句結構 61
John Goodenough 的觀點 61
引入CLU語言 62
引入C++語言 62
引入Windows NT 3.163
6.4 出口只要一個 64
為什麼引入finally 64
成對操作的無遺漏執行 64
6.5 何時拋出異常 68
函數調用時參數不足的情況 68
數組越界的情況 69
出錯后就要立刻拋出異常 70
6.6 異常傳遞 71
異常傳遞的問題 71
Java語言的檢查型異常 71
檢查型異常沒有得到普及的原因 73
專欄 具體的知識和抽象的知識 73
專欄 學習講求細嚼慢咽 74
6.7 小結 74

專欄 從需要的地方開始閱讀 75
第7章 名字和作用域 77
7.1 為什麼要取名 78
怎樣取名 79
名字沖突 80
如何避免沖突 80
7.2 作用域的演變 81
動態作用域 82
靜態作用域 84
7.3 靜態作用域是完美的嗎 88
專欄 其他語言中的作用域 88
嵌套函數的問題 89
外部作用域的再綁定問題 91
7.4 小結 93

第8章 類型 95
8.1 什麼是類型 96
8.2 數值的on和off的表達方式 97
數位的發明 97
七段數碼管顯示器 98
算盤 99
8.3 一個數位上需要幾盞燈泡 100
從十進制到二進制 100
八進制與十六進制 102
8.4 如何表達實數 103
定點數——小數點位置確定 103
浮點數——數值本身包含小數部分何處開始的信息 104
8.5 為什麼會出現類型 107
沒有類型帶來的麻煩 107
早期的FORTRAN語言中的類型 108
告訴處理器變量的類型 108
隱性類型轉換 109
8.6 類型的各種展開 111
用戶定義型和面向對象 112
作為功能的類型 112
總稱型、泛型和模板 113
動態類型 116
類型推斷 118
8.7 小結 122
專欄 先掌握概要再閱讀細節 122

第9章 容器和字符串 125
9.1 容器種類多樣 126
9.2 為什麼存在不同種類的容器 127
數組與鏈表 127
鏈表的長處與短處 130
專欄 大O表示法——簡潔地表達計算時間和數據量之間的關系 131
語言的差異 132
9.3 字典、散列、關聯數組 132
散列表 133
樹 134
元素的讀取時間 136
沒有萬能的容器 138
9.4 什麼是字符 139
字符集和字符的編碼方式 139
計算機誕生以前的編碼 140
EDSAC的字符編碼 142
ASCII時代和EBCDIC時代 142
日語的編碼 144
Shift_JIS編碼對程序的破壞 145
魔術注釋符 147
Unicode帶來了統一 148
9.5 什麼是字符串 150
帶有長度信息的Pascal語言字符串和不帶這一信息的C語言字符串 150
1個字符為16比特的Java語言字符串 153
Python 3中引入的設計變更 153
Ruby 1.9的挑戰 154
9.6 小結 155

第10章 並行處理 157
10.1 什麼是並行處理 158
10.2 細分后再執行 158
10.3 交替的兩種方法 159
協作式多任務模式——在合適的節點交替 159
搶占式多任務模式——一定時間后進行交替 160
10.4 如何避免競態條件 160
競態條件成立的三個條件 161
沒有共享——進程和actor模型 162
不修改——const、val、Immutable 164
不介入 164
10.5 鎖的問題及對策 166
鎖的問題 166
借助事務內存來解決 167
事務內存的歷史 168
事務內存成功嗎 169
10.6 小結 170

第11章 對象與類 171
11.1 什麼是面向對象 172
內涵因語言而異的面向對象 172
對象是現實世界的模型 174
什麼是類 175
11.2 歸集變量與函數建立模型的方法 175
11.3 方法1:模塊、包 176
什麼是模塊、包 176
用Perl語言的包設計對象 177
光有模塊不夠用 178
分開保存數據 179
向參數傳遞不同的散列 179
把初始化處理也放入包中 180
把散列和包綁定在一起 181
11.4 方法2:把函數也放入散列中 183
first class 183
把函數放入散列中 184
創建多個計數器 185
把共享的屬性放入原型中 186
這就是面向對象嗎 189
11.5 方法3:閉包 190
什麼是閉包 190
為什麼叫做閉包 191
11.6 方法4:類 191
霍爾設想的類 192
C++語言中的類 192
功能說明的作用 193
類的三大作用 193
11.7 小結 194

第12章 繼承與代碼再利用 195
12.1 什麼是繼承 196
繼承的不同實現策略 197
繼承是把雙刃劍 199
里氏置換原則 199
12.2 多重繼承 201
一種事物在多個分類中 201
多重繼承對於實現方式再利用非常便利 202
12.3 多重繼承的問題——還是有沖突 203
解決方法1:禁止多重繼承 205
解決方法2:按順序進行搜索 207
解決方法3:混入式處理 211
解決方法4:Trait 213
12.4 小結 216

專欄 從頭開始逐章手抄 217
網路書店 類別 折扣 價格
  1. 新書
    87
    $235