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
TypeScriptの言語仕様から考えるイテレータの定義
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ユート
December 23, 2025
24
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TypeScriptの言語仕様から考えるイテレータの定義
大学のサークルでLTやったのでネットに流しとくだけ.
ユート
December 23, 2025
Transcript
15 slides
TypeScript の言語仕様から考えるイテレータの定義 December 23, 2025
▶ 目次 1 導入 2 2 つのプロトコル 3 反復可能プロトコル 4
イテレータプロトコル 5 まとめ 2 / 10
導入
▶ 導入: イテレータへの問い よくある説明 イテレータは「データ構造の中にあるデータを取り出すためのカーソル」である。 しかし、これで十分だろうか? プログラミングにおいて、すべての挙動は詳細に定義されている。 「カーソル」という抽象的な表現だけでなく、言語仕様(TypeScript)の観点から詳細を理解する必 要がある。 3
/ 10
▶ はじめに: イテレータの役割 イテレータとは データ構造の内部構造を無視して、統一的な操作で「次のデータ」を取得する仕組み。 • メリット: 利用者はデータ構造(配列, Map, Set
等)を気にせずループを書ける。 • 例: Set や Map • 「n 番目」という概念がないため、カウンタ変数 (i) ではアクセス不可。 • イテレータが「現在の参照点」を保持し、次の要素へ誘導する。 4 / 10
2 つのプロトコル
▶ イテレータを構成する 2 つのプロトコル イテレータの仕組みは、以下の 2 つのプロトコル(取り決め)によって成り立っている。 1 反復可能プロトコル (Iterable
Protocol) • 「私はループできます」と宣言するためのプロトコル。 • イテレータを生成するファクトリメソッドを定義。 2 イテレータプロトコル (Iterator Protocol) • 実際の「反復動作」を定義するプロトコル。 • 次の値をどう出すか、いつ終わるかを管理。 5 / 10
反復可能プロトコル
▶ 反復可能プロトコル (Iterable Protocol) オブジェクトに「反復動作」を定義・カスタマイズさせるための契約。 • for...of ループは「次のデータをください」と要求するだけ。 • 「順序」や「終了」のルールはオブジェクト側が持つ必要がある。
Listing 1: Iterable の定義 1 // この「契約」を満たすことが、プロパティの定義である 2 interface Iterable<T> { 3 // 1. キーは Symbol.iterator 4 // 2. 値は「引数なし」で「Iterator」を返す関数 5 [Symbol.iterator](): Iterator<T>; 6 } 6 / 10
▶ ジェネリクス <T> と型推論 型引数 <T> の役割 <T> はジェネリクスであり、ループで取り出されるデータの型を表す。 TypeScript
はこの定義のおかげで、ループ変数の型を自動推論できる。 Listing 2: 型推論の例 1 // Iterator<string> と定義されている場合 2 for (const value of object) { 3 // value は自動的に string 型と推論される 4 console.log(value.toUpperCase()); // 安全に実行可能 5 } 7 / 10
イテレータプロトコル
▶ イテレータプロトコル (Iterator Protocol) 「実際にどう動くか」を定義する法律。 Listing 3: iterator の定義 1
interface Iterator<T> { 2 next(...args: any[]): IteratorResult<T>; 3 return?(value?: any): IteratorResult<T>; 4 throw?(e?: any): IteratorResult<T>; 5 } • next() 次の値を生成する(必須) 。 • return() 途中で中断する場合に呼ばれる。 • throw() イテレータ内部にエラーを報告する。 8 / 10
▶ IteratorResult インターフェース next() メソッドの戻り値は、必ず以下の形式である。 Listing 4: IteratorResult 1 type
IteratorResult<T> = 2 | { done: false; value: T } // 続きがある 3 | { done: true; value: undefined }// 終了 パターン A: 継続 • done: false • value: "Apple" • 「まだ終わりじゃないです」 パターン B: 終了 • done: true • value: undefined • 「もう空っぽです」 9 / 10
まとめ
▶ まとめ 1 2 つのプロトコル:「反復可能プロトコル」と「イテレータプロトコル」の連携によりループが成 立する。 2 抽象化の力: 内部構造(配列、リスト、木構造など)を気にせず、統一された Symbol.iterator
経由で操作可能。 3 型安全性: TypeScript のジェネリクスにより、イテレータの中身に対しても型推論が効き、安全な 開発が可能。 「データ構造の中身を気にせず使用できる」 この抽象化こそが、大規模アプリケーションを安全に構築する鍵となる。 10 / 10
More Decks by ユート
See All by ユート
自宅サーバはどこまで再現できるのか - Proxmox VE上のVM環境をIaCとバックアップで戻してみた
youto
0
110
自己紹介をやるよ!!
youto
0
150
Terraformを用いてコードからVMを作成してみる
youto
0
28
3年間勉強して辿り着いた プログラミング勉強方法
youto
0
330
モチベーション維持アプリの構想と提案
youto
0
53
GitHubの使い方
youto
0
170
天気予報アプリの開発
youto
0
73
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
680
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
570
The Cost Of JavaScript in 2023
addyosmani
56
10k
HDC tutorial
michielstock
2
1k
Git: the NoSQL Database
bkeepers
PRO
433
67k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
630
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Google's AI Overviews - The New Search
badams
0
1.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Between Models and Reality
mayunak
4
580
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.7k