Your SlideShare is downloading. ×
マイナーAlt JS百花繚乱
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

マイナーAlt JS百花繚乱

5,493
views

Published on


0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,493
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
9
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. マイナーAltJS百花繚乱 esehara shigeo
  • 2. !! WARNING !! スライドが50枚以上あるので 高速でやります。気になるところは あとでスライドで読んでください
  • 3. 開始
  • 4. JavaScript:: The World's Most Misunderstood Programming Language (もっとも誤解された プログラミング言語) Douglas Crockford JavaScript: The Good Parts
  • 5. The World's Most Misunderstood Programming Language Has Become the World's Most Popular Programming Language.
  • 6. But….
  • 7. 未知との -prototype- 遭遇
  • 8. 大規 模化
  • 9. 疲労する コーダー
  • 10. Help… (もうJavaScriptは書きたくない)
  • 11. CoffeeScript を汝に捧げよう
  • 12. 救いは Translator
  • 13. 光 main stream
  • 14. CoffeeScript JavaScript Translatorの元祖かつ本命
  • 15. TypeScript Microsoftの本気
  • 16. Haxe マルチプラットフォームかつ堅牢な型システム
  • 17. JSX 人間を超える機械の最適化
  • 18. But….
  • 19. 闇 sub stream
  • 20. その前に
  • 21. お前 誰だ
  • 22. esehara shigeo 趣味:言語いじり Pythonista Clojuren←New!! JavaScript歴 :: jQuey plugin書いたり
  • 23. こういうのを書いて遊んでます
  • 24. 闇AltJS とは?
  • 25. 個性豊かな ダイアの原石のような Alternative JavaScript (No main)
  • 26. 彼らに 光を
  • 27. GorillaScript ニンニクヤサイSyntaxマシマシ
  • 28. 目的 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.
  • 29. 現実(FizzBuzz) const fizzbuzz_strings = * "Fizz" * "Buzz" * "FizzBuzz" let is_fizz(x) x % 3 == 0 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 let is_buzz(x) x % 5 == 0 for i in 1 til 100 console.log fizzbuzz(i) let is_fizzbuzz(x) x % 15 == 0
  • 30. Syntaxを見てみよう Let’s view syntax.
  • 31. 解説 constは文字通り定数です そしてアスタリスクは配列を作るためです const fizzbuzz_strings = * "Fizz" * "Buzz" * "FizzBuzz"
  • 32. 解説 letは宣言です。関数を定義する場合は、イコール を使わず、インデントだけにします。変数の場合 は"=”を使う。ちなみにこの宣言はimmutable(変 更不可)なので、mutable(変更可能)にしたいとき は let mutableという宣言にしないといけない。 let is_fizzbuzz(x) x % 15 == 0
  • 33. 解説 馴染み深い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
  • 34. Kal 非同期時代の申し子
  • 35. FizzBuzz 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 x=0 until x is 99 x += 1 wait for result from fizzbuzz x print result
  • 36. Syntaxを見てみよう Let’s view syntax.
  • 37. 解説 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]
  • 38. ちなみに このような非同期処理の最中に、処理を 一回ブロックして待ち受ける実装は、Go言 語のChannel、Clojureのcore.asyncなど で採用されていたりする。
  • 39. Roy 関数型JavaScriptのニューカマー
  • 40. FizzBuzz data Option a = let optionMonad = { Some a | None return: x -> Some x let is_fizz x = bind: x f -> match x if x % 3 == 0 then case (Some a) = f a Some "Fizz" else case None = None () } 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 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
  • 41. Syntaxを見てみよう Let’s view syntax.
  • 42. 解説 RoyではHaskell likeの型を宣言することが出来ま す。この場合は、SomeかNoneの型を取るOption 型を宣言しています。この場合、値を持つSome か、あるいは値を持たないNoneのいずれかの型 を持つということになります(Scalaとかでも見ます ね) data Option a = Some a | None
  • 43. 解説 型を宣言したら、オブジェクトリテラルで使用するこ とができます let optionMonad = { return: x -> Some x bind: x f -> match x case (Some a) = f a case None = None () }
  • 44. 解説 あとは、<-という記法で結果を束縛したり、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
  • 45. ちなみに Royの作者は、アメリカのJSCONF 2012 のときに、Monad SyntaxはCallback地 獄に対してすっきりすると述べている(実 はRoyのMonad Syntaxはコールバック に変換される。例としてAjax Monad(!!)の アプローチなどを紹介している)
  • 46. おまけ
  • 47. ClojureScript King of 闇のAltJS
  • 48. ClojureScript
  • 49. ClojureScript いいところ LISP
  • 50. ClojureScript わるいところ LISP
  • 51. 冗談はおいておくとして 元々、JVM言語であるClojureを元に実装 しており、Clojure公式のGitHub Groupで もポートされているので、Clojureが死なな ければたぶんClojureScriptも死なない
  • 52. 冗談はおいておくとして さらに言えば、Clojure + ClojureScriptで 使えるライブラリもそこそこあったりするの で、他の言語のエコシステムと比較しても 面白い
  • 53. 冗談はおいておくとして ただ自分の場合、まだ上手い感じで書け ないのでJavaScriptがでかくなる(ただし ロジックは書きやすい)
  • 54. 以上
  • 55. 良きJavaScript lifeを! Happy Hacking JavaScript Life!!