成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

以優美方式編寫JavaScript代碼

開發 前端
以斐波納契函數舉例來說,這個函數對絕大多數程序員來是應該知道的。這里有一個談不上漂亮的實現,因為代碼缺乏結構化,而且使用了很多沒必要的冗長代碼......

我用JavaScript 編程很多年了,寫了大量的JavaScript代碼,即便是我這樣的經歷,但我仍然還在努力地去寫出更優美的JavaScript代碼,在這篇文章中,我將探索為什么寫出漂亮的JavaScript代碼是如此困難,如何使用CoffeScript(一種簡約且能編譯成JavaScript的語言)改善它。

什么是優美的代碼?

我想從個人觀點來聲明如何定義優美代碼

1、優美的代碼是使用更少的代碼解決問題;

2、優美的代碼是可讀而且易理解的

3、優美的代碼是一段既沒有什么可以需要添加也沒有什么多余的可以去掉代碼(就像偉大的的設計)

4、最短長度是優美代碼的另外一個方面,并不是以此為作為目標或者權衡

所以對我來說,優美的代碼是最小代碼化、可使用、易讀的綜合效應。

一段優美JavaScript代碼的例子:

斐波納契函數舉例來說,這個函數對絕大多數程序員來是應該知道的。這里有一個談不上漂亮的實現,因為代碼缺乏結構化,而且使用了很多沒必要的冗長代碼:

  1. function f(n) {   
  2. var s= 0;   
  3. if(n == 0) return(s);   
  4. if(n == 1) {   
  5. s += 1;   
  6. return(s);   
  7. }   
  8. else {   
  9. return(f(n - 1) + f(n - 2));   
  10.    }   

這里是另外一個版本的實現,我發現了更多優雅和優美之處,尤其是如果你熟悉單行的if else的話(三目條件運算):

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

同樣優美的一段碼,代碼的行數并不見得那么重要

  1. function fib(n) {   
  2.     if (n < 2)   
  3.         return n   
  4.     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

[[94143]]  

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代碼:

  1. square = (x) -> x * x   
  2. cube   = (x) -> square(x) * x 

編譯成JavaScript代碼:

  1. var cube, square;   
  2. square = function(x) {   
  3.   return x * x;   
  4. };   
  5. cube = function(x) {   
  6.   return square(x) * x;   
  7. }; 

正如你從上例中看到的CoffeeScript和JavaScirpt的映射非常的直接。在另外一個網站你可以發現很多例子CoffeeScript如何編譯成JavaScript。

CoffeeScript:重寫示例

為了給你一種CoffeeScript的感覺,這里是個小JavaScript例子,我將重寫成CoffeeScript。

  1. get: function(offset, callback, limit) {   
  2.     var self = this;   
  3.     var data = {   
  4.         project_id: Projects.getCurrent().id,   
  5.         limit: limit || this.default_limit   
  6.     }   
  7.     if(offset)   
  8.         data.offset = Calendar.jsonFormat(offset, true);   
  9.     
  10.     this.ajax.getArchived(data, function(data) {   
  11.         if(!offset)   
  12.             self.setCache(data);   
  13.         callback(data);   
  14.     });   

CoffeeScript看起來像這樣:

  1. get: (offset, callback, limit) =>   
  2.     data =   
  3.         project_id: Projects.getCurrent().id   
  4.         limit: limit or @default_limit   
  5.     
  6.     if offset   
  7.         data.offset = Calendar.jsonFormat(offset, true)   
  8.     
  9.     @ajax.getArchived(data, (data) =>   
  10.         if !offset   
  11.             @setCache(data)   
  12.         callback(data)   
  13.     ) 

如你所見,兩者看起來非常相似,但是我的觀點是CoffeeScript看起來更輕快,因為所有非必須的語法被移除僅保留了必須的元素。

現在讓我們來看看CoffeeScript的亮點:

亮點一:繼承更簡單

JavaScript有很強的繼承系統,但是語法很恐怖,CoffeeScript修復了用一種很優雅的繼承系統模擬其它很多語言中類和繼承機制:

  1. class Animal   
  2.     constructor: (@name) ->   
  3.     
  4.     move: (meters) ->   
  5.         alert @name + " moved " + meters + "m." 
  6. class Snake extends Animal   
  7.     move: ->   
  8.         alert "Slithering..." 
  9.         super 5 

亮點二:數組的迭代

  1. list = [1, 2, 3, 4, 5]   
  2. cubes = (math.cube num for num in list) 

數組切片:

  1. copy = list[0...list.length] 

數組迭送:

  1. countdown = (num for num in [10..1]) 

亮點三:字符串迭代

對于字符創的插入,CoffeeScript借用了Ruby的語法,它能簡單的構造字符串。

  1. author = "Wittgenstein" 
  2. quote  = "A picture is a fact. -- #{ author }" 

允許多行的字符串:

  1. mobyDick = "Call me Ishmael. Some years ago -   
  2. never mind how long precisely -- having little   
  3. or no money in my purse, and nothing particular..." 

亮點四:綁定this

this 關鍵字在JavaScript中部分的被破壞,因為他的動態域,CoffeeScript修復了這些,如果你使用=>關鍵字(它自動為你綁定this或者@)

  1. Account = (customer, cart) ->   
  2.     @customer = customer   
  3.     @cart = cart   
  4.     
  5.     $('.shopping_cart').bind('click', (event) =>   
  6.         @customer.purchase @cart   
  7.     ) 

探索CoffeeScript

我僅僅抓住CoffeeScript的表面所提供的一些東西,更多細節請從他們的站點提取以及帶有注釋的源代碼

我仍然在探索CoffeeScript,目前為止這是我最喜歡的語言,榮譽屬于Jeremy Ashkenas。快樂的編程,我也希望你可以試一把CoffeeScript。

原文鏈接:http://blog.jobbole.com/26554/#4_2,3_0_948d883a507938_298

責任編輯:張偉 來源: 伯樂在線
相關推薦

2012-05-10 15:21:50

JavaScript

2023-05-22 15:35:10

JavaScriptWeb開發

2016-11-30 18:35:03

JavaScript

2012-12-17 13:51:22

Web前端JavaScriptJS

2022-06-07 09:30:35

JavaScript變量名參數

2014-04-21 10:14:52

PromisesJavaScript

2013-04-15 09:02:43

JavaScriptJS

2009-06-24 15:00:39

Javascript代

2011-03-04 10:11:09

JavascriptAPI

2010-01-27 16:30:47

Android選項卡

2022-06-21 12:27:12

JavaScript前端

2011-12-29 15:02:27

JavaScript

2022-08-02 10:33:11

JavaScript代碼

2024-01-30 08:54:05

JavaScript技巧代碼

2020-06-15 11:04:38

JavaScript 代碼JavaScript

2009-11-26 10:39:58

PHP字符串連接

2015-08-27 13:11:18

JavaScript代碼

2025-06-11 03:22:00

JavaScript開發前端

2016-01-12 09:56:51

優美C代碼

2010-01-11 14:16:14

VB.NET生成驗證碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久综合一区 | 中文成人在线 | 国产精品久久av | 日韩一区二区福利视频 | 妞干网视频 | 天天操天天射综合网 | 在线免费观看成年人视频 | 亚洲九九精品 | 黄网站在线播放 | 黑人巨大精品欧美一区二区免费 | 久久久资源 | 精品欧美一区二区三区久久久小说 | 日本不卡高清视频 | 999免费观看视频 | 日韩一区二区三区精品 | 国产午夜精品久久久 | 亚洲天堂av网 | av片在线免费看 | 紧缚调教一区二区三区视频 | 国产精品一区视频 | 中文字字幕在线中文乱码范文 | 91资源在线| 日韩国产一区二区 | 成人免费观看男女羞羞视频 | 黄色国产| 污免费网站 | 黄视频网站免费观看 | 久久久九九九九 | 一区二区三区中文字幕 | 成人福利在线观看 | 一区二区三区视频在线免费观看 | 国产精品视频在线播放 | 亚洲视频在线免费观看 | 免费小视频在线观看 | 免费看a | 国产91丝袜在线熟 | 成人免费大片黄在线播放 | 第四色影音先锋 | 成人小视频在线 | 久久成人一区二区三区 | 日本啊v在线 |