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
reifiedって何ですか?
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
usuiat
October 26, 2023
Programming
1.3k
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
Google I/O 2025 報告LT会 Small language models with Google AI Edge
usuiat
0
500
発信から広がった地方エンジニアのキャリア
usuiat
1
70
タッチイベントの仕組みを理解してジェスチャーを使いこなそう
usuiat
1
1.7k
Google I/O 2024 報告LT会(Androidのオンデバイス生成AI)
usuiat
0
980
Modifier.Nodeに移行してパフォーマンスを比べてみた
usuiat
0
550
Other Decks in Programming
See All in Programming
スマートグラスで並列バイブコーディング
hyshu
0
280
自作OSでスライド発表する
uyuki234
1
3.7k
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
570
Creating Composable Callables in Contemporary C++
rollbear
0
190
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
160
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
4.7k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.6k
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
250
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1k
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
280
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
120
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Faster Mobile Websites
deanohume
310
32k
From π to Pie charts
rasagy
0
230
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
200
Six Lessons from altMBA
skipperchong
29
4.3k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
My Coaching Mixtape
mlcsv
0
170
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
New Earth Scene 8
popppiees
3
2.4k
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