2013年9月12日 星期四

LiveScript do keyword

LiveScript 眾多的語法糖衣中, do 算是被附加最多功能的 keyword . 所以整理一下目前已知的用法備忘。

1. execute

如同 do 字面的意思,就是執行。後面可以跟的是 Function or Array .

do Function

如:

# anonymous function
do ->
  x = 5

# named function
a = ->
  x = 5
do a

# declare named function and execute it
do function f
  x = 5

會產生出

// anonymous function
(function(){
  var x;
  return x = 5;
})();

// named function
var a;
a = function(){
  var x;
  return x = 5;
};
a();

// declare named function and execute it
function f(){
  var x;
  return x = 5;
} f();

由上列可知 do 非常聰明,它能依 anonymous 或是 named Function 決定產生出的 javascript 語法。

do 後面跟一個 anonymous 非常方便,很適合使用來將一段程式碼包起來,將變數變成區域變數(local scope variables),好處就是避免變數外漏(expose variables).

do Array

如果 do 後面跟著是 Array , 而 Array 內的元素是可呼叫(callable), 則 do 會執行 Array 內每一個元素。

如:

do [a, b, c]
a(), b(), c();

2. omit parentheses

LiveScript Coding Style 建議我們能省略 parentheses (),就量省略。所以我們可以利用 do 來做到。

implicit object

如:

func do
  a: 1
  b: 2

會產生

func({
  a: 1,
  b: 2
});

list

如:

func do
  a
  b

# 經常使用在 callback, error_callback
func do
  (data) ->
    x = 1
  (err) ->
    x = -1

會產生

func(a, b);

// 經常使用在 callback, error_callback
func(function(data){
  var x;
  return x = 1;
}, function(err){
  var x;
  return x = -1;
});

3. Backcalls

由於 LiveScript backcalls ,省略了內縮,讓 async callback 程式碼較容易閱讀,也因為省略內縮,如果你某段 code 要在 backcall 後執行就無法做到,這時需要利用 do

如官方範例:

do
  data <-! $.get 'ajaxtest'
  $ '.result' .html data
  processed <-! $.get 'ajaxprocess', data
  $ '.result' .append processed

alert 'hi'

產生:

$.get('ajaxtest', function(data){
  $('.result').html(data);
  $.get('ajaxprocess', data, function(processed){
    $('.result').append(processed);
  });
});
alert('hi');

4. Do while loop

相容 javascript 的 do-while 迴圈語法

如:

i = 0
do
  i++
while i<5

產生:

i = 0
do
  i++
while i<5

5. code block

沒什麼特別作用,如同你在 javascript 中的 {} . 如:

do
  x = 1
  x = 2

do 
  x = 3

產生:

var x;
x = 1;
x = 2;
x = 3;

Written with StackEdit.