CoffeeScriptを書いてみたよ その3
CoffeeScriptの練習の続き。
for文
# for文と即時関数 for i in [0..5] do (i) -> console.log i # 0, 1, 2, 3, 4, 5 # 2つ目のプロパティを取得する obj = aaa: 1 bbb: 2 ccc: 3 c = (i for i of obj)[2] console.log c # ccc
配列関連
# ちょっと特殊な配列の置き換え a = [1, 2, 3, 4, 5] a[1..4] = [1, 2, 4, 6] console.log i for i in a # 1, 1, 2, 4, 6 # 配列の最初の10個を取得する b = (i for i in [0..100])[0..10] console.log b # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
try-catch
# 関数内に直接try-catch console.log( # 括弧が必要 try ___aaa___ catch e null ) # null
オペレータ
# 各種オペレータ 1 is 1 # 1 === 1 1 isnt 2 # 1 !== 2 not 1 # !1 1 and 1 # 1 && 1 1 or 2 # 1 || 2 true and yes and on # true and true and true false or no or off # false or false or false @property # this.property # of -> in for i of {a: 1, b: 2, c: 3} # for (i in {a: 1, b: 2, c: 3}) { do (i) -> # console.log(i) console.log i # } # in if 'r' in 'strawberry' console.log 'r' # 'r' if 4 in [1, 2, 3, 4, 5] console.log 4 # 4
変数の初期化
# 変数が定義されているか調べる if param? console.log param else console.log 'none' # 'none' # obj = obj || {} # 変数が定義されていない場合のみ初期化 object ?= {} object = aaa ? {}
クラス関連
# クラス class Base # コンストラクタ constructor: (@name) -> aaa: (before, after) -> console.log before + @name + after # 継承 class Extend extends Base aaa: (str) -> super '/', "/ #{str}" base = new Base('base') extd = new Extend('extd') base.aaa 'before', 'after' extd.aaa 'str' # prototype obj = {} obj::aaa = -> # obj.prototype.aaa = function() { console.log 'obj.prototype.aaa' # console.log('obj.prototype.aaa'); # }
トリッキーなコード
# 変数同士の入れ替え a = 1; b = 2; c = 3 [a, b] = [b, a] console.log a # 2 console.log b # 1 [a, b, c] = [c, a, b] console.log a # 3 console.log b # 2 console.log c # 1 # 部分的に取り出す? aaa = bbb: 1 ccc: 2 ddd: eee: '_eee_' fff: [ 'ggg' 'hhh' ] {ddd: {first, second: [_1, _2]}} = aaa console.log _1 + ' ' + _2 # 'ggg hhh' # 最初と最後を単一の変数で、間を配列で受け取る str = '123456789' [start, items..., end] = str.split '' console.log start # 1 console.log items # [2, 3, 4, 5, 6, 7, 8] console.log end # 9
わかりにくいというのと簡単に書けるっていうのは紙一重なのかな。
後半の書き方はしないかなーと思った。