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
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
Google I/O 2025 報告LT会 Small language models with Google AI Edge
usuiat
0
590
発信から広がった地方エンジニアのキャリア
usuiat
1
78
タッチイベントの仕組みを理解してジェスチャーを使いこなそう
usuiat
1
1.8k
Google I/O 2024 報告LT会(Androidのオンデバイス生成AI)
usuiat
0
1k
Modifier.Nodeに移行してパフォーマンスを比べてみた
usuiat
0
570
Other Decks in Programming
See All in Programming
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
990
Are APIs Still Relevant in the AI Era?
soyuka
0
460
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
0
140
Domain-Driven Transformation
hschwentner
2
2.3k
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
250
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
330
ジョジョの世界をXRで再現する
mofurune
0
150
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
370
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
230
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Odyssey Design
rkendrick25
PRO
2
870
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Technical Leadership for Architectural Decision Making
baasie
3
600
Scaling GitHub
holman
464
140k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
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