関西フロントエンドUG Advent Calendar 2015 19日目の記事です。
11/21に行われた「2016年のAltJSについて語る会」という関西フロントエンドUG主催の勉強会で、
AltJSの一つであるLiveScriptについてお話してきました。
LiveScriptとは?
- 公式ドキュメント livescript.net
- CoCo(CoffeeScriptのフォーク)のフォーク
- 今流行の関数型っぽくCoffeeScriptライクに書ける
npm i -g livescript
prelude.ls
HaskellのPreludeにちなんで、LiveScriptにもprelude.lsという関数ライブラリがあります。
インストールは、npm i prelude-ls
Underscore.jsやLodashのLiveScript版と思っていただければ大丈夫です。
(そこまで豊富な関数を取り揃えてはいませんが・・)
# Example Code
[1 to 10] |> map (* 2) |> filter (> 3) |> fold1 (+) # => 108
Introduction
ここからはLiveScriptの機能(主に関数について)をコード例を交えてご紹介します。
公式ドキュメントにもIntroductionや文法は載っていますので、色々と試して下さい。
Class
CoffeeScriptとほぼ同様にクラス定義が行えます。
ただしconstructorの書き方だけが変わっているので注意。
class A
# Static Method
@name = -> @@display-name # @@ is constructor
# Instance Method
hoge: -> \fuga
class B extends Class # extends
# constructor
-> @ <<< it
A.name! # => \A
a = new A!
a.hoge! # => \fuga
B.name! # => \B
b = new B id: 1
b.hoge! # => \fuga
b.id # => 1
Function
->
演算子で関数定義を行うことが出来き、関数の実行は()
や!
で行うことが出来ます。
引数がある場合は、CoffeeScriptと同様に()
を省略することが出来ます。
また、引数を宣言しておらず関数内でit
句を使用すると自動的にit
が定義されます。
func = -> it + 2 # function(it){ return it + 2; }
func 2 # => 4
add = (+) # function(x, y){ return x + y;}
add 1 2 # => 3
# default parameter
add = (x = 1, y = 2)-> x + y
add! # => 3
add 1 # => 4
set-cords = ({x, y})-> "#x, #y"
set-cords y: 2, x: 1 # => '1, 2'
Currying
関数型言語の特徴の一つでもあるカリー化した関数を定義することが出来ます。
times = (x, y)--> x * y
times 3, 5 # => 15
double = times 2
double 5 # => 10
Piping
F#やElixirでも出てくるパイプ演算子|>
(パイプライン演算子)を使用することが出来ます。
left |> right
だと、right(left)
となります。
x = [1 2 3] |> reverse |> head #=> 3
[1 to 10] |> map ( * 3) |> filter ( > 10)
BackCalls
BackCallsはコールバックによって生み出されるインデントの深さの苦しみから開放されます。
# Normal
mysql.query sql, (err, A)->
mysql.query sql, (err, B)->
C = A! + B!
...
# BackCalls
err, A <- mysql.query sql
err, B <- mysql.query sql
C = A! + B!
...
まとめ
LiveScriptは究極のめんどくさがりが使う関数型言語です。
CoffeeScriptも他のAltJSに比べれば結構省略できることが多いですがLiveScriptは更にそれを超えています。
CoffeeScriptからの移行もそこまで複雑ではなく、公式ドキュメントにも移行ガイドが書いてあるので、
比較的簡単に導入することが出来るのかなと思っています。
npmでグローバルインストールするとインタプリタが使えるので、ターミナルでも気軽にお試しできます。
この記事や公式ドキュメントを読んで少しでもLiveScripterが増えてくれたら嬉しい限りです。
(LiveScriptは中毒性がありますので、用法用量を守って正しくお使い下さい。
~~ 中毒になるとLiveScript無しでは生きていけなくなります。)~~