Skip to content

Instantly share code, notes, and snippets.

@azu
Created April 8, 2011 15:47
Show Gist options
  • Save azu/910151 to your computer and use it in GitHub Desktop.
Save azu/910151 to your computer and use it in GitHub Desktop.
CoffeeScriptをコンパイルしたもの
console.log "hello World";
# 一行コメントはコンパイル時に消える
###
複数行の場合はコンパイル後も残る
###
# // 私の役目はないの?
#変数宣言
age = 22
name="azu"
#数値いじりはJavaScriptと同じ
numberA = 1
numberB = 2
sumA_B = numberA + numberB
console.log(sumA_B)
#文字列は複数行にかける いいね!
str = "文字列ですよ
実は複数行にもかけるけど
改行はどっかにいく仕様"
#念願のヒアドキュメントを手に入れた
heredoc = '''
先頭の文字列はどこ
改行は反映されるよ
HERE
Document
'''
console.log(str , heredoc)
# 先頭に\を入れると空白も残る
# http://satyr.github.com/cup/#e:%27%27%27%0A\%20%200%0A\%20%201%0A%27%27%27
heredoc = '''
\ DOCUMENT
\ HERE
'''
#式展開 E4Xみたい
strT = "変数を展開できるので #{str}"
# といっても、下のように結合処理が入るので糖衣構文なのかな
# strT = "変数を展開できるので " + str;
#配列
ary = [1,2,3] #いつものタイプ
nary = [1
2
3] #改行が区切りの代わり 見た目悪い
#連番作成
renAry = [1..100] #1~100
#これも 1,2...100みたいに作るわけではなく、forループで作ってる
less_greater = [1...100] #1~99
slideAry = renAry[20..40] # 20-40を取り出す
#分割代入
[a,b,c]=[10,20,30] #変数aに10,変数bに20、変数cに30を代入
# 配列の長さに対して調節する きもい
[a,b,c...,d]=[1...10] # cは[3, 4, 5, 6, 7, 8]
#オブジェクト(連想配列)
# {}なしでインデントで表せる
object=
name: "nodamushi"
age : "19++++++++"
tell:"090-9876-5432"
# 演算子
# http://d.hatena.ne.jp/nodamushi/20110108/1294518316#cope
# of -> in
#存在演算子 ?
if a?
console.log "aの存在確認"
a = b ? 1 #bがあればaにbを、そうでなければaに1を
a ?= 1 #aが無ければaに1を代入する。
#?.アクセス演算子
obj?.a?.b # aが存在してなくてもエラーでない
# if/else
# unlessという偽だったらというのが増えてる
if !a?
alert 1
else unless a is b # else if a isnt bとおなじ
alert 2
#ループ
#whileが配列を返すだと…
loopf =->
t = 10
while t-=1
t*2 # ここでpushしてる
loopf_b =->
t = 10
while t-=1
t*2 # 似た目通りの演算
null #明示的に返すものを指定すると配列じゃなくなる
# 配列ループ
for i in object
dosomething?(i)
for i of object
dosomething?(i)
### 見比べると分かるがinの役割が変わってる
for (_l = 0, _len = object.length; _l < _len; _l++) {
i = object[_l];
if (typeof dosomething == "function") {
dosomething(i);
}
}
for (i in object) {
if (typeof dosomething == "function") {
dosomething(i);
}
}
####
dosomthine?(i) for i of object # 最初に処理を書くこともできる
# 飛び飛びのforループ by
# for 変数名 in 配列 by 次の要素までの距離
# 関数 かんすう!
# ->が関数の目安
# 仮引数に...と置けば残りの可変長引数を請け負ってくれる
fnName =(arg1 ,arg2 , arg3over...)->
dosome?()
#初期値もかける
fnS = (arg1=1)=>
#関数バインディング
# thisをfnbindにbindする
fnbind =->
@param="test"
setTimeout =>
alert @param
, 100
# クラスがある =>
# prototype使ってるだけ
class classFn
# コンストラクタもある
constructor :(arg)->
init?(arg)
member : 1
member2: 2
classFn::member = 1+2
instance = new classFn()
# 普通に関数(クラス)のプロパティをつけるには
class Test
@test: 1
@func: ->
# privateなものをつかうには
class Test
valeu=1 #varで宣言される =を使う
func=(v)->
alert v
a:->func(privatevalue) #メンバー = prototype
# 正規表現
#複数行に正規表現かけるようになったよ!
# /// で囲めばいい
///
\A
(?:(?:[a-z]:|\\\\[a-z0-9_.$]+\\[a-z0-9_.$]+)\\| # ドライブ
\\?[^\\/:*?"<>|\r\n]+\\?) # 相対パス
(?:[^\\/:*?"<>|\r\n]+\\)* # フォルダ
[^\\/:*?"<>|\r\n]* # ファイル
\Z
///g
# こうなる
# /\A(?:(?:[a-z]:|\\\\[a-z0-9_.$]+\\[a-z0-9_.$]+)\\|\\?[^\\\/:*?"<>|\r\n]+\\?)(?:[^\\\/:*?"<>|\r\n]+\\)*[^\\\/:*?"<>|\r\n]*\Z/g;
# 例外処理は同じ
try
throw "error"
catch e
console.log e
(function() {
var Test, a, age, ary, b, c, classFn, d, fnName, fnS, fnbind, heredoc, i, instance, less_greater, loopf, loopf_b, name, nary, numberA, numberB, object, renAry, slideAry, str, strT, sumA_B, _i, _j, _k, _l, _len, _ref, _ref2, _ref3, _results, _results2;
var __slice = Array.prototype.slice, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
console.log("hello World");
/*
複数行の場合はコンパイル後も残る
*/
age = 22;
name = "azu";
numberA = 1;
numberB = 2;
sumA_B = numberA + numberB;
console.log(sumA_B);
str = "文字列ですよ 実は複数行にもかけるけど 改行はどっかにいく仕様";
heredoc = '先頭の文字列はどこ\n改行は反映されるよ\nHERE\nDocument';
console.log(str, heredoc);
heredoc = '\ DOCUMENT\n\ HERE';
strT = "変数を展開できるので " + str;
ary = [1, 2, 3];
nary = [1, 2, 3];
renAry = (function() {
_results = [];
for (_i = 1; _i <= 100; _i++){ _results.push(_i); }
return _results;
}).apply(this, arguments);
less_greater = (function() {
_results2 = [];
for (_j = 1; _j < 100; _j++){ _results2.push(_j); }
return _results2;
}).apply(this, arguments);
slideAry = renAry.slice(20, 41);
_ref = [10, 20, 30], a = _ref[0], b = _ref[1], c = _ref[2];
_ref2 = [1, 2, 3, 4, 5, 6, 7, 8, 9], a = _ref2[0], b = _ref2[1], c = 4 <= _ref2.length ? __slice.call(_ref2, 2, _k = _ref2.length - 1) : (_k = 2, []), d = _ref2[_k++];
object = {
name: "nodamushi",
age: "19++++++++"
};
({
tell: "090-9876-5432"
});
if (a != null) {
console.log("aの存在確認");
}
a = b != null ? b : 1;
a != null ? a : a = 1;
if (typeof obj != "undefined" && obj !== null) {
if ((_ref3 = obj.a) != null) {
_ref3.b;
}
}
if (!(a != null)) {
alert(1);
} else if (a !== b) {
alert(2);
}
loopf = function() {
var t, _results;
t = 10;
_results = [];
while (t -= 1) {
_results.push(t * 2);
}
return _results;
};
loopf_b = function() {
var t;
t = 10;
while (t -= 1) {
t * 2;
}
return null;
};
for (_l = 0, _len = object.length; _l < _len; _l++) {
i = object[_l];
if (typeof dosomething == "function") {
dosomething(i);
}
}
for (i in object) {
if (typeof dosomething == "function") {
dosomething(i);
}
}
/* 見比べると分かるがinの役割が変わってる
for (_l = 0, _len = object.length; _l < _len; _l++) {
i = object[_l];
if (typeof dosomething == "function") {
dosomething(i);
}
}
for (i in object) {
if (typeof dosomething == "function") {
dosomething(i);
}
}
*/
for (i in object) {
if (typeof dosomthine == "function") {
dosomthine(i);
}
}
fnName = function() {
var arg1, arg2, arg3over;
arg1 = arguments[0], arg2 = arguments[1], arg3over = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
return typeof dosome == "function" ? dosome() : void 0;
};
fnS = __bind(function(arg1) {
if (arg1 == null) {
arg1 = 1;
}
}, this);
fnbind = function() {
this.param = "test";
return setTimeout(__bind(function() {
return alert(this.param);
}, this), 100);
};
classFn = (function() {
function classFn(arg) {
if (typeof init == "function") {
init(arg);
}
}
classFn.prototype.member = 1;
classFn.prototype.member2 = 2;
return classFn;
})();
classFn.prototype.member = 1 + 2;
instance = new classFn();
Test = (function() {
function Test() {}
Test.test = 1;
Test.func = function() {};
return Test;
})();
Test = (function() {
var func, valeu;
function Test() {}
valeu = 1;
func = function(v) {
return alert(v);
};
Test.prototype.a = function() {
return func(privatevalue);
};
return Test;
})();
/\A(?:(?:[a-z]:|\\\\[a-z0-9_.$]+\\[a-z0-9_.$]+)\\|\\?[^\\\/:*?"<>|\r\n]+\\?)(?:[^\\\/:*?"<>|\r\n]+\\)*[^\\\/:*?"<>|\r\n]*\Z/g;
try {
throw "error";
} catch (e) {
console.log(e);
}
}).call(this);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment