21
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

関西フロントエンドUGAdvent Calendar 2015

Day 19

LiveScriptとは?

Last updated at Posted at 2015-12-19

関西フロントエンド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無しでは生きていけなくなります。)~~

21
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?