読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

javascript/node.js 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をコレ扱い等々)