Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

altJSの一、livescriptが実際恐ろしくて泣いた

livescriptはaltJSの類です。
現状、Wikipediaに雑な紹介記事がある位の知名度ですが、極めて強力なやつです。
私はcoffeeスクリプトですら恐ろしくて触れない軟弱者なのですが、
知人から受け取ったサンプルがlivescriptで記述されていたので、
読み込みがてら、ちょっと構文について調べてみました。

導入

npmで入れます。現代的ですね

$ npm install -g livescript

とりあえず結果を知りたいだけなら、-pオプションで結果を見ることができます。

livescript驚異の超絶記法

数値周り

Rubyよろしく、可視性向上のアンダーバーは削ってくれます。
……しかも、末尾にくっついた記号まで消してくれるという謎仕様。

$ echo '37_000JPY' | lsc -p
37000

また、JS系のくせにN進数記法にも対応しています

$ echo '16~ff' | lsc -p
255

requireまわり

今回一番驚愕したのが、こちら。

node.jsなんかではお馴染みの以下のような記法

var foo = require('foo')
     ,bar = require('bar');

「なんだって同名のパラメータを用意しなきゃならんのよ?」てな感じでしたが
Livescriptは、そういった問題を斜め上な記法ですっ飛ばします。
package.jsで必要なものを導入しておいた上で、

$ cat require.ls 
require! <[ express  express-session  passport  errorhandler  path ]>
require! 'passport-http': {BasicStrategy, DigestStrategy}

てなlivescriptを

$ cat require.ls | lsc -pc

コンバートしてみます。すると……

// Generated by LiveScript 1.4.0
(function(){
  var express, expressSession, passport, errorhandler, path, ref$, BasicStrategy, DigestStrategy;
  express = require('express');
  expressSession = require('express-session');
  passport = require('passport');
  errorhandler = require('errorhandler');
  path = require('path');
  ref$ = require('passport-http'), BasicStrategy = ref$.BasicStrategy, DigestStrategy = ref$.DigestStrategy;
}).call(this);

いや、これオカシイでしょ(困惑
必要な関数に突っ込むところまで、よろしくやってくれます。
詳しくみていくと、

require! jQuery: $

と、ライブラリ名のあとに変数名を突っ込むと

  var $;
  $ = require('jQuery');

と展開されたりします。

まとめ

と、ザックリとlivescriptのイカれた部分を見てきました。
他にも色々カッ飛んだ記法があるのですが、それは別の機会に書いていこうとおもいます。

参考もと

LiveScript - a language which compiles to JavaScript

編集履歴

  • 2015/06/27 一部不適当な表現を修正(サンプルコードという表現、livescriptをコレ扱い等々)