首页>参考读物>计算机科学与技术>软件与程序设计

斯坦福程序设计入门课:JavaScript实现
作者 : [美]埃里克·S. 罗伯茨 (Eric S. Roberts) 著
译者 : 编程思考者团队 译
出版日期 : 2020-11-25
ISBN : 978-7-111-66942-5
定价 : 119.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 386
开本 : 16
原书名 : Introduction to JavaScript Programming: The
原出版社: Pearson Education Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书通过使用一门叫JavaScript的语言,教会你如何编写程序,引导你走上奇妙的计算机科学的旅程。JavaScript语言是基于Web的应用程序的核心语言。书中所有示例代码都可以在任何浏览器上运行,包括你手机上的浏览器。虽然本书是使用JavaScript来演示,然而,更重要的是,本书着重讲解的是编程基本原则,其中的道理可以用在任何其他语言中。本书旨在用于大学课程中的第一门编程课。它覆盖了传统计算机科学首门课程(通常称为CS1)的所有内容。

图书特色

计算机科学之旅不可或缺的基础知识
人人都能掌握的第一部程序设计指南

上架指导

计算机\程序设计

封底文字

本书是由Eric S. Roberts新编写的一本教材,面向没有编程经验及相关基础知识的学生,旨在通过JavaScript教授学生理解编程的基本概念。本书借鉴了许多优秀教师的教学经验,比如Richard Pattis采用的Karel机器人沉浸式教学法、Douglas Crockford推荐的编程指南,并采用富有逻辑的、循序渐进的组织方式,向学生展示学习其他编码语言或从事计算机编程工作所需的基本技能。通过阅读本书,学生能提高自己的编程技能,并开发出在线的、交互式的Web应用程序——这些应用程序能真正在Web浏览器上运行,提供让人满意的即时反馈。本书还在每章的开头都介绍了一位为计算机科学的发展做出杰出贡献的人物,而且每章都有配套的用于学生自测的复习题和用于教师测验的练习题,并在本书配套的网站提供教学资源支持。

译者序

本书是斯坦福大学计算机科学首门编程课程的教材。从书名可以看出,本书采用JavaScript编程语言来讲授如何编写程序。JavaScript语言是浏览器的内置语言,其地位和流行程度不言而喻。可以说,不需要安装其他软件,只要有浏览器,任何人都可以轻松地学习编程。
深入浅出是本书的一大亮点。本书章节设置循序渐进,层次合理,不像同类书籍那样,读不了几章就给人一种强烈的“劝退感”。本书非常方便读者轻松阅读,可以帮助他们掌握编程的方法和基本原则。
颇具趣味性是本书的另一亮点。每章开篇都会介绍计算机科学史上的一位重要人物,这一点在同类书籍中很少见到。每章中的案例和练习题所涉及的主题和来源也丰富多彩,在颇具趣味性的同时让人大开眼界。通过本书,译者团队也对西方文化有了更多的了解。
书中涉及的编程知识面比较广,帮助读者在轻松阅读的同时,逐步窥见编程领域的全貌,也为后续更深入地学习相关知识做了很好的铺垫。在翻译本书的过程中,我们团队成员时常发出类似这样的感慨:“如果在我当初学编程的时候,学校能使用这样的教材该有多好啊!”
十分感谢机械工业出版社华章分社的关敏和闫南两位老师把本书交给我们团队来翻译,也很感谢本书的责任编辑李美莹老师。
因为是团队协作翻译,这里介绍一下参与本书翻译工作的团队人员及具体分工。编程思考者团队参与本次翻译工作的成员共10人:钱昱、老姚、Dendoink、桃翁、小生方勤、李世奇、yck、浪里行舟、陈大鱼头和石小阳。其中,钱昱负责文前和第9章的翻译;老姚负责第1章、第4章和第11章的翻译;Dendoink负责第2章和第3章的翻译;桃翁负责第5章的翻译;小生方勤负责第6章的翻译;李世奇负责第7章的翻译;yck负责第8章的翻译;浪里行舟负责第10章的翻译;陈大鱼头负责第12章的翻译;石小阳负责全部章节的审校工作。另外,钱昱和老姚负责全书协调统一以保证整体质量。
更详细的说明和译者介绍可参见https://github.com/programmingthinkers/public。
限于译者水平,译文中难免出现疏漏和错误,欢迎大家批评指正。
编程思考者团队
2020年8月

图书目录

译者序
写给学生的话
写给教师的话
致 谢
第1章 轻松入门 …… 1
1.1 Karel介绍 …… 2
1.1.1 Karel的编程 …… 2
1.1.2 Karel的世界 …… 3
1.1.3 Karel的内置函数 …… 3
1.2 教Karel解决问题 …… 4
1.2.1 开始起步 …… 4
1.2.2 定义函数 …… 5
1.2.3 完善程序 …… 6
1.2.4 使用库函数 …… 7
1.2.5 分解策略 …… 7
1.3 控制语句 …… 9
1.3.1 条件语句 …… 9
1.3.2 循环语句 …… 11
1.3.3 解决通用问题 …… 13
1.4 逐步求精法 …… 15
1.4.1 一个逐步求精法的练习 …… 15
1.4.2 自上而下设计的原则 …… 15
1.4.3 求精第一个子问题 …… 16
1.4.4 编写下一层代码 …… 17
1.4.5 完成 …… 18
1.5 Karel世界里的算法 …… 19
总结 …… 20
复习题 …… 22
练习题 …… 22
第2章 JavaScript简介 …… 34
2.1 数据和类型 …… 35
2.2 数值数据 …… 35
2.2.1 JavaScript中数字的表示 …… 36
2.2.2 算术表达式 …… 36
2.2.3 优先级 …… 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 顺序计算 …… 42
2.4 函数 …… 42
2.4.1 用JavaScript实现函数 …… 43
2.4.2 库函数 …… 45
2.5 字符串数据 …… 46
2.5.1 字符串操作 …… 47
2.5.2 编写简单的字符串函数 …… 48
2.6 在浏览器中运行JavaScript …… 49
2.6.1 “Hello World”程序 …… 49
2.6.2 JavaScript和Web …… 51
2.6.3 JavaScript程序的HTML模板 …… 51
2.7 测试和调试 …… 53
2.7.1 防御式编程 …… 54
2.7.2 成为一名优秀的调试者 …… 54
2.7.3 编程的各个阶段 …… 54
2.7.4 心理障碍的一个例子 …… 57
2.7.5 编写有效的测试程序 …… 58
2.8 软件维护 …… 60
总结 …… 61
复习题 …… 63
练习题 …… 65
第3章 控制语句 …… 68
3.1 布尔数据 …… 69
3.1.1 关系操作符 …… 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的关系 …… 84
3.5.2 嵌套的for语句 …… 84
3.6 算法编程 …… 86
3.6.1 早期的平方根算法 …… 87
3.6.2 寻找最大的公约数 …… 89
3.6.3 欧几里得算法 …… 90
3.7 避免使用模糊的真假值 …… 92
总结 …… 93
复习题 …… 94
练习题 …… 95
第4章 简单图形 …… 100
4.1 图形版“Hello World” …… 101
4.2 类、对象和方法 …… 102
4.2.1 创建对象 …… 102
4.2.2 向对象发送消息 …… 103
4.2.3 引用 …… 104
4.2.4 封装 …… 105
4.3 图形对象 …… 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 创建图形化应用程序 …… 115
4.5.1 指定坐标和大小 …… 115
4.5.2 使用简单的分解策略 …… 117
4.5.3 在图形应用程序中使用控制语句 …… 119
4.5.4 返回图形对象的函数 …… 121
总结 …… 122
复习题 …… 123
练习题 …… 124
第5章 函数 …… 132
5.1 快速回顾函数 …… 133
5.1.1 函数定义的语法 …… 133
5.1.2 传递参数 …… 134
5.1.3 可选参数 …… 134
5.1.4 谓词函数 …… 135
5.2 程序库 …… 136
5.2.1 创建自己的程序库 …… 136
5.2.2 信息隐藏原则 …… 137
5.2.3 接口概念 …… 138
5.3 一个支持随机选择的程序库 …… 138
5.3.1 设计RandomLib.js库的接口 …… 139
5.3.2 实现RandomLib.js库 …… 140
5.3.3 使用RandomLib.js库 …… 142
5.4 函数调用的机制 …… 144
5.4.1 调用函数的步骤 …… 144
5.4.2 组合函数 …… 145
5.4.3 跟踪组合函数 …… 146
5.5 递归函数 …… 149
5.5.1 fact的递归公式 …… 149
5.5.2?跟踪递归过程 …… 150
5.5.3 递归的信仰之跃 …… 153
5.5.4 斐波那契函数 …… 153
5.5.5 计算斐波那契序列中的项 …… 154
5.5.6 在递归实现中获得信心 …… 155
5.5.7 递归实现的效率 …… 155
总结 …… 158
复习题 …… 159
练习题 …… 160
第6章 编写交互式程序 …… 164
6.1 一等函数 …… 165
6.1.1 将函数声明为数据值 …… 165
6.1.2 传递函数作为参数 …… 166
6.2 一个简单的交互式示例 …… 167
6.3 控制对象的属性 …… 169
6.4 响应鼠标事件 …… 170
6.4.1 简单的画线程序 …… 171
6.4.2 在画布上拖动对象 …… 173
6.5 基于计时器的动画 …… 175
6.5.1 setTimeout和setInterval函数 …… 175
6.5.2 动画的简单示例 …… 176
6.5.3 跟踪动画的状态 …… 177
6.6 扩展图形库 …… 179
6.6.1 GArc类 …… 179
6.6.2 GPolygon类 …… 181
6.6.3 GCompound类 …… 184
总结 …… 186
复习题 …… 188
练习题 …… 189
第7章 字符串 …… 197
7.1 二进制表示法 …… 198
7.1.1 二进制记数法 …… 198
7.1.2 将整数存储为位序列 …… 199
7.1.3 十六进制记数法 …… 200
7.1.4 表示非数值数据 …… 201
7.1.5 表示字符 …… 202
7.2 字符串操作 …… 203
7.2.1 确定字符串的长度 …… 205
7.2.2 从字符串中选择字符 …… 205
7.2.3 提取字符串的一部分 …… 206
7.2.4 在字符串中搜索 …… 206
7.2.5 大小写转换 …… 207
7.2.6 startsWith、endsWith和trim方法 …… 207
7.2.7 数字和字符串之间的转换 …… 208
7.3 字符分类 …… 209
7.4 字符串常见的代码模式 …… 210
7.4.1 遍历字符串中的字符 …… 210
7.4.2 拼接字符串 …… 211
7.4.3 遍历和拼接的组合模式 …… 212
7.5 字符串应用程序 …… 212
7.5.1 检查回文 …… 212
7.5.2 生成缩写词 …… 213
7.5.3 将英语翻译成Pig Latin …… 214
7.5.4 实现简单的密码 …… 216
7.6 从控制台读取数据 …… 218
总结 …… 220
复习题 …… 221
练习题 …… 222
第8章 数组 …… 229
8.1 数组介绍 …… 230
8.1.1 JavaScript数组表示法 …… 230
8.1.2 数组的元素选择 …… 231
8.1.3 数组作为引用传递 …… 233
8.1.4 访问数组边界之外的元素 …… 234
8.2 数组操作 …… 235
8.2.1 添加和移除数组元素 …… 236
8.2.2 重新给数组元素排序的方法 …… 239
8.2.3 字符串和数组互相转换 …… 240
8.2.4 ArrayLib.js库 …… 241
8.3 使用数组制表 …… 242
8.4 从文件中读取文本 …… 245
8.5 多维数组 …… 246
8.6 图像处理 …… 247
8.6.1 GImage类 …… 247
8.6.2 确定图像的属性 …… 248
8.6.3 图像的表示 …… 250
8.6.4 使用GImage类操作图像 …… 250
总结 …… 254
复习题 …… 254
练习题 …… 256
第9章 对象 …… 261
9.1 JavaScript里的对象 …… 262
9.1.1 对象用作记录 …… 262
9.1.2 创建对象 …… 263
9.1.3 选择属性 …… 263
9.1.4 JavaScript对象表示法 …… 264
9.2 把对象当作映射来使用 …… 264
9.2.1 机场编码映射为城市名称 …… 265
9.2.2 初始化一个映射 …… 265
9.2.3 遍历映射中的键 …… 266
9.3 点的表示 …… 267
9.3.1 创建点的策略 …… 268
9.3.2 给Point对象添加方法 …… 269
9.3.3 toString方法 …… 270
9.3.4 在程序里面使用点 …… 272
9.4 有理数的表示 …… 274
9.4.1 定义新类的一般策略 …… 275
9.4.2 站在客户端视角 …… 276
9.4.3 指定Rational类的私有状态 …… 276
9.4.4 为Rational类定义工厂方法 …… 276
9.4.5 为Rational类定义方法 …… 277
9.4.6 实现Rational类 …… 278
9.4.7 定义类方法 …… 280
9.5 把对象连接起来 …… 280
总结 …… 283
复习题 …… 284
练习题 …… 285
第10章 设计数据结构 …… 289
10.1 抽象数据类型 …… 289
10.2 实现token扫描器 …… 290
10.2.1 客户端想从token扫描器中得到什么 …… 290
10.2.2 JSTokenScanner类 …… 294
10.3 效率和表示 …… 296
10.3.1 在不使用封装的情况下实现词汇表 …… 296
10.3.2 基于数组的封装实现 …… 297
10.3.3 效率的实证测量 …… 298
10.3.4 使用映射实现词汇表 …… 299算法 …… 301
10.3.6 分治算法 …… 304
10.4 表示真实世界的数据 …… 305
总结 …… 310
复习题 …… 310
练习题 …… 311
第11章 继承 …… 319
11.1 类层次结构 …… 320
11.2 定义雇员的类层次结构 …… 322
11.3 扩展图形类 …… 325
11.3.1 扩展GPolygon类 …… 326
11.3.2 扩展GCompound类 …… 327
11.4 分解和继承 …… 328
11.5 继承的替代方案 …… 332
总结 …… 333
复习题 …… 333
练习题 …… 334
第12章 JavaScript与Web …… 341
12.1 一个简单的交互式示例 …… 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 设置外边距、边框、内边距和大小 …… 353
12.4 连接JavaScript和HTML …… 355
12.4.1 文档对象模型 …… 355
12.4.2 给HTML元素添加事件监听器 …… 357
12.4.3 可折叠列表 …… 359
12.5 将数据存储在index.html文件中 …… 363
12.5.1 使用XML表示数据 …… 364
12.5.2 打造一个教学机 …… 364
12.5.3 更改应用程序领域 …… 368
总结 …… 369
复习题 …… 370
练习题 …… 371

教学资源推荐
作者: [美]德洛莉丝 M. 埃特尔(Delores M. Etter) 著
作者: 马玉春 李壮 张鲲 黄应红 编著
参考读物推荐
作者: 快学习教育 编著
作者: [美] 马克·米凯利斯(Mark Michaelis) 著