JavaScript语言精髓与编程实践(2

周爱民 

ISBN 978-7-121-15640-3

20123月出版

定价:79

16

476

宣传语:以JavaScript视角看整个计算机语言的世界,小角度引来的大话题

本书详细讲述JavaScript 作为一种混合式语言的各方面特性,包括过程式、面向对象、函数式和动态语言特性等,在动态函数式语言特性方面有着尤为细致的讲述。本书的主要努力之一,就是分解出这些语言原子,并重现将它们混合在一起的过程与方法。通过从复杂性到单一语言特性的还原过程,读者可了解到语言的本质,以及“层出不穷的语言特性”背后的真相。

本书主要的著述目的是基于一种形式上简单的语言来讲述“语言的本质及其应用”。本书详细讲述了通过框架执行过程来构造一个JavaScript 扩展框架的方法,并完整地讲述了框架扩展中各种设计取舍,因此可以作为研究计算机程序设计语言时的参考,用以展示现实系统如何实现经典理论中的各种编程范型。

作者简介

周爱民(Aimingoo),国内软件开发界资深软件工程师、架构师,技术作家。有十余年的软件开发、项目管理、团队建设的经验。著有《Delphi源代码分析》、《大道至简》和《JavaScript语言精髓与编程实践》等专著。

◆2001年,主持完成的“极光数据处理仓库中心系统”被河南省信息产业厅授予省高新技术产品二等奖。

◆2003年,被美国Borland公司授予 “Borland Delphi产品专家”称号。

◆2004年,出版《Delphi源代码分析》,被誉为“Delphi领域精品著作”。

◆2005年,发布《大道至简》电子版(第一版)。

◆2006年,发起开源项目QomolangmaOpenProiect,探讨语言系统基础技术。

◆2007年3月,出版《大道至简》(第二版)。

◆2008年3月,出版《JavaScript语言精髓与编程实践》第一版。

2 代序

要有光

《世界需要一种什么样的语言》节选

什么才是决定语言的未来的思想呢?或者我们也可以换个角度来提出这个问题:世

界需要一种什么样的语言?

特性众多、适应性强,就是将来语言的特点吗?我们知道现在的C#与Java 都在这条道路上前进。与特定的系统相关,就是语言的出路吗?例如曾经的VC++,以及它面向不同平台的版本。当然,与此类似的语言,还有C,以及汇编语言等。

这些例举其实都是在特定环境下的特定语言,所不同的无非是此处的环境的大小。这其实也是程序员的心病:我们到底选Windows 平台,还是Java 平台,或者Linux 系统,再或者是……我们总是在不同的厂商及其支持的平台中选择,而最终这种选择又决定了我们所使用的语言。这与喜好无关,也与语言的好坏无关,不过是一种趋利的选择罢了。所以你在使用着的也许只是一种“并不那么‘好’”,以及并不能令你那么开心地编程的语言。你越发辛勤地工作,越发地为这些语言摇旗鼓噪,你也就离语言的真相越来越远。

当然,这不过是一种假设。但是,真相不都是从假设开始的吗?

语言有些很纯粹,有些则以混杂著称。如果编程世界只有一种语言,无论它何等复杂,也必因毫无比较而显得足够纯粹。所以只有在多种语言之间比较,才会有纯粹或混杂的差异:纯粹与混杂总是以一种或多种分类法为背景来描述的。

因此我们了解这些类属概念的标准、原则,也就回溯到了种种语言的本质:它是什么、怎么样,以及如何工作。这本书,将这些分类回溯到两种极端的对立:命令式与说明式、动态与静态。我讲述除了静态语言(一般是指类似C、C++、Delphi 等的强类型、静态、编译型语言)之外的其他三种类型。正是从根底里具有这三种类型的特性,所以JavaScript 具有令人相当困扰的混合语言特性。分离它们,并揭示将它们混沌一物的方法与过程,如历经涅磐。在这一经历中,这本书就是我的所得。

多年以来,我在我所看不见的黑暗与看得见的梦境中追寻着答案。这本书是我最终的结论,或者结论面前的最后一层表象:我们需要从纯化的语言中领悟到编程的本质,并以混杂的语言来创造我们的世界。我看到:局部的、纯化的语言可能带来独特的性质,而从全局来看,世界是因为混杂而变得有声有色。如果上帝不说“要有光”,那么我们将不能了解世象之表;而世象有了表面,便有了混杂的色彩,我们便看不见光之外的一切事物。我们依赖于光明,而事实是光明遮住了黑暗。如同你现在正在使用的那一种、两种或更多种语言,阻碍了你看到你的未来。

周爱民

2009 年1 月于本书精简版序

1 代序

学两种语言

《我的程序语言实践》节选

《程序设计语言——实践之路》一书对“语言”有一个分类法,将语言分类为“说明式”与“命令式”两种。Delphi 以及C、C++、Java、C#等都被分在“命令式”语言范型的范畴,“函数式”语言则是“说明式”范型中的一种。如今我回顾自己对语言的学习,其实十年也就学会了两种语言:一种是命令式的Pascal/Delphi,另一种则是说明式的JavaScript。当然,从语言的实现方式来看,一种是静态的,一种是动态的。

这便是我程序员生涯的全部了。

我毕竟不是计算机科学的研究者,而只是其应用的实践者,因此我从一开始就缺乏对“程序”的某些科学的或学术层面上的认识是很正常的。也许有些人一开始就认识到程序便是如此,或者一种语言就应当是这样构成和实现的,那么他可能是从计算机科学走向应用,故而比我了解得多些。而我,大概在十年前学习编程以及在后来很多年的实践中,仅被要求“写出代码”而从未被要求了解“什么是语言”。所以我才会后知后觉,才会在很长的时间里迷失于那些精细的、沟壑纵横的语言表面而不自知。然而一如我现在所见到的,与我曾相同地行进于那些沟壑的朋友,仍然在持续地迷惑着、盲目着,全然无觉于沟壑之外的瑰丽与宏伟。

前些天写过一篇博客,是推荐那篇“十年学会编程”的。那篇文章道出了我在十年编程实践之后,对程序语言的最深刻的感悟。我们学习语言其实不必太多,深入一两种就可以了。如果在一种类型的语言上翻来覆去,例如不断地学C、Delphi、Java、C#……无非是求生存、讨生活,或者用以装点个人简历,于编程能力的提高用处是不大的。更多的人,因为面临太多的语言选择而浅尝辄止,多年之后仍远离程序根本,成为书写代码的机器,把书写代码的行数、程序个数或编程年限作为简历中最显要的成果。这在明眼人看来,不过是熟练的砌砖工而已。

我在《大道至简》中说“如今我已经不再专注于语言”。其实在说完这句话之后,我就已经开始了对JavaScript 的深入研究。在如此深入地研究一种语言,进而与另一种全然有别的语言比较之后,我对“程序=算法+结构”有了更深刻的理解与认识。尽管这句名言从来未因我的认识而变化过,从来未因说明与命令的编程方式而变化过,也从来未因动态与静态的实现方法而变化过。

动静之间,不变的是本质。我之所以写这篇文章,并非想说明这种本质是什么抑或如何得到,只是期望读者能在匆忙的行走中,时而停下脚步,远远地观望一下目标罢了。而我此刻,正在做一个驻足观望的路人。

周爱民

2007 年11 月于个人博客

转载于:https://blog.51cto.com/bvbroadview/851880

JavaScript语言精髓与编程实践(第2版)相关推荐

  1. 《JavaScript语言精髓与编程实践》读书笔记二

    第3章非函数式语言特性 这一章首先介绍了语言的分类,命令式(结构化编程,面向对象编程),说明式(函数式等).而这一章,主要介绍JS的非函数式特点. 在开始之前,首先介绍了由"结构化编程&qu ...

  2. 《javascript语言精髓与编程实践》--原型继承笔记

    1.直接量:直接量的值可以在声明的同时就确知了:有undefined.true/false.字符串.数值.正则表达式.null 2.表达式:由运算元.运算符组成的,并产生结果的语法结构:本身也是无法预 ...

  3. 《Javascript 语言精髓》读书心得

    <Javascript 语言精髓>读书心得 看了<Javascript 语言精髓>一书,记录下一些要点,以供以后学习查阅. 对象 JavaScript简单类型有数字.字符串.布 ...

  4. JavaScript 中的函数式编程实践

    为什么80%的码农都做不了架构师?>>>    基础知识 函数式编程简介 说到函数式编程,人们的第一印象往往是其学院派,晦涩难懂,大概只有那些蓬头散发,不修边幅,甚至有些神经质的大学 ...

  5. 《高性能JavaScript》第八章 编程实践

    8.1 避免双重求值 JavaScript像其他很多脚本语言一样,允许你在程序中提取一个包含代码的字符串,然后动态执行它.有四个标准方法可以实现:eval().Function().setTimeou ...

  6. C语言表驱动法编程实践

    数据压倒一切.如果选择了正确的数据结构并把一切组织的井井有条,正确的算法就不言自明.编程的核心是数据结构,而不是算法. --Rob Pike  说明 本文基于这样的认识:数据是易变的,逻辑是稳定的. ...

  7. 高性能JavaScript笔记三(编程实践)

    避免双重求值 有四个标准函数可以允许你传入代码的字符串,然后它才你动态执行.它们分别是:eval.Function.setTimeout.setInterval 事实上当你在javascript代码中 ...

  8. 大数求乘法逆元c语言,乘法逆元(编程计算)+两道版题

    前言 看到这里的小盆友们千万不要以为这个东西很难,其实就是个1+1->1(1个定义+1个定理->1坨乘法逆元).Let's begin.web 有关乘法逆元定义 这个咱们就不要玩笑了,来, ...

  9. 计算机图形学基础教程(Visual C++版)习题解答与编程实践(第2版)孔令德1-到第3章的直线扫描转换

    1-到第3章的直线扫描转换(没更新完) 习题1 知识积累 习题2 知识点 映射模式 使用GDI对象 习题3 知识积累 直线的中点Bresenham算法 绘制任意斜率的直线: 习题1 1.计算机图形学的 ...

最新文章

  1. 再谈“去虚拟化”对深度学习系统的必要性
  2. 执行“conda create -n scrapyEnv python=3.6”,结果出现了“CondaHTTPError: HTTP 000 CONNECTION FAILED for url <h
  3. boot.img的分析
  4. 开源websocket
  5. 来不及想标题了,我要去打包收藏了 | 本周值得读
  6. 谁说程序员赚得比医生少?网友:我一年的收入医生一辈子都赚不到
  7. spring + springmvc + mybatis + mysql 整合使用案例
  8. 简评游戏人工智能相关的中文书(补遗)
  9. DOS命令大全(经典收藏)【运行CMD后的命令】
  10. mssql 获取自增列起始及增量
  11. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver,网页一直处于加载中,servlet+html+js+css项目难题解决
  12. J2EE的体系架构——J2EE
  13. 面向程序员的精品开源字体
  14. matlab雷达辐射源,雷达辐射源PDW数据分析系统的制作方法
  15. 【Unity项目实战】手把手教学:飞翔的小鸟(2)脚本编写
  16. nginx 去除index php,nginx怎么去除index.php
  17. halcon算子中文对照
  18. 什么是 NullPointerException?
  19. 攻防世界 Miscellaneous-200
  20. 【服务器数据恢复】infortrend存储RAID6数据恢复案例

热门文章

  1. office2003办公软件
  2. Android 9.0 WiFi BG Scan机制
  3. 对比java和python对比
  4. 新手必学 最完整的iTunes使用教程
  5. C#软件开发实例.私人订制自己的屏幕截图工具(十)在截图中包含鼠标指针形状
  6. 圆周率 π 小数点后的前10000位
  7. 2022KCTF春季赛看雪为什么读书
  8. DB-Engines 9月数据库排名:ClickHouse一路猛冲,Redis坐稳第七(文末送书福利)
  9. iOS UI入门——使用Objective-C和Swift实现UIImageView显示图片
  10. FANUC机器人开平方