Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
LiveScript @ Front-End Developers Taiwan Party#5
Search
Chia-liang Kao
February 16, 2014
Technology
8
1k
LiveScript @ Front-End Developers Taiwan Party#5
Chia-liang Kao
February 16, 2014
Tweet
Share
More Decks by Chia-liang Kao
See All by Chia-liang Kao
Civic Tech as PPP
clkao
0
130
開放政府開了沒?
clkao
0
250
Scaling Civic Tech & Open Source
clkao
0
190
Fork and Merge: Collaboration in Civic Tech
clkao
0
240
Civic Tech & Public Services
clkao
0
100
g0v @ GSDI
clkao
0
220
g0v @ GEO-7
clkao
1
180
g0v @ NYC: Fork & Merge
clkao
0
320
Civic Tech Party
clkao
0
250
Other Decks in Technology
See All in Technology
更新系と状態
uhyo
7
1.9k
Amazon CloudWatch を使って NW 監視を行うには
o11yfes2023
0
180
4/17/25 - CIJUG - Java Meets AI: Build LLM-Powered Apps with LangChain4j (part 2)
edeandrea
PRO
0
130
AIと共に乗り越える、 入社後2ヶ月の苦労と学習の軌跡
sai_kaneko
0
120
コードや知識を組み込む / Incorporating Codes and Knowledge
ks91
PRO
0
120
Writing Ruby Scripts with TypeProf
mame
0
370
Making a MIDI controller device with PicoRuby/R2P2 (RubyKaigi 2025 LT)
risgk
1
320
地味にいろいろあった! 2025春のAmazon Bedrockアップデートおさらい
minorun365
PRO
1
480
バクラクの認証基盤の成長と現在地 / bakuraku-authn-platform
convto
4
720
Стильный код: натуральный поиск редких атрибутов по картинке. Юлия Антохина, Data Scientist, Lamoda Tech
lamodatech
0
800
SDカードフォレンジック
su3158
1
640
Cross Data Platforms Meetup LT 20250422
tarotaro0129
1
760
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
135
33k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
Documentation Writing (for coders)
carmenintech
69
4.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Faster Mobile Websites
deanohume
306
31k
Docker and Python
trallard
44
3.3k
Code Review Best Practice
trishagee
67
18k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.3k
Transcript
LiveScript Chia-liang Kao
[email protected]
@clkao Perl Hacker Emacs User Paraglider Pilot
None
New Spine New Life New Project New Language New Editor
None
好⼈人卡 • has Good Parts • was originally called LiveScript
• renamed to JavaScript when Netscape shipped browser with Java support (?!) JavaScript
“What’s the difference between Java and Javascript?”
Java -vs- JavaScript
Language Tax (perl) sub {! my $self = shift;! $self->foo;!
} use method-invoker;! method {! $->foo;! }
Language Tax var x = function(foo) { return foo*foo }!
x(10) # LiveScript x = -> it * it x 10
Language Tax (JavaScript) [1,2,3].map(function(it) { return it * 2 })
Implicit return # LiveScript [1,2,3].map (d) -> d * 2 [1,2,3].map -> it * 2 [1,2,3].map (* 2) Implicit argument shorthand
LiveScript • forked from Coco Feb 2012 • concise syntax
• backcall • comprehension • destructuring • http://livescript.net Go there and try compiling
None
Language Tax $('#element').click(function(){! this.dothis().dothat();! var that = this;! $('.elements').each(function(e){! that.method(e);!
});! }); $('#element').click ->! this.dothis().dothat()! that = this! $('.elements').each (e) ->! that.method e use ->, minimum livescript requirement {} ()
$('#element').click ->! this.dothis().dothat()! $('.elements').each (e) ~>! this.method e $('#element').click ->!
this.dothis().dothat()! that = this! $('.elements').each (e) ->! that.method e bound call, => in coffee script
$('#element').click ->! @dothis().dothat()! $('.elements').each (e) ~>! @method e $('#element').click ->!
this.dothis().dothat()! $('.elements').each (e) ~>! this.method e @ ≡ this
$('#element').click ->! @dothis!.dothat!! $('.elements').each (e) ~>! @method e $('#element').click ->!
@dothis().dothat()! $('.elements').each (e) ~>! @method e func! ≡ func()
$('#element')click ->! @dothis!dothat!! $('.elements')each (e) ~>! @method e $('#element').click ->!
@dothis!.dothat!! $('.elements').each (e) ~>! @method e . after ) ] ! are optional
<- $('#element').click! @dothis!dothat!! $('#element').each (e) ~>! @method e $('#element').click ->!
@dothis!dothat!! $('#element').each (e) ~>! @method e backcall FTW! Backcall
<- $(’#element’).click! @dothis!dothat!! e <~ $(’.elements’).each! @method e <- $(’#element’).click!
@dothis!dothat!! $(’.elements’).each (e) ~>! @method e bound back call too Backcall (cont.)
Language Tax $('#element').click(function(){! this.dothis().dothat();! var that = this;! $('.elements').each(function(e){! that.method(e);!
});! }); LS JS <- $(’#element’).click! @dothis!dothat!! e <~ $(’.elements’).each! @method e
Language Tax $('#element').click(function(){! this.dothis().dothat();! var that = this;! $('.elements').each(function(e){! that.method(e);!
});! }); <- $ ’#element’ .click! @dothis!dothat!! e <~ $ ’.elements’ .each! @method e LS JS optional ()
$('#element').click(function(){! var this$ = this;! this.dothis().dothat();! return $('.elements').each(function(e){! return this$.method(e);!
});! }); <- $('#element').click! @dothis!dothat!! e <~ $('#element').each! @method e % livescript --bare -c
Function Helpers [1,2,3].map(function(it) { return it * 2 }) [1,2,3].map
(* 2) [{k:1},{k.2}].map(function(it) { return it.k }) [1,2,3].map (it) -> it.k [1,2,3].map -> it.k [1,2,3].map (.k) [1,2,3].filter(function(it) { return it > 2}) [1,2,3].filter (it) -> it > 2 [1,2,3].filter (> 2)
Object Helper # some data users = * name: 'clkao'
tags: <[g0v ly livescript]> * name: 'tyler' tags: <[clbc]> * name: 'BoBChao' tags: <[kktix coscup]> List of strings List of objects
Comprehension r = {[key, val * 2] for key, val
of {a: 1, b: 2}}! # r => {a: 2, b: 4}! r = ["#x#y" for x in <[a b]> for y in [1 2]]! # r => ['a1','a2','b1','b2']!
Destructuring [first, second] = [1, 2]! [head, ...tail] = [1
to 5]! {name:name, age:age} = {weight: 110, name: 'emma', age: 20}! ! {name, age} = {weight: 110, name: 'emma', age: 20}! ! {Foo:{name, age}} = {Foo: {weight: 110, ! name: 'emma', age: 20}}! !
Destructuring (cont.) # assignment! a = {foo: bar, baz: baz,
woot: [a1, a2] }! a = {foo: bar, baz, woot: [a1, a2] }! ! # vs! ! { foo: bar, baz: baz, woot: [a1, a2] } = a! { foo: bar, baz, woot: [a1, a2] } = a! { foo: bar, baz, woot: [a1, a2] }:res = foo!
Many more x = 10! do ->! x = 5!
x #=> 10! ! do ->! x := 2! x #=> 2! a = [2 7 1 8]! ..push 3! ..shift!! ..sort!! a #=> [1,3,7,8]!
Too new a language? • new languages are no longer
big deals • compiles to JavaScript, still readable • and (sort of) back, js2coffee • ambiguity? sugar that makes sense • language stability? 1.2.0 released!
Questions?
Thank You!