CoffeeScriptはJvaScriptに変換するための言語で、
Pythonのような文法を持っているのが特徴のようです。
このCoffeeScriptを学ぼうと思い、いくつかのサンプルを書いてみました。
まず基本、FizzBuzzです。
(下記はalertで書いたので実行すると大変なことになるから気をつけてね)
- for a in [1..100]
- if a%15 == 0
- alert "FizzBuzz"
- else if a%3 == 0
- alert "Fizz"
- else if a%5 == 0
- alert "Buzz"
- else
- alert a
for a in [1..100]
if a%15 == 0
alert "FizzBuzz"
else if a%3 == 0
alert "Fizz"
else if a%5 == 0
alert "Buzz"
else
alert a
特徴としては、Pythonのようにインデントがブロックを表しています。
インデントでブロックにすると、やっぱり見やすいですよね。
また、メソッドも()がつかないです。
これをJavaScriptに変換すると、以下のようになります。
- var a;
-
- for (a = 1; a <= 100; a++) {
- if (a % 15 === 0) {
- alert("fizzbuzz");
- } else if (a % 3 === 0) {
- alert("fizz");
- } else if (a % 5 === 0) {
- alert("buzz");
- } else {
- alert(a);
- }
- }
var a;
for (a = 1; a <= 100; a++) {
if (a % 15 === 0) {
alert("fizzbuzz");
} else if (a % 3 === 0) {
alert("fizz");
} else if (a % 5 === 0) {
alert("buzz");
} else {
alert(a);
}
}
今度はクイックソートを実装してみます。
関数は
関数名 -> (引数)
(関数本体)
のです。
CoffeeScriptはwhile文が使えます
- sort = (array, l, r) ->
- mid = ~~(l+r/2)
- return if l >= r
- i = l
- j = r
- pivot = array[mid]
- while true
- while array[i] < pivot
- i++
- while array[j] > pivot
- j--
- break if i >= j
- t = array[i]
- array[i] = array[j]
- array[j] = t
- sort array, l, i-1 if l < i-1
- sort array, j+1, r if j+1 < r
-
- a = [1, 4, 3, 7, 6, 5, 2, 8]
- sort a, 0, 7
- alert a
sort = (array, l, r) ->
mid = ~~(l+r/2)
return if l >= r
i = l
j = r
pivot = array[mid]
while true
while array[i] < pivot
i++
while array[j] > pivot
j--
break if i >= j
t = array[i]
array[i] = array[j]
array[j] = t
sort array, l, i-1 if l < i-1
sort array, j+1, r if j+1 < r
a = [1, 4, 3, 7, 6, 5, 2, 8]
sort a, 0, 7
alert a
下記はJavaScriptに変換したときのコードです。
- var a, sort;
-
- sort = function(array, l, r) {
- var i, j, mid, pivot, t;
- mid = ~~(l + r / 2);
- if (l >= r) return;
- i = l;
- j = r;
- pivot = array[mid];
- while (true) {
- while (array[i] < pivot) {
- i++;
- }
- while (array[j] > pivot) {
- j--;
- }
- if (i >= j) break;
- t = array[i];
- array[i] = array[j];
- array[j] = t;
- }
- if (l < i - 1) sort(array, l, i - 1);
- if (j + 1 < r) return sort(array, j + 1, r);
- };
-
- a = [1, 4, 3, 7, 6, 5, 2, 8];
- sort(a, 0, 7);
- alert(a);
var a, sort;
sort = function(array, l, r) {
var i, j, mid, pivot, t;
mid = ~~(l + r / 2);
if (l >= r) return;
i = l;
j = r;
pivot = array[mid];
while (true) {
while (array[i] < pivot) {
i++;
}
while (array[j] > pivot) {
j--;
}
if (i >= j) break;
t = array[i];
array[i] = array[j];
array[j] = t;
}
if (l < i - 1) sort(array, l, i - 1);
if (j + 1 < r) return sort(array, j + 1, r);
};
a = [1, 4, 3, 7, 6, 5, 2, 8];
sort(a, 0, 7);
alert(a);