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
Taro Nagasawa
April 18, 2015
Programming
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
Kotlin 最新動向2022 #tfcon #techfeed
ntaro
1
2k
#Ubie 狂気の認知施策と選考設計
ntaro
13
12k
UbieにおけるサーバサイドKotlin活用事例
ntaro
1
1k
KotlinでSpring 完全理解ガイド #jsug
ntaro
6
3.1k
Kotlinでサーバサイドを始めよう!
ntaro
1
840
Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力 #devboost
ntaro
5
2.3k
Kotlin Contracts #m3kt
ntaro
4
3.4k
How_to_Test_Server-side_Kotlin.pdf
ntaro
1
380
Kotlin Fest 2018 - Opening session
ntaro
0
4.2k
Other Decks in Programming
See All in Programming
htmx is fun!
codehex
2
190
WasmOS: Wasmを実行する自作Microkernel
riru
0
370
どうしてこうなった命名集 ~🔥編~ / OOC 2024 LT
pictiny
4
2.9k
品質が高いコードって何?Rev2.1
ickx
1
490
Data Contracts In Practice With Debezium and Apache Flink (Kafka Summit London)
gunnarmorling
2
280
LLMチャットボットのアプリケーション設計Tips
os1ma
4
660
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
530
Open Source Swiftc Workshop
kitasuke
1
290
Introduction for Open Source Swift Workshop
giginet
PRO
0
290
incrementalモデルの理解を深める
ikkimiyazaki
2
640
CSRF対策のやり方、そろそろアップデートしませんか / Update your knowledge of CSRF protection
hiro_y
25
15k
品質とスピードを両立: TypeScriptの柔軟な型システムをバックエンドで活用する
kosui
5
1.2k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
266
39k
Ruby is Unlike a Banana
tanoku
95
10k
JazzCon 2018 Closing Keynote - Leadership for the Reluctant Leader
reverentgeek
178
11k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
24
2.2k
Practical Orchestrator
shlominoach
180
9.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
242
12k
[RailsConf 2023] Rails as a piece of cake
palkan
21
3.8k
What’s in a name? Adding method to the madness
productmarketing
PRO
14
2.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
240
1.2M
Building Better People: How to give real-time feedback that sticks.
wjessup
350
18k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
12
1.4k
Documentation Writing (for coders)
carmenintech
59
3.8k
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