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
再帰関数を使ってみよう
Search
Yoshiaki Itakura
December 02, 2020
Programming
6.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
再帰関数を使ってみよう
フロントエンドLT会 vol.2 - 2020冬まつり
の LT 用のスライドです。
Yoshiaki Itakura
December 02, 2020
More Decks by Yoshiaki Itakura
See All by Yoshiaki Itakura
Elementをさくっと拡張したい - @【ラクスル×KCF】FrontendNight
negibouze
0
590
Other Decks in Programming
See All in Programming
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.8k
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
320
JRuby: Past, Present, and Future
headius
0
220
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
350
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
250
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
160
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
390
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
5.7k
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.3k
AWSに止められる覚悟してますか?
morizo_1984
2
490
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.3k
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
520
From π to Pie charts
rasagy
1
380
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
240
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
440
First, design no harm
axbom
PRO
2
1.3k
How GitHub (no longer) Works
holman
316
150k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
540
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
390
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
520
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
340
Transcript
再帰関数を使ってみよう 板倉 義晃(@ita_3y) @フロントエンドLT会 vol.2 - 2020冬まつり
本日のお品書き 1. 再帰関数 とは(30秒) 2. 再帰関数の例(30秒) 3. 実践1: オブジェクトから不要な値を取り除く(1分〜2分) 4.
実践2: 関数を定期的に実行する(2分) 5. 自己紹介(余った時間) 6. まとめ
再帰関数 とは あるものについて記述する際に、記述しているものそれ自身への参照が、そ の記述中にあらわれることをいう。(Wikipedia) 再帰 とは 再帰呼び出し とは 手続きや関数といった概念をもつプログラミング言語で、ある手続き中で再び その手続き自身を呼び出すこと。(Wikipedia)
再帰関数 とは 再帰的(自分自身を呼び出す)な関数のこと。
再帰関数の例 "There are 3 left." "There are 2 left." "There
are 1 left." "Finished." 終了条件が無いと無限ループするの で、なるべく先に書いておく。 再帰呼び出し
実践1: オブジェクトから不要な値を取り除く やりたいこと ・値 が null の場合は undefined を返す ・値
が Array の場合は null を undefined に変換した Array を返す ・値 が Object の場合は 値が null のプロパティを削除した Object を返す
実践1: オブジェクトから不要な値を取り除く ・x が null の場合 => undefined を返す ・x
が Array の場合 => Array の要素毎に removeNull を呼び出し (再帰呼び出し)、結果を返す ・val が Object の場合 => 値が null のプロパティ削除後に、値毎に removeNull を呼び出し(再帰呼び出し)、結果を オブジェクトにして返す
実践1: オブジェクトから不要な値を取り除く
実践2: 関数を定期的に実行する setTimeout と setInterval について 指定時間経過後、一度だけ関数を実行します。 setTimeout 各実行の間は指定した間隔で、定期的に関数を実行します。 setInterval
再帰的な setTimeout は実行の間の遅延を保証しますが、 setInterval は保証しません。 setInterval は関数の実行時間がインターバルに含まれるため、実際の遅延は指定時間よりも短 くなります。 再帰的な setTimeout は固定の遅延を保証します。 https://ja.javascript.info/settimeout-setinterval 再帰的な setTimeout と setInterval
実践2: 関数を定期的に実行する ・タイマースタート時 => execute を指定して、setTimeout を呼び出 す ・execute 関数実行時
=> 自身(execute)を指定して、setTimeout を呼 び出す(再帰呼び出し) ・タイマーストップ時 => clearTimeout を呼び出して処理をキャンセ ルする https://gist.github.com/negibouze/6a8574432210ea87d6eef2bebcc03712 ※長いので画像は一部抜粋したものです。
自己紹介 ・板倉 義晃(いたくら よしあき) ・Twitter: @ita_3y ・GitHub: negibouze
まとめ ・オブジェクトの探索等、再帰的な処理をしたい時は再帰関数が使えるかも ・再帰呼び出しをする時は、必ず終了条件があることを確認しよう ・等間隔の遅延を入れたい時は setTimeout の再帰呼び出しが良いかも ・JavaScript で再起呼び出しをする時はスタックオーバーフローに注意しよう ご清聴ありがとうございました。 参考:
JavaScript・再帰・トランポリン https://qiita.com/41semicolon/items/985bdd2f551d9392463c