Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
List processing in JS: functional programming a...
Search
chikoski
December 28, 2016
Technology
630
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
List processing in JS: functional programming approach
chikoski
December 28, 2016
More Decks by chikoski
See All by chikoski
20210825_ossx
chikoski
0
360
festudy02-wasm
chikoski
1
1.1k
An overview of WebAssembly; how it is used, created, and applied?
chikoski
1
800
Functions in JavaScript
chikoski
1
1.3k
20171018-WASM
chikoski
2
1.5k
20171002-wejs
chikoski
1
630
20170924-html5conference-wasm
chikoski
5
10k
Equivalence_in_JS
chikoski
0
1.6k
いまさら振り返るPromise
chikoski
1
630
Other Decks in Technology
See All in Technology
全PRの83%が AIレビューだけでマージできるようになった開発組織は その後どうなったか @2026/10
athug
0
140
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
0
120
12 個 Tool と、 4,096 Token
hlum
0
150
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
720
使いこなすために知っておきたい Azure SRE Agent アンチパターン
torumakabe
2
480
【Data Engineering Summit2026_登壇資料】医療ビッグデータ×AIエージェントを支えるデータ基盤とハーネスエンジニアリング
jmdc_presentation
0
140
パッチ更新でterraform initが落ちた日
grimoh
1
120
How to Design Configuration for Rails Applications
willnet
0
230
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
200
大型犬好きによるPugの紹介
yamanoku
1
150
その Valkey 使いこなしていますか?
onk
PRO
3
300
ソフトウェア ファクトリー - 再現性のあるソフトウェアの工場づくり / Software factory
iktakahiro
3
980
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Product Roadmaps are Hard
iamctodd
55
13k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
430
Leo the Paperboy
mayatellez
10
2.4k
Designing for Performance
lara
612
70k
Building an army of robots
kneath
307
47k
Marketing to machines
jonoalderson
1
5.9k
We Are The Robots
honzajavorek
0
400
Transcript
リスト操作と関数プログラミング Mozilla Japan N.Shimizu (
[email protected]
) We are JavaScripters #2
/4IJNJ[V!DIJLPTLJ ˖ ⛆加㖩ח֮8FC⡲⠓爡ד⫴ְגְתׅ ˖ Ĥ Ĥ ˘ ̔խĥ ˖ 'JSFGPY
%FW5PPMT 'JSFGPYGPSJ04 ˖ 3VTUBTNKT8FC"TTFNCMZ8FC73 ˖ فؚٗٓىؚٝ鎉铂ה؟حؕ٦鋅ךָ㥨ֹדׅ ˖ 㘗ך䓼ְ鎉铂ָ㥨ֹדׅ ˖ IUUQTTQFBLFSEFDLDPNDIJLPTLJ
debugger.html:再開発中のFirefox 組み込みのデバッガー • React と Redux、flow を使って実装されています • スタンドアローンで実行できます •
Firefox だけでなく、Google Chromeやnode.jsで動いているコードもデバッグできます • https://github.com/devtools-html/debugger.html
Remote Debugging Protocol / Chrome Debugging Protocol のフロントエンド $ISPNF%FCVHHJOH1SPUPDPM $ISPNF%FCVHHJOH1SPUPDPM
3FNPUF%FCVHHJOH1SPUPDPM
&EJUPS 3JHIU4JEF#BS React x Redux 4PVSDFT 4PVSDFT5BCT %SBHHBCMF %SBHHBCMF
目的 ツール UIコンポーネント Ract 状態管理 Redux, React-Redux 実装言語 Flow ビルドツール
webpack テスト ESLint, mocha, mochitest パッケージ管理 Yarn ツールチェーン
https://github.com/devtools-html/debugger.html
コマンドライン "QQMJDBUJPOT'JSFGPYBQQ$POUFOUT.BD04SFGPYCJO= TUBSUEFCVHHFSTFSWFS1EFWFMPQNFOU "QQMJDBUJPOT(PPHMF=$ISPNFBQQ$POUFOUT.BD04(PPHMF=$ISPNF= SFNPUFEFCVHHJOHQPSU OPEFJOTQFDUNZTFSWFSKT リモートデバッグのためのオプションをつけてFirefox/Chrome/nodeを起動
コマンドライン OQNJOTUBMMHZBSO HJUDMPOFHJU!HJUIVCDPNEFWUPPMTIUNMEFCVHHFSIUNMHJU DEEFCVHHFSIUNM ZBSOJOTUBMM ZBSOSVO ZBSOSFGPY ZBSODISPNF OPEFJOTQFDUFYBNQMFTDSJQUKT debugger.htmlを利用するには
JSON <\ EFTDSJQUJPO EFWUPPMT'SPOUFOE6SMEFWUPPMTJOTQFDUPSIUNM XTMPDBMIPTU EFWUPPMTQBHFDBGBEBBCDG GBWJDPO6SMIUUQTXXXHPPHMFDPNJNBHFTJDPOTQSPEVDUDISPNFQOH
JEDBGBEBBCDG UJUMFأة٦زؖ؎س UZQFQBHF VSMIUUQTXXXHPPHMFDPNJOUMKBDISPNFCSPXTFSXFMDPNFIUNM XFC4PDLFU%FCVHHFS6SMXTMPDBMIPTUEFWUPPMTQBHF DBGBEBBCDG ^> Chromeで開いているタブの一覧は、JSONで取得できます
DPOTUQBOFMT\ 'JSFGPYUIJTSFOEFS'JSFGPY1BOFM $ISPNFUIJTSFOEFS$ISPNF1BOFM /PEFUIJTSFOEFS/PEF1BOFM ^ TOJQ QBOFMT<UIJTTUBUFTFMFDUFE1BOF>
UBCTWBMVF4FR NBQ UBCEPNMJ \DMBTT/BNFUBC LFZUBCHFU JE PO$MJDL \ XJOEPXMPDBUJPO HFU5BC63- UBC QBSBN/BNF ^ ^ EPNEJW \DMBTT/BNFUBCUJUMF^ UBCHFU UJUMF EPNEJW \DMBTT/BNFUBCVSM^ UBCHFU VSM 開いているタブ一覧の描画部分
DPOTUMJTU< ˘ > MFUTVN GPS
MFUJJMJTUMFOHUIJ \ JG MJTU<J> \ TVN.BUIQPX MJTU<> TVN ^ ^ DPOTPMFMPH Aַתדךך⩐侧ך✳⛦ㄤכ\TVN^A タブの描画はこれと同じ構造をしています
GVODUJPOBEE B C \ SFUVSOB C ^ WBSBEEGVODUJPO B C
\ SFUVSOB C ^ WBSBEE B C B C DPOTPMFMPH A \BEE ^A JavaScriptで関数は値です
DPOTUPQFSBUJPO\ BEE B C B C TVC B C
BC NVM B C B C EJW B C BC ^ PQFSBUJPOBEE PQFSBUJPOTVC PQFSBUJPONVM PQFSBUJPOEJW DPOTUPQFSBUJPOOFX.BQ < <BEE B C B C> <TVC B C BC> <NVM B C B C> <EJW B C BC> > PQFSBUJPOHFU BEE PQFSBUJPOHFU TVC PQFSBUJPOHFU NVM PQFSBUJPOHFU EJW 値なので、オブジェクトの属性にできます
GVODUJPOIFMMP OBNF \ SFUVSOA)FMMP \OBNF^A ^ GVODUJPOHSFFUJOHT OBNF NFTTBHF#VJMEFS \
DPOTPMFMPH NFTTBHF#VJMEFS OBNF ^ HSFFUJOHT XPSME IFMMP 高階関数:関数を引数にとったり、関数を返したりする関数
DPOTUMJTU< ˘ > DPOTUJT&WFO/VNCFSOO DPOTUQPXO.BUIQPX
O DPOTUBEE B C B C DPOTUTVNMJTUMUFS JT&WFO/VNCFS NBQ QPX SFEVDF BEE DPOTPMFMPH Aַתדךך⩐侧ך✳⛦ㄤכ\TVN^A 高階関数を使うと、リスト処理がキレイにかけます
DPOTUMJTU< > GVODUJPOJT&WFO/VNCFS O \ SFUVSOO ^ DPOTUFWFO/VNCFST
MJTUGJMUFS JT&WFO/VNCFS Array.prototype.filter:関数の評価値が true のものを集めた新しい配列を作成する USVF GBMTF
DPOTUMJTU< > GVODUJPOBEE B C \ SFUVSOB C
^ DPOTUTVNMJTUSFEVDF BEE B C B C B C Array.prototype.reduce:左畳み込み
GVODUJPOSBOHF GSPN UP \ DPOTUTJ[FUPGSPN SFUVSO"SSBZ TJ[F MM
NBQ WBMVF JOEFY JOEFY GSPN ^ DPOTUTVNSBOHF MUFS OO SFEVDF B C B C DPOTPMFMPH Aַתדךך⩐侧ך筨ㄤכ\TVN^A map:配列の要素1つ1つに関数を適用して、その結果を集めた新しい配列を作ります
Viewの作成
DPOTUFOEQPJOUAIUUQTBQJOZUJNFTDPNTWDUPQTUPSJFTW IPNFKTPO BQJLFZ\BQJ,FZ^A DPOTUDPOUBJOFSEPDVNFOURVFSZ4FMFDUPS DPOUBJOFS GFUDI FOEQPJOU UIFO SFTQPOTFSFTQPOTFKTPO
UIFO EBUBEBUBSFTVMUT UIFO BSUJDMFTSFOEFS BSUJDMFT UIFO SFOEFSFEDPOUBJOFSBQQFOE$IJME SFOEFSFE New York Times の新着記事一覧の取得
GVODUJPOSFOEFS BSUJDMFT \ DPOTUDPOUBJOFSEPDVNFOURVFSZ4FMFDUPS DPOUBJOFS SFUVSOBSUJDMFTNBQ BSUJDMFSFOEFS"SUJDMF BSUJDMF
VOTIJGU EPDVNFOUDSFBUF'SBHNFOU SFEVDF QBSFOU FMN \ QBSFOUBQQFOE$IJME FMN SFUVSOQBSFOU ^ ^ レンダリング:記事を表すオブジェクトを、HTMLElementNodeに変換することと捉える
GVODUJPOSFOEFS"SUJDMF BSUJDMF \ DPOTUUFNQMBUFEPDVNFUORVFSZ4FMFDUPS UFNQMBUFBSUJDMF DPOTUNFEJBBSUJDMFNFEJBOE NNGPSNBUUIVNCOBJM UFNQMBUFRVFSZ4FMFDUPS
UIVNCOBJM TSDNFEBVSM UFNQMBUFRVFSZ4FMFDUPS UJUMF UFYU$POUFOUBSUJDMFUJUMF SFUVSOEPDVNFOUJNQPSU/PEF UFNQMBUF USVF ^ 各記事のレンダリング例
まとめ • map / reduce は強力なフレームワークです • ほとんどの繰り返し処理をこれで記述できます • 繰り返す処理にのみ注力してプログラムをかけます
• つまりコードが読みやすくなる • filter / find を使うとキレイに必要なデータだけを抜き出せます • 元の配列を破壊しません • プログラム中の、ほかの部分への影響を与えなません • デバッグがしやすくなります • debugger.html ためしてください!