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
Kotlin - #渋谷JVM
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Taro Nagasawa
April 18, 2015
Programming
2
2.2k
Kotlin - #渋谷JVM
渋谷JVMの懇親会LT用のスライドです。Kotlinの拡張関数とNULL安全について簡単に紹介します。
Taro Nagasawa
April 18, 2015
Tweet
Share
More Decks by Taro Nagasawa
See All by Taro Nagasawa
Android開発者のための Kotlin Multiplatform入門
ntaro
0
1.2k
Kotlin 最新動向2022 #tfcon #techfeed
ntaro
1
2.3k
#Ubie 狂気の認知施策と選考設計
ntaro
13
14k
UbieにおけるサーバサイドKotlin活用事例
ntaro
1
1.2k
KotlinでSpring 完全理解ガイド #jsug
ntaro
6
3.6k
Kotlinでサーバサイドを始めよう!
ntaro
1
1k
Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力 #devboost
ntaro
5
2.9k
Kotlin Contracts #m3kt
ntaro
4
4.3k
How_to_Test_Server-side_Kotlin.pdf
ntaro
1
540
Other Decks in Programming
See All in Programming
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
220
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
1
110
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
740
CSC307 Lecture 02
javiergs
PRO
1
780
AI & Enginnering
codelynx
0
120
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
410
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
650
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
83
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
180
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
94
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
71
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
150
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
110
30 Presentation Tips
portentint
PRO
1
220
Exploring anti-patterns in Rails
aemeredith
2
250
Transcript
݄ौ୩+7. ᖒଠ!OHTX@UBSP ,PUMJO
+7.ݴޠʂ Նൃදʂ +FU#SBJOTʂ
੩తܕ͚ /6--҆શ ΦϒδΣΫτࢦ Ϋϩʔδϟ γϯϓϧ BMU+4
ࠓ͢͜ͱʂ ֦ுؔ /6--҆શ
֦ுؔ
fun main(args : Array<String>) { "world".hello() / / => Hello,
world! } ! fun String.hello() { println("Hello, ${this}!") }
/ / Kotlin fun String.hello() { println("Hello, ${this}!") } !
/ / Java static void hello(String receiver) {...}
/6--҆શ
val a: String = null / / NG val b:
String? = null / / OK /PU/VMM/VMMBCMF Λ໌֬ʹ۠ผ͢Δ
val a: String? = null a.toUpperCase() / / NG /VMMBCMFมʹ
ී௨ʹΞΫηεͰ͖ͳ͍
val a: String? = null a?.toUpperCase() / / a.map(String::toUpperCase); Ͱ҆શݺͼग़͠
Ϩγʔό͕OVMMͳΒOVMMΛฦ͚ͩ͢
val a: String? = null a ?: "" / /
a.orElse(""); ͰσϑΥϧτ
val a: String? = null a!! / / !!!Exception!!! /
/ a.get(); Ͱڧ੍/PU/VMMԽ ةݥʂݪଇېࢭʂ
֦ுؔ /6--҆શ
֦ுؔMFU͜ͳ͢ MFUඪ४ϥΠϒϥϦͷؔ w JG1SFTFOU w NBQ w qBU.BQ
w JG1SFTFOU w NBQ w qBU.BQ ,PUMJOʹWPJE ͳ͘ɺؔ ඞͣΛฦ͔͢ Βಉ͡
֦ுؔMFU͜ͳ͢ MFUඪ४ϥΠϒϥϦͷؔ
w JG1SFTFOU w NBQ w qBU.BQ ʮOVMMͷOVMMʯͱ ͍͏ೖΕࢠߏʹ ͳΒͳ͍͔Βಉ͡ ֦ுؔMFU͜ͳ͢
MFUඪ४ϥΠϒϥϦͷؔ
a?.let { a -> toInt(a) } a?.let { toInt(it) }
a?.let(::toInt) MFU༻ྫ ಉ͡ɻ ॻ͖ํ͕ҧ ͏͚ͩ
ෳͷ/VMMBCMFΛ /PU/VMMͱͯ͠ѻ͍͍ͨ
a?.let { a -> b?.let { b -> a -
b } } ͭͷ*OU B CͷҾ͖ࢉ
a?.let { a -> b?.let { b -> a -
b } } ͭͷ*OU B CͷҾ͖ࢉ ωετ ಡΈʹ͍͘
/ / Ҿ͖ࢉͷؔ ΧϦʔԽ val minus = fun(a: Int) =
fun(b: Int) = a - b ! Ҿͱͯ͠/VMMBCMFͳؔΛऔΕΔMFUతͳͭ fun <A, B> A.bind(f: ((A) -> B)?): B? = f?.invoke(this) ͭͷؔΛ༻ҙ
b?.bind(a?.bind(minus)) ωετ͕ফ͑ͨʂ
ωετ͕ফ͑ͨʂ ׅހͷରԠؔͱ͔͆ BCͳͷʹɺొ͢Δॱং͕ٯɻ ಡΈʹ͍͘ʂ b?.bind(a?.bind(minus))
fun <A, B> ((A)->B).apply(a: A?): B? = a?.bind(this) ͏Ұखؒ
minus.apply(a)?.apply(b) Ͱ͖ͨʂ NJOVT͔Βελʔτͯ͠ɺBɺC ͷॱͰهड़Ͱ͖Δʂ ϝιουνΣʔϯʹͳͬͯΔʂ
ෳࡶ ໘͍͘͞ val minus = fun(a: Int) = fun(b: Int)
= a - b fun <A, B> A.bind(f: ((A) -> B)?): B? = f?.invoke(this) fun <A, B> ((A)->B).apply(a: A?): B? = a?.bind(this)
if (a != null && b != null) a -
b else null ࣮͜Ε͚ͩͰ͓̺
࣮͜Ε͚ͩͰ͓̺ OVMMͰͳ͍͜ͱ͕อূ͞ΕΔॴͰ /VMMBCMFมΛ/PU/VMMͱͯ͠ѻ͑Δ if (a != null && b !=
null) a - b else null
·ͱΊ ֦ுؔͰศརϝιου͕ੜͤΔʂ /6--҆શ҆શͰѻ͍ํ؆୯ʂ
ࣗݾհ ᖒଠ!OHTX@UBSP ͱ͕େ͖ͳΤϯδχΞ 4PGUXBSF%FTJHO ٕධ Ͱ ,PUMJOهࣄΛ࿈ࡌத
%SPJE,BJHJ ,PUMJO"OESPJE։ൃαϙʔτ ྗೖΕͯΔײ 1MVHJOϥΠϒϥϦͳͲ ͷ%SPJE,BJHJͰൃද͠·͢
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ -FU`TFOKPZ,PUMJO