Help us understand the problem. What is going on with this article?

LiveScriptとは?

More than 3 years have passed since last update.

関西フロントエンドUG Advent Calendar 2015 19日目の記事です。

11/21に行われた「2016年のAltJSについて語る会」という関西フロントエンドUG主催の勉強会で、
AltJSの一つであるLiveScriptについてお話してきました。

LiveScriptとは?

  • 公式ドキュメント livescript.net
  • CoCo(CoffeeScriptのフォーク)のフォーク
  • 今流行の関数型っぽくCoffeeScriptライクに書ける
  • npm i -g livescript

livescript-top.png

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

prelude-ls.png

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無しでは生きていけなくなります。)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away