あなたがLittleSmallscriptを使うべきいくつかの理由
そういえばちゃんと書いた事なかったのでここらへんでまとめときましょう。
JavaScriptのボイラープレートを回避できる
returnて書かなくていい。
functionて書かなくていい。
prototypeって書かなくていい.
function () { return 1; } //js [1] //lss X.prototype.foo = function (x) { return 1; } //js !X foo: x 1 ! //lss
構文が少ない
C由来の悪しき構文、forやwhileやifなんかはなし。
全部メソッドでやる。
#(1 2 3) forEach: [:it | console log: it]. 1 !== 2 ifTrue: ['1 is not 2']. [xhrcall] tryCatch: [:err| alert value: err]
カスケードめっちゃ便利
Human new ; setName: #Mike ; setAge: 10
は
(function () { var _receiver = new Human(); _receiver.setName("Mike"); _receiver.setAge(10); return _receiver; })();
に変換される。これはthisとかモナドとかを返さないメソッドでも強制的にメソッドチェーンできるのでめっちゃ便利!
コンパイルされたjsがきれい
人間が読めるjsを吐き出す。js案件で仕事につかえることを目指してる。(実はもう使ってる)
自然なクラスベースオブジェクト指向
JavaScriptはプロトタイプベースな言語なのにcloneがなかったりする不思議な言語で、疑似クラスベースな書き方が一般化してる。全部functionでやるっていうのコンセプトとしては大好きだけどなにしろ記述量が増えるのできちんとしたクラスを作るのが面倒。結果、オブジェクト指向なコードとそうでないコードが混じり合ってphpみたいなことになりがち。
LittleSmallscriptはクラスベースオブジェクト指向の頂点であるSmalltalkの文法を使って記述するのでクラスベースなオブジェクト指向コードがきれいに自然に書ける。
Object subclass: #Animal variables: #(#name). !Animal setName: nm name := nm!. !Animal move: metre console log: name + ' moved ' + 'm.'!. Animal subclass:#Snake variables:#(). !Snake move Snake super: #move arguments:#(5) !. Snake new ; setName: 'Sammy the Python' ; move
function Animal () { this.name = null; } Animal.prototype = new Object(); Animal.prototype.setName = function (nm) { this.name = nm; }; Animal.prototype.move = function (metre) { console.log(this.name + ' moved ' + metre + 'm.'); }; function Snake () {} Snake.prototype = new Animal(); Snake.__super = Animal.prototype; Snake.prototype.move = function () { Snake.__super.move.call(this, 5); }; var s = new Snake(); s.setName('Sammy the Pyhton'); s.move();
開発スピードが落ちない
現在のディレクトリを監視して、*.stファイルに変更があった瞬間に自動でコンパイルする機能(littlesmallscript --watch)があるから、コンパイルを待つ必要がない。コンパイル自体も300行程度ならほんとに一瞬。
だいたいこんなとこかな。主観だけどSmalltalkの構文は書いてると自然に笑みがこぼれるほど好き。これ使い始めてから仕事が楽しくてしかたない。LittleSmallscript、オススメです。