斯坦福程序設(shè)計(jì)入門課:JavaScript實(shí)現(xiàn)
定 價(jià):119 元
- 作者:[美]埃里克·S.羅伯茨 (Eric S.Roberts)
- 出版時(shí)間:2021/1/1
- ISBN:9787111669425
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP311.1-49
- 頁碼:388
- 紙張:
- 版次:
- 開本:16開
本書通過使用一門叫JavaScript的語言,教會(huì)你如何編寫程序,引導(dǎo)你走上奇妙的計(jì)算機(jī)科學(xué)的旅程。JavaScript語言是基于Web的應(yīng)用程序的核心語言。書中所有示例代碼都可以在任何瀏覽器上運(yùn)行,包括你手機(jī)上的瀏覽器。雖然本書是使用JavaScript來演示,然而,更重要的是,本書著重講解的是編程基本原則,其中的道理可以用在任何其他語言中。本書旨在用于大學(xué)課程中的第一門編程課。它覆蓋了傳統(tǒng)計(jì)算機(jī)科學(xué)首門課程(通常稱為CS1)的所有內(nèi)容。
譯者序
寫給學(xué)生的話
寫給教師的話
致 謝
第1章 輕松入門 …… 1
1.1 Karel介紹 …… 2
1.1.1 Karel的編程 …… 2
1.1.2 Karel的世界 …… 3
1.1.3 Karel的內(nèi)置函數(shù) …… 3
1.2 教Karel解決問題 …… 4
1.2.1 開始起步 …… 4
1.2.2 定義函數(shù) …… 5
1.2.3 完善程序 …… 6
1.2.4 使用庫函數(shù) …… 7
1.2.5 分解策略 …… 7
1.3 控制語句 …… 9
1.3.1 條件語句 …… 9
1.3.2 循環(huán)語句 …… 11
1.3.3 解決通用問題 …… 13
1.4 逐步求精法 …… 15
1.4.1 一個(gè)逐步求精法的練習(xí) …… 15
1.4.2 自上而下設(shè)計(jì)的原則 …… 15
1.4.3 求精第一個(gè)子問題 …… 16
1.4.4 編寫下一層代碼 …… 17
1.4.5 完成 …… 18
1.5 Karel世界里的算法 …… 19
總結(jié) …… 20
復(fù)習(xí)題 …… 22
練習(xí)題 …… 22
第2章 JavaScript簡(jiǎn)介 …… 34
2.1 數(shù)據(jù)和類型 …… 35
2.2 數(shù)值數(shù)據(jù) …… 35
2.2.1 JavaScript中數(shù)字的表示 …… 36
2.2.2 算術(shù)表達(dá)式 …… 36
2.2.3 優(yōu)先級(jí) …… 38
2.3 變量 …… 38
2.3.1 變量聲明 …… 39
2.3.2 賦值 …… 39
2.3.3 自增和自減操作符 …… 40
2.3.4 命名約定 …… 41
2.3.5 常量 …… 41
2.3.6 順序計(jì)算 …… 42
2.4 函數(shù) …… 42
2.4.1 用JavaScript實(shí)現(xiàn)函數(shù) …… 43
2.4.2 庫函數(shù) …… 45
2.5 字符串?dāng)?shù)據(jù) …… 46
2.5.1 字符串操作 …… 47
2.5.2 編寫簡(jiǎn)單的字符串函數(shù) …… 48
2.6 在瀏覽器中運(yùn)行JavaScript …… 49
2.6.1 “Hello World”程序 …… 49
2.6.2 JavaScript和Web …… 51
2.6.3 JavaScript程序的HTML模板 …… 51
2.7 測(cè)試和調(diào)試 …… 53
2.7.1 防御式編程 …… 54
2.7.2 成為一名優(yōu)秀的調(diào)試者 …… 54
2.7.3 編程的各個(gè)階段 …… 54
2.7.4 心理障礙的一個(gè)例子 …… 57
2.7.5 編寫有效的測(cè)試程序 …… 58
2.8 軟件維護(hù) …… 60
總結(jié) …… 61
復(fù)習(xí)題 …… 63
練習(xí)題 …… 65
第3章 控制語句 …… 68
3.1 布爾數(shù)據(jù) …… 69
3.1.1 關(guān)系操作符 …… 69
3.1.2 邏輯操作符 …… 70
3.1.3 短路求值 …… 72
3.2 if語句 …… 73
3.2.1 if語句的其他形式 …… 74
3.2.2 “?:”操作符 …… 75
3.3 switch語句 …… 76
3.4 while語句 …… 78
3.5 for語句 …… 81
3.5.1 for和while的關(guān)系 …… 84
3.5.2 嵌套的for語句 …… 84
3.6 算法編程 …… 86
3.6.1 早期的平方根算法 …… 87
3.6.2 尋找最大的公約數(shù) …… 89
3.6.3 歐幾里得算法 …… 90
3.7 避免使用模糊的真假值 …… 92
總結(jié) …… 93
復(fù)習(xí)題 …… 94
練習(xí)題 …… 95
第4章 簡(jiǎn)單圖形 …… 100
4.1 圖形版“Hello World” …… 101
4.2 類、對(duì)象和方法 …… 102
4.2.1 創(chuàng)建對(duì)象 …… 102
4.2.2 向?qū)ο蟀l(fā)送消息 …… 103
4.2.3 引用 …… 104
4.2.4 封裝 …… 105
4.3 圖形對(duì)象 …… 105
4.3.1 GRect類 …… 105
4.3.2 GOval類 …… 108
4.3.3 GLine類 …… 109
4.3.4 GLabel類 …… 109
4.4 圖形窗口 …… 114
4.5 創(chuàng)建圖形化應(yīng)用程序 …… 115
4.5.1 指定坐標(biāo)和大小 …… 115
4.5.2 使用簡(jiǎn)單的分解策略 …… 117
4.5.3 在圖形應(yīng)用程序中使用控制語句 …… 119
4.5.4 返回圖形對(duì)象的函數(shù) …… 121
總結(jié) …… 122
復(fù)習(xí)題 …… 123
練習(xí)題 …… 124
第5章 函數(shù) …… 132
5.1 快速回顧函數(shù) …… 133
5.1.1 函數(shù)定義的語法 …… 133
5.1.2 傳遞參數(shù) …… 134
5.1.3 可選參數(shù) …… 134
5.1.4 謂詞函數(shù) …… 135
5.2 程序庫 …… 136
5.2.1 創(chuàng)建自己的程序庫 …… 136
5.2.2 信息隱藏原則 …… 137
5.2.3 接口概念 …… 138
5.3 一個(gè)支持隨機(jī)選擇的程序庫 …… 138
5.3.1 設(shè)計(jì)RandomLib.js庫的接口 …… 139
5.3.2 實(shí)現(xiàn)RandomLib.js庫 …… 140
5.3.3 使用RandomLib.js庫 …… 142
5.4 函數(shù)調(diào)用的機(jī)制 …… 144
5.4.1 調(diào)用函數(shù)的步驟 …… 144
5.4.2 組合函數(shù) …… 145
5.4.3 跟蹤組合函數(shù) …… 146
5.5 遞歸函數(shù) …… 149
5.5.1 fact的遞歸公式 …… 149
5.5.2?跟蹤遞歸過程 …… 150
5.5.3 遞歸的信仰之躍 …… 153
5.5.4 斐波那契函數(shù) …… 153
5.5.5 計(jì)算斐波那契序列中的項(xiàng) …… 154
5.5.6 在遞歸實(shí)現(xiàn)中獲得信心 …… 155
5.5.7 遞歸實(shí)現(xiàn)的效率 …… 155
總結(jié) …… 158
復(fù)習(xí)題 …… 159
練習(xí)題 …… 160
第6章 編寫交互式程序 …… 164
6.1 一等函數(shù) …… 165
6.1.1 將函數(shù)聲明為數(shù)據(jù)值 …… 165
6.1.2 傳遞函數(shù)作為參數(shù) …… 166
6.2 一個(gè)簡(jiǎn)單的交互式示例 …… 167
6.3 控制對(duì)象的屬性 …… 169
6.4 響應(yīng)鼠標(biāo)事件 …… 170
6.4.1 簡(jiǎn)單的畫線程序 …… 171
6.4.2 在畫布上拖動(dòng)對(duì)象 …… 173
6.5 基于計(jì)時(shí)器的動(dòng)畫 …… 175
6.5.1 setTimeout和setInterval函數(shù) …… 175
6.5.2 動(dòng)畫的簡(jiǎn)單示例 …… 176
6.5.3 跟蹤動(dòng)畫的狀態(tài) …… 177
6.6 擴(kuò)展圖形庫 …… 179
6.6.1 GArc類 …… 179
6.6.2 GPolygon類 …… 181
6.6.3 GCompound類 …… 184
總結(jié) …… 186
復(fù)習(xí)題 …… 188
練習(xí)題 …… 189
第7章 字符串 …… 197
7.1 二進(jìn)制表示法 …… 198
7.1.1 二進(jìn)制記數(shù)法 …… 198
7.1.2 將整數(shù)存儲(chǔ)為位序列 …… 199
7.1.3 十六進(jìn)制記數(shù)法 …… 200
7.1.4 表示非數(shù)值數(shù)據(jù) …… 201
7.1.5 表示字符 …… 202
7.2 字符串操作 …… 203
7.2.1 確定字符串的長(zhǎng)度 …… 205
7.2.2 從字符串中選擇字符 …… 205
7.2.3 提取字符串的一部分 …… 206
7.2.4 在字符串中搜索 …… 206
7.2.5 大小寫轉(zhuǎn)換 …… 207
7.2.6 startsWith、endsWith和trim方法 …… 207
7.2.7 數(shù)字和字符串之間的轉(zhuǎn)換 …… 208
7.3 字符分類 …… 209
7.4 字符串常見的代碼模式 …… 210
7.4.1 遍歷字符串中的字符 …… 210
7.4.2 拼接字符串 …… 211
7.4.3 遍歷和拼接的組合模式 …… 212
7.5 字符串應(yīng)用程序 …… 212
7.5.1 檢查回文 …… 212
7.5.2 生成縮寫詞 …… 213
7.5.3 將英語翻譯成Pig Latin …… 214
7.5.4 實(shí)現(xiàn)簡(jiǎn)單的密碼 …… 216
7.6 從控制臺(tái)讀取數(shù)據(jù) …… 218
總結(jié) …… 220
復(fù)習(xí)題 …… 221
練習(xí)題 …… 222
第8章 數(shù)組 …… 229
8.1 數(shù)組介紹 …… 230
8.1.1 JavaScript數(shù)組表示法 …… 230
8.1.2 數(shù)組的元素選擇 …… 231
8.1.3 數(shù)組作為引用傳遞 …… 233
8.1.4 訪問數(shù)組邊界之外的元素 …… 234
8.2 數(shù)組操作 …… 235
8.2.1 添加和移除數(shù)組元素 …… 236
8.2.2 重新給數(shù)組元素排序的方法 …… 239
8.2.3 字符串和數(shù)組互相轉(zhuǎn)換 …… 240
8.2.4 ArrayLib.js庫 …… 241
8.3 使用數(shù)組制表 …… 242
8.4 從文件中讀取文本 …… 245
8.5 多維數(shù)組 …… 246
8.6 圖像處理 …… 247
8.6.1 GImage類 …… 247
8.6.2 確定圖像的屬性 …… 248
8.6.3 圖像的表示 …… 250
8.6.4 使用GImage類操作圖像 …… 250
總結(jié) …… 254
復(fù)習(xí)題 …… 254
練習(xí)題 …… 256
第9章 對(duì)象 …… 261
9.1 JavaScript里的對(duì)象 …… 262
9.1.1 對(duì)象用作記錄 …… 262
9.1.2 創(chuàng)建對(duì)象 …… 263
9.1.3 選擇屬性 …… 263
9.1.4 JavaScript對(duì)象表示法 …… 264
9.2 把對(duì)象當(dāng)作映射來使用 …… 264
9.2.1 機(jī)場(chǎng)編碼映射為城市名稱 …… 265
9.2.2 初始化一個(gè)映射 …… 265
9.2.3 遍歷映射中的鍵 …… 266
9.3 點(diǎn)的表示 …… 267
9.3.1 創(chuàng)建點(diǎn)的策略 …… 268
9.3.2 給Point對(duì)象添加方法 …… 269
9.3.3 toString方法 …… 270
9.3.4 在程序里面使用點(diǎn) …… 272
9.4 有理數(shù)的表示 …… 274
9.4.1 定義新類的一般策略 …… 275
9.4.2 站在客戶端視角 …… 276
9.4.3 指定Rational類的私有狀態(tài) …… 276
9.4.4 為Rational類定義工廠方法 …… 276
9.4.5 為Rational類定義方法 …… 277
9.4.6 實(shí)現(xiàn)Rational類 …… 278
9.4.7 定義類方法 …… 280
9.5 把對(duì)象連接起來 …… 280
總結(jié) …… 283
復(fù)習(xí)題 …… 284
練習(xí)題 …… 285
第10章 設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu) …… 289
10.1 抽象數(shù)據(jù)類型 …… 289
10.2 實(shí)現(xiàn)token掃描器 …… 290
10.2.1 客戶端想從token掃描器中得到什么 …… 290
10.2.2 JSTokenScanner類 …… 294
10.3 效率和表示 …… 296
10.3.1 在不使用封裝的情況下實(shí)現(xiàn)詞匯表 …… 296
10.3.2 基于數(shù)組的封裝實(shí)現(xiàn) …… 297
10.3.3 效率的實(shí)證測(cè)量 …… 298
10.3.4 使用映射實(shí)現(xiàn)詞匯表 …… 299算法 …… 301
10.3.6 分治算法 …… 304
10.4 表示真實(shí)世界的數(shù)據(jù) …… 305
總結(jié) …… 310
復(fù)習(xí)題 …… 310
練習(xí)題 …… 311
第11章 繼承 …… 319
11.1 類層次結(jié)構(gòu) …… 320
11.2 定義雇員的類層次結(jié)構(gòu) …… 322
11.3 擴(kuò)展圖形類 …… 325
11.3.1 擴(kuò)展GPolygon類 …… 326
11.3.2 擴(kuò)展GCompound類 …… 327
11.4 分解和繼承 …… 328
11.5 繼承的替代方案 …… 332
總結(jié) …… 333
復(fù)習(xí)題 …… 333
練習(xí)題 …… 334
第12章 JavaScript與Web …… 341
12.1 一個(gè)簡(jiǎn)單的交互式示例 …… 342
12.2 HTML概覽 …… 343
12.2.1 在Web頁面中展示文本 …… 345
12.2.2 顯示圖片 …… 347
12.2.3 超鏈接 …… 348
12.3 使用CSS …… 350
12.3.1 CSS聲明 …… 350
12.3.2 為元素指定樣式 …… 352
12.3.3 設(shè)置外邊距、邊框、內(nèi)邊距和大小 …… 353
12.4 連接JavaScript和HTML …… 355
12.4.1 文檔對(duì)象模型 …… 355
12.4.2 給HTML元素添加事件監(jiān)聽器 …… 357
12.4.3 可折疊列表 …… 359
12.5 將數(shù)據(jù)存儲(chǔ)在index.html文件中 …… 363
12.5.1 使用XML表示數(shù)據(jù) …… 364
12.5.2 打造一個(gè)教學(xué)機(jī) …… 364
12.5.3 更改應(yīng)用程序領(lǐng)域 …… 368
總結(jié) …… 369
復(fù)習(xí)題 …… 370
練習(xí)題 …… 371