2011年11月13日日曜日

CoffeeScriptを学ぶ

CoffeeScriptはJvaScriptに変換するための言語で、
Pythonのような文法を持っているのが特徴のようです。

このCoffeeScriptを学ぼうと思い、いくつかのサンプルを書いてみました。
まず基本、FizzBuzzです。
(下記はalertで書いたので実行すると大変なことになるから気をつけてね)
  1. for a in [1..100]  
  2.   if a%15 == 0  
  3.     alert "FizzBuzz"  
  4.   else if a%3 == 0  
  5.     alert "Fizz"  
  6.   else if a%5 == 0  
  7.     alert "Buzz"  
  8.   else  
  9.     alert a  
特徴としては、Pythonのようにインデントがブロックを表しています。
インデントでブロックにすると、やっぱり見やすいですよね。
また、メソッドも()がつかないです。

これをJavaScriptに変換すると、以下のようになります。
  1. var a;  
  2.   
  3. for (a = 1; a <= 100; a++) {  
  4.   if (a % 15 === 0) {  
  5.     alert("fizzbuzz");  
  6.   } else if (a % 3 === 0) {  
  7.     alert("fizz");  
  8.   } else if (a % 5 === 0) {  
  9.     alert("buzz");  
  10.   } else {  
  11.     alert(a);  
  12.   }  
  13. }  
今度はクイックソートを実装してみます。 関数は
関数名 -> (引数)
   (関数本体)
のです。 CoffeeScriptはwhile文が使えます  
  1. sort = (array, l, r) ->  
  2.   mid = ~~(l+r/2)  
  3.   return if l >= r  
  4.   i = l  
  5.   j = r  
  6.   pivot = array[mid]  
  7.   while true  
  8.     while array[i] < pivot  
  9.       i++  
  10.     while array[j] > pivot  
  11.       j--  
  12.     break if i >= j  
  13.     t = array[i]  
  14.     array[i] = array[j]  
  15.     array[j] = t  
  16.   sort array, l, i-1 if l < i-1  
  17.   sort array, j+1, r if j+1 < r  
  18.   
  19. a = [1, 4, 3, 7, 6, 5, 2, 8]  
  20. sort a, 0, 7  
  21. alert a  
下記はJavaScriptに変換したときのコードです。
  1. var a, sort;  
  2.   
  3. sort = function(array, l, r) {  
  4.   var i, j, mid, pivot, t;  
  5.   mid = ~~(l + r / 2);  
  6.   if (l >= r) return;  
  7.   i = l;  
  8.   j = r;  
  9.   pivot = array[mid];  
  10.   while (true) {  
  11.     while (array[i] < pivot) {  
  12.       i++;  
  13.     }  
  14.     while (array[j] > pivot) {  
  15.       j--;  
  16.     }  
  17.     if (i >= j) break;  
  18.     t = array[i];  
  19.     array[i] = array[j];  
  20.     array[j] = t;  
  21.   }  
  22.   if (l < i - 1) sort(array, l, i - 1);  
  23.   if (j + 1 < r) return sort(array, j + 1, r);  
  24. };  
  25.   
  26. a = [1, 4, 3, 7, 6, 5, 2, 8];  
  27. sort(a, 0, 7);  
  28. alert(a);  

0 件のコメント: