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
Genericsについて改めて学んでみた
Search
o-ga
June 26, 2024
0
48
Genericsについて改めて学んでみた
TypescriptとGoのGenericsについて改めて学んだときに発表した資料です。
o-ga
June 26, 2024
Tweet
Share
More Decks by o-ga
See All by o-ga
GoConnect#9 2025.08.19
tabe
0
58
kanazawa.go 2025.07.27
tabe
0
34
ランドネットLT会.pdf
tabe
0
10
Tavinikkiyとかいう構想半年、開発2ヶ月みたいなプロダクトを個人開発している話
tabe
0
7
テテミート 2024.11.22
tabe
0
10
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Making Projects Easy
brettharned
117
6.4k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Typedesign – Prime Four
hannesfritz
42
2.8k
Optimizing for Happiness
mojombo
379
70k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Speed Design
sergeychernyshev
32
1.1k
Transcript
Genericsについて改めて学んでみた 株式会社ワクト ソフトウェアエンジニア 阿部太一
自己紹介 • 名前 : 阿部太一 • Twitter : オーガ (@o_ga09) • GitHub : o-ga09 •
エンジニア歴 : 4年 • 領域 : バックエンド • 趣味 : ゲーム、ダーツ、お酒 • 所属 : 株式会社ワクト https://github.com/o-ga09/convert-yaml-go https://github.com/o-ga09/spec2scenarigo
宣伝 • Zennで本書いてます! ◦ あと少しでいいね200いきそうです ◦ Go大好きまんです
最近のニュース • Typeormのバージョンアップで変更差分400ファイルのPR作ってしまった • Node.jsお腹いっぱい
目次 • Genericsとは? • 使い所 • TypescriptのGenerics • GoのGenerics •
Tってなんなのさ • まとめ
突然ですが、Generics使っていますか・・・?
私は、全然使っていません
いろんな言語に備わっていて、便利だけど使い所と
仕組みとか使い方を理解していなかったです
Genericsを理解すると、軽い認識ですが、以下のようなメリットがあると考えています • 引数や戻り値の型だけ違うコードを共通化できる • ライブラリを作成する際にコードをスタイリッシュにできる • OSSのライブラリを簡単に読めるようになる
Today’s Goal • GoとTypescriptのGenericsをなんとなく理解する • コードを共通化したい時の引き出しにできる • Tが何者かわかる
Today’s Target • Genericsって何って思っている方 • Genericsがふんわり理解の方 • コードの共通化、リファクタリングのモチベーションが高い方
Genericsとは?
AIに聞いてみた! プログラミングにおけるGenericsとは Generics(ジェネリクス)、総称型とも呼ばれる、は、プログラミングにおいて、型を抽象 化し、汎用的なコードを書くための手法です。具体的なデータ型に依存せず、型パラメー タと呼ばれる変数のようなものを使用することで、様々なデータ型に対して同じ処理を適 用することができます。
メリット Genericsを活用することで、以下のような利点を得ることができます。 • コードの再利用性向上: 同じ処理を異なる型に対して記述する必要がなくなり、コードの重 複を削減できます。 • 保守性の向上: コードが簡潔になり、理解しやすくなるため、メンテナンスが容易になりま す。
• 型安全性の向上: コンパイラによる型チェックが強化され、実行時エラーを防ぐことができ ます。
使い所
Genericsの利用例 Genericsは、様々な場面で利用することができます。以下に、いくつか例を挙げます。 • コレクションライブラリ: JavaのArrayListやHashMapなどのコレクションライブラリは、 Genericsで作られています。 • アルゴリズム: 汎用的なアルゴリズムは、Genericsを使って実装することができます。 •
データ構造: 独自のデータ構造を、Genericsを使って抽象化することができます。
Genericsをサポートする言語 Genericsは、 • Java • C# • TypeScript • Kotlin
• Go などの多くのプログラミング言語でサポートされています。
TypescriptのGenerics
引数のみがstring, number, URLと 違う関数があったときに
型の部分をTとしてまとめられちゃ うのが、ジェネリクス
GoのGenerics
Typescriptと異なり、Tの取りうる型を指定しな ければなりません あとは同じ
それは、分かった。Tってなんなのさ
• 型パラメータと呼ばれる • 関数やデータ構造の方の具体を定めずに定義できる • 言語によって指定方法は異なる
• Template (テンプレート) の略 • Type (型) の略 • 他のプログラミング言語の影響(例:C++など)
なぜ、Tか? 絶対これでなければいけないという 決まりはなく、慣習的なものです ね!
まとめ
• 言語によって微妙に書き方は異なる • 基本形を覚えればわりと使えるなという印象 • 一旦、リファクタリングする際に使ってみたいな
• 自分含めですが、意外と苦手な人いるじゃないかな・・・? • 思ったより怖くない! • これは、ハンズオンとかの方が理解進むな! LTの内容ミスったか
参考情報 • Goのジェネリクス - Zenn • なぜ、ジェネリクスはTなのか - Qiita •
サバイバルTypescript
ご清聴ありがとうございました!