マイナーalt js百花繚乱

Post on 06-May-2015

5.633 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

マイナーAltJS百花繚乱

esehara shigeo

スライドが50枚以上あるので高速でやります。気になるところはあとでスライドで読んでください

!! WARNING !!

開始

Douglas CrockfordJavaScript: The Good Parts

JavaScript::

The World's Most Misunderstood Programming Language

(もっとも誤解された

プログラミング言語)

The World's Most Misunderstood Programming Language Has Become the World's Most Popular Programming Language.

But….

未知との-prototype-遭遇

大規模化

疲労するコーダー

Help…(もうJavaScriptは書きたくない)

CoffeeScriptを汝に捧げよう

救いはTranslator

光main stream

CoffeeScriptJavaScript Translatorの元祖かつ本命

Microsoftの本気

TypeScript

マルチプラットフォームかつ堅牢な型システム

Haxe

人間を超える機械の最適化

JSX

But….

闇sub stream

その前に

お前誰だ

esehara shigeo趣味:言語いじり

PythonistaClojuren←New!!

JavaScript歴 :: jQuey plugin書いたり

こういうのを書いて遊んでます

闇AltJSとは?

個性豊かなダイアの原石のような

Alternative JavaScript(No main)

彼らに光を

GorillaScriptニンニクヤサイSyntaxマシマシ

Thus, one of GorillaScript's main goals is to optimize human thought by relieving as much stress and ceremony of coding as possible while simultaneously enabling the writing of beautiful code.

目的

const fizzbuzz_strings = * "Fizz" * "Buzz" * "FizzBuzz"

let is_fizzbuzz(x) x % 15 == 0

let is_fizz(x) x % 3 == 0

let is_buzz(x) x % 5 == 0

現実(FizzBuzz)

let fizzbuzz (x) switch case is_fizzbuzz(x) fizzbuzz_strings[2] case is_fizz(x) fizzbuzz_strings[0] case is_buzz(x) fizzbuzz_strings[1] default x

for i in 1 til 100 console.log fizzbuzz(i)

Syntaxを見てみよう

Let’s view syntax.

constは文字通り定数です

そしてアスタリスクは配列を作るためです

const fizzbuzz_strings = * "Fizz" * "Buzz" * "FizzBuzz"

解説

letは宣言です。関数を定義する場合は、イコール

を使わず、インデントだけにします。変数の場合

は"=”を使う。ちなみにこの宣言はimmutable(変更不可)なので、mutable(変更可能)にしたいとき

は let mutableという宣言にしないといけない。

let is_fizzbuzz(x) x % 15 == 0

解説

馴染み深いswitch文ですが、最初のswitchに変数を指定しな

いことで、簡易版if-elseとしても使えます。

let fizzbuzz (x) switch case is_fizzbuzz(x) fizzbuzz_strings[2] case is_fizz(x) fizzbuzz_strings[0] case is_buzz(x) fizzbuzz_strings[1] default x

解説

Kal非同期時代の申し子

task is_buzz (x) return x mod 5 == 0

task is_fizz (x) wait for buzz from is_buzz(x) fizz = x mod 3 == 0 return [fizz, buzz]

task fizzbuzz (x) wait for fizzbuzz from is_fizz(x) when fizzbuzz[0] and fizzbuzz[1] return "FizzBuzz" when fizzbuzz[0] return "Fizz" when fizzbuzz[1] return "Buzz" otherwise return x

FizzBuzzx = 0until x is 99 x += 1 wait for result from fizzbuzz x print result

Syntaxを見てみよう

Let’s view syntax.

taskとは、非同期処理が発生するfunction専門の宣言。

wait for foo from bar は、処理が返ってくるまで待機せよという

こと。

task is_buzz (x) return x mod 5 == 0

task is_fizz (x) wait for buzz from is_buzz(x) fizz = x mod 3 == 0 return [fizz, buzz]

解説

このような非同期処理の最中に、処理を

一回ブロックして待ち受ける実装は、Go言語のChannel、Clojureのcore.asyncなど

で採用されていたりする。

ちなみに

Roy関数型JavaScriptのニューカマー

data Option a =

Some a | None

let is_fizz x =

if x % 3 == 0 then

Some "Fizz"

else

None ()

let is_buzz x m =

if x % 5 == 0 then

match m

case (Some a) = Some (a ++ "Buzz")

case None = Some "Buzz"

else

m

FizzBuzzlet optionMonad = {

return: \x ->

Some x

bind: \x f -> match x

case (Some a) = f a

case None = None ()

}

let fizzbuzz x y = if x > y then console.log("") else let fizz = is_fizz x let result = (do optionMonad buzz <- is_buzz x fizz return buzz ) match result case (Some a) = console.log a case None = console.log x fizzbuzz (x + 1) y

fizzbuzz 1 100

Syntaxを見てみよう

Let’s view syntax.

RoyではHaskell likeの型を宣言することが出来ます。この場合は、SomeかNoneの型を取るOption型を宣言しています。この場合、値を持つSomeか、あるいは値を持たないNoneのいずれかの型を持つということになります(Scalaとかでも見ますね)

data Option a = Some a | None

解説

型を宣言したら、オブジェクトリテラルで使用することができます

let optionMonad = { return: \x -> Some x bind: \x f -> match x case (Some a) = f a case None = None ()}

解説

あとは、<-という記法で結果を束縛したり、case文で型による分岐をしたりすることができます

let fizzbuzz x y = if x > y then console.log("") else let fizz = is_fizz x let result = (do optionMonad buzz <- is_buzz x fizz return buzz ) match result case (Some a) = console.log a case None = console.log x fizzbuzz (x + 1) y

解説

Royの作者は、アメリカのJSCONF 2012のときに、Monad SyntaxはCallback地獄に対してすっきりすると述べている(実

はRoyのMonad Syntaxはコールバック

に変換される。例としてAjax Monad(!!)のアプローチなどを紹介している)

ちなみに

おまけ

ClojureScriptKing of 闇のAltJS

ClojureScript

ClojureScriptいいところ

LISP

ClojureScriptわるいところ

LISP

元々、JVM言語であるClojureを元に実装

しており、Clojure公式のGitHub Groupでもポートされているので、Clojureが死なな

ければたぶんClojureScriptも死なない

冗談はおいておくとして

さらに言えば、Clojure + ClojureScriptで使えるライブラリもそこそこあったりするの

で、他の言語のエコシステムと比較しても

面白い

冗談はおいておくとして

ただ自分の場合、まだ上手い感じで書け

ないのでJavaScriptがでかくなる(ただし

ロジックは書きやすい)

冗談はおいておくとして

以上

Happy Hacking JavaScript Life!!

良きJavaScript lifeを!

top related