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
reifiedって何ですか?
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
usuiat
October 26, 2023
Programming
1.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
reifiedって何ですか?
集まれKotlin好き!Kotlin愛好会 vol.47 @オンライン
https://love-kotlin.connpass.com/event/298008/
usuiat
October 26, 2023
More Decks by usuiat
See All by usuiat
suspend関数のテストの疑問調べてみた
usuiat
0
68
Google I/O 2025 報告LT会 Small language models with Google AI Edge
usuiat
0
610
発信から広がった地方エンジニアのキャリア
usuiat
1
79
タッチイベントの仕組みを理解してジェスチャーを使いこなそう
usuiat
1
1.9k
Google I/O 2024 報告LT会(Androidのオンデバイス生成AI)
usuiat
0
1.1k
Modifier.Nodeに移行してパフォーマンスを比べてみた
usuiat
0
570
Other Decks in Programming
See All in Programming
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
320
No More NoSuchMethodError
exoego
1
120
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
7.1k
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.2k
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
12
11k
オーケストレーション記述言語 Katari
yukikurage
0
210
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.1k
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
1.4k
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
170
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
200
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1.8k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.6k
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
52k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Mobile First: as difficult as doing things right
swwweet
225
10k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
59k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
68k
Technical Leadership for Architectural Decision Making
baasie
3
620
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.2k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
750
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
540
Transcript
reifiedって何ですか? 2023 Oct. 26 @Kotlin愛好会 vol.47 usuiat
自己紹介 Atsushi Usui / うっすぃ~ / usuiat もともと 組み込みソフトエンジニア 2020〜
個人でAndroidアプリやライブラリを開発 2023/9~ Androidアプリエンジニア X/GitHub : usuiat Blog : https://engawapg.net/
reifiedって何ですか? Kotlinのジェネリクスに時々ついているキーワード
そもそも読み方は? DeepL「レファイド」 Google翻訳「レアファイ」 weblio「リーフェイ」 英辞郎「リアファイまたはリーイファイ」 Android Developersの動画では「リーファイド」と 発音していたので、私は「リーファイド」と読むこ とにします。 https://www.youtube.com/watch?v=Xj45hobMI78&t=37s
reify : 具象化する https://ejje.weblio.jp/content/reify
で、reifiedって何ですか? inlineのジェネリクス関数で、 ジェネリクスの型情報にアクセスできるようにするためのキーワード 型情報にアクセスして xの型を判定している
で、reifiedって何ですか? inlineのジェネリクス関数で、 ジェネリクスの型情報にアクセスできるようにするためのキーワード 疑問1 型情報って何? 疑問2 reifiedが無いとどうなる? 疑問3 なぜinline限定?
疑問1 型情報って何? ジェネリクスが実行時に何の型(クラス)で動作しているか、の情報。 KClassが持つ情報 クラス名(.simpleName)、メンバー(.members)など .java経由でJavaのClassにもアクセス可能
クラスに基づく処理 isによる型判定 asによるキャスト 型情報にアクセスできるので、 型が一致しているかを判定できる KClass https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/ Class https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html
疑問2 reifiedがないとどうなる? ジェネリクスは、コンパイル時に型の不整合が無いかをチェックした後、型の情報が消される。 そのため、型情報にアクセスできない。 コンパイルエラーになる。 疑問2-2 なぜ型情報を消すの?
疑問2ー2 なぜ型情報を消すの? ジェネリクス関数をいろいろな場所でいろいろな型で使いまわすためには、具体的 な型情報を持つことができない。 ジェネリクスが無かった時代の古いJavaとの互換性を保つため (これは詳しくは理解できていません) String Int 特定の型に固定できないので、 型情報を消す
理由1 理由2
疑問3 なぜinline限定? inline関数は、コンパイル時にすべての呼び出し元で展開される。 そのため、呼び出し元で実際に指定されている型でコンパイルできる。 なので、型情報にアクセスできる それぞれの呼び出し元の型に 合わせて展開される
未解決の疑問 inlineであれば、reifiedを明示しなくても型情報にアクセスできるよう にコンパイルしてくれてもいいのでは? (何かご存じの方は教えていただけると嬉しいです)
まとめ reified(リーファイド)は、inlineのジェネリクス関数で型情報にアクセスできるように するためのキーワード reifiedをつけることによって、ジェネリクスの型を判定したり、指定した型のオブ ジェクトを返したりできる 参考 Reified - Kotlin Vocabulary
https://www.youtube.com/watch?v=Xj45hobMI78 Reified type parameters https://kotlinlang.org/docs/inline-functions.html#reified-type-parameters ジェネリクス: reified でジェネリクスの型情報を維持する – まくまくKotlinノート https://maku77.github.io/kotlin/generics/reified.html