`
panzertank
  • 浏览: 16504 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

(转)以优美方式编写JavaScript代码

 
阅读更多

http://www.open-open.com/bbs/view/1348305460369

 

英文原文:CoffeeScript: The beautiful way to write JavaScript

  我用 JavaScript 编程很多年了,写了大量的 JavaScript 代码,即便是我这样的经历,但我仍然还在努力地去写出更优美的 JavaScript 代码,在这篇文章中,我将探索为什么写出漂亮的 JavaScript 代码是如此困难,如何使用CoffeScript(一种简约且能编译成 JavaScript 的语言)改善它。

  什么是优美的代码?

  我想从个人观点来声明如何定义优美代码

  1、优美的代码是使用更少的代码解决问题;

  2、优美的代码是可读而且易理解的;

  3、优美的代码是一段既没有什么可以需要添加,也没有什么多余的可以去掉代码(就像伟大的的设计);

  4、最短长度是优美代码的另外一个方面,并不是以此为作为目标或者权衡。

  所以对我来说,优美的代码是最小代码化、可使用、易读的综合效应。

  一段优美 JavaScript 代码的例子:

  以斐波纳契函数举例来说,这个函数对绝大多数程序员来是应该知道的。这里有一个谈不上漂亮的实现,因为代码缺乏结构化,而且使用了很多没必要的冗长代码:

function f(n) {var s= 0;if(n == 0) return(s);if(n == 1) {
s += 1;return(s);
}else {return(f(n - 1) + f(n - 2));
   }
}

  这里是另外一个版本的实现,我发现了更多优雅和优美之处,尤其是如果你熟悉单行的if else的话(三目条件运算):

function fib(n) {
    return n<2 ? n : fib(n-1) + fib(n-2);
}

  同样优美的一段码,代码的行数并不见得那么重要:

function fib(n) {
    if (n < 2)
        return n;
    return fib(n-2) + fib(n-1);
}

  JavaScript 的毛病

  我认为 JavaScript 的一个主要问题就是它那令人困惑的混杂多种不同语言的模式:

  • JavaScript 是函数式语言
  • JavaScript 是面向对象的语言,但它是基于原型的
  • JavaScript 是动态的非常接近于 Lisp 而不是 C/Java , 但是有 C/Java 的语法
  • JavaScript 的名字就很让人疑惑,但是和 Java 没有半点关系

  这种语言有特性危机,程序员尝试强加范式到 JavaScript 中,但这并不是什么好主意,因为 JavaScript 不是 Java,不是 Sheme,也不是 Python,就像其它语言一样有自己的强项和弱项。

  同时,JavaScript 草率的设计和糟糕的决策表现在 this,像 this 的动态域、用于继承的语法,由于考虑到向后兼容的原因,修复这些问题非常困难。这里是一个很好的引用来自于 JavaScript 的创造者,亮点在 JavaScript 诞生的所处的环境:“JavaScript 听起来像Java,仅此而已,像是 Java 的哑巴小兄弟,但是我不得不在十天完成。(否则)或许比 JavaScript 更糟糕的事情会发生”— Brendan Eich

  CoffeeScript:全新的方式写出更好的 JavaScript

  CoffeeScript 是一种精致的语言,能编译成 JavaScript。它的目的是用简单的方法揭示 JavaScript 优秀的部分。

  CoffeeScript 不会终结你的 JavaScript 代码

  我喜欢 CoffeeScript 的原因之一是它能编译成 JavaScript,这就意味着我可以重用我当前所有的 JavaScript 代码,我不需要重写任何代码到 CoffeeScript,这是一笔伟大的交易,尤其是因为我们的 Wedoist JavaScript 代码库非常庞大,要是重写成另一种语言够你花上数月的时间。CoffeeScript 同样是一种迷你型的 JavaScript,就像是被改善 JavaScript 版本,糟糕的部分被替换掉了。同时它的语法从 C/Java 语言换成了 Ruby 或者是 Python(棒极了,因为 JavaScript 更接近于Ruby、Python 而不是 C 或者 Java)。  

  CoffeeScript 是怎么样编译成 JavaScript 的

  为了阐述编译,我们举一例子,看它是怎么工作的。 CoffeeScript 代码:

square = (x) -> x * x
cube   = (x) -> square(x) * x
编译成 JavaScript 代码:
var cube, square;
square = function(x) {
  return x * x;
};
cube = function(x) {
  return square(x) * x;
};

  正如你从上例中看到的 CoffeeScript 和 JavaScirpt 的映射非常的直接。在另外一个网站你可以发现很多例子CoffeeScript如何编译成JavaScript。

  CoffeeScript:重写示例

  为了给你一种 CoffeeScript 的感觉,这里是个小 JavaScript 例子,我将重写成 CoffeeScript。

get: function(offset, callback, limit) {
    var self = this;
    var data = {
        project_id: Projects.getCurrent().id,
        limit: limit || this.default_limit
    }
    if(offset)
        data.offset = Calendar.jsonFormat(offset, true);
    this.ajax.getArchived(data, function(data) {
        if(!offset)
            self.setCache(data);
        callback(data);
    });
}

  CoffeeScript 看起来像这样:

get: (offset, callback, limit) =>     data =         project_id: Projects.getCurrent().id
        limit: limit or @default_limit
    if offset
        data.offset = Calendar.jsonFormat(offset, true)
    @ajax.getArchived(data, (data) =>
        if !offset
            @setCache(data)
        callback(data)
    )

  如你所见,两者看起来非常相似,但是我的观点是 CoffeeScript 看起来更轻快,因为所有非必须的语法被移除仅保留了必须的元素。

  现在让我们来看看 CoffeeScript 的亮点:

  亮点一:继承更简单

  JavaScript 有很强的继承系统,但是语法很恐怖,CoffeeScript 修复了用一种很优雅的继承系统模拟其它很多语言中类和继承机制:

class Animal
    constructor: (@name) ->     move: (meters) ->         alert @name + " moved " + meters + "m." class Snake extends Animal
    move: ->         alert "Slithering..."         super 5

  亮点二:数组的迭代

我喜欢 Python 中的列表推导在 CoffeeScript 也有
list = [1, 2, 3, 4, 5]
cubes = (math.cube num for num in list)
数组切片:
copy = list[0...list.length]
数组迭代:
countdown = (num for num in [10..1])

  亮点三:字符串迭代

对于字符创的插入,CoffeeScript 借用了 Ruby 的语法,它能简单的构造字符串。
author = "Wittgenstein" quote  = "A picture is a fact. -- #{ author }"
允许多行的字符串:
mobyDick = "Call me Ishmael. Some years ago -
never mind how long precisely -- having little
or no money in my purse, and nothing particular..."

  亮点四:绑定this

  this 关键字在 JavaScript 中部分的被破坏,因为他的动态域,CoffeeScript修复了这些,如果你使用=>关键字(它自动为你绑定this或者@)

Account = (customer, cart) ->     @customer = customer
    @cart = cart
    $('.shopping_cart').bind('click', (event) =>         @customer.purchase @cart
    )

  探索 CoffeeScript

  我仅仅抓住 CoffeeScript 的表面所提供的一些东西,更多细节请从他们的站点提取以及带有注释的源代码

  我仍然在探索 CoffeeScript,目前为止这是我最喜欢的语言,荣誉属于 Jeremy Ashkenas。快乐的编程,我也希望你可以试一把 CoffeeScript 。

  编译:伯乐在线 –刘志军

分享到:
评论

相关推荐

    以优美方式编写JavaScript代码

    JavaScript编程很多年了,写了大量的JavaScript代码,即便是我这样的经历,但我仍然还在努力地去写出更优美的 JavaScript代码,在这篇文章中,我将探索为什么写出漂亮的JavaScript代码是如此困难,如何使用...

    关于如何编写优美的JavaScript代码之我见

    在《关于如何编写优美的JavaScript代码之我见》这篇博文中,作者分享了他对编写高质量JavaScript代码的一些见解和实践策略。 首先,源码的质量是关键。一个良好的源码结构能够帮助开发者更好地理解代码的功能和逻辑...

    使用CoffeeScrip优美方式编写javascript代码

    CoffeeScript是一种优雅地编写JavaScript的预处理器语言,它旨在通过简化语法提高代码的可读性和简洁性。在JavaScript的基础上,CoffeeScript提供了一种更简洁、更直观的语法,最终编译成标准的JavaScript代码,可以...

    使用AngularJS编写较为优美的JavaScript代码指南

    **AngularJS 编写优美JavaScript代码指南** 在前端开发领域,AngularJS 是一款非常流行的JavaScript框架,它提供了丰富的功能和工具来构建复杂的应用程序。本文将聚焦于如何使用AngularJS编写更加优雅、易于维护的...

    用函数式编程技术编写优美的 JavaScript

    ### 使用函数式编程技术编写优美的JavaScript #### 函数式编程概述 函数式编程作为一种编程范式,在学术...通过实践和不断探索,开发者可以逐步掌握这些强大的编程技巧,从而编写出更加优美和高效的JavaScript代码。

    用函数式编程技术编写优美的JavaScript

    函数式编程是一种编程范式,它强调使用函数来构建软件。...函数式编程的范式鼓励开发者从更高层次思考问题,专注于业务逻辑和问题本身,而不是底层的实现细节,从而编写出更加优雅和可维护的JavaScript代码。

    优美代码力作

    编写优美代码是每个程序员追求的目标,它能够提高代码质量,降低维护成本,提升团队协作效率。 首先,对于【优美代码】来说,【态度】至关重要。程序员应该对每一行代码充满热情,不断进行自我审视和重构。有意识地...

    Learning JavaScript Design Patterns.pdf

    如果读者希望学会如何编写优美、结构化和有组织的代码,作者认为这本书就是为他们量身定做的。 最后,书籍提供了学习资源链接,方便读者进一步阅读和扩展知识面。这本书不仅是对设计模式的探讨,也是对JavaScript...

    医院网站源代码 html css JavaScript php

    医院网站 适合初学者 使用html css JavaScript php 编写 div css布局 适合用做毕业设计 界面优美 代码简单

    个人网站源代码 html css JavaScript php

    个人网站 适合初学者 使用html css JavaScript php 编写 div css布局 适合用做毕业设计 界面优美 代码简单

    JavaScript语言精粹

    在《JavaScript语言精粹》中,您将会发现一门美丽的、优雅的、轻量级的和非常富有表现力的语言,它使您创建高效的代码,不管您编写代码的目的是管理对象库还是仅仅使Ajax运行得更快。如果您为web开发站点或应用程序...

    用函数式编程技术编写优美的 JavaScript_ibm

    在JavaScript中,函数式编程是一种强大的编程范式,它强调使用函数来表示数据处理和计算。...通过深入学习和实践,开发者可以更好地掌握这种编程范式,提升编程技能,写出更加优美和高效的JavaScript代码。

    javascript the good parts

    这本书主要聚焦在JavaScript语言中那些优秀的特性上,旨在帮助开发者挖掘并利用这些特性来编写更加可靠、可读和可维护的代码。Crockford指出,尽管JavaScript在其早期发展过程中存在很多不足,但它仍包含许多创新和...

    Javascript 代码也可以变得优美的实现方法

    JavaScript 作为一种广泛使用的脚本语言,其代码的简洁性和高效性对于提高网页性能至关重要。本文主要探讨了如何通过简化代码和...在编写JavaScript时,应时刻考虑代码的可读性、性能和兼容性,以实现最优的编程实践。

    Rockstar编程语言规范_JavaScript_下载.zip

    文件名"rockstar-main"可能是指该工具的主入口文件,用于处理Rockstar代码并生成JavaScript代码。使用这个工具,开发者可以编写Rockstar代码,然后通过编译器将其转化为JavaScript,再在浏览器或Node.js环境中运行。...

    JavaScript书写规范

    在 JavaScript 开发中,编写规范是一个非常重要的方面,良好的编写规范可以使代码更加易读、易维护、易优化,提高加载速度,优化代码结构。本文档的目标是使 JavaScript 代码风格保持一致,容易被理解和被维护。 ...

Global site tag (gtag.js) - Google Analytics