$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlin - #渋谷JVM
Search
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
990
Kotlin 最新動向2022 #tfcon #techfeed
ntaro
1
2.3k
#Ubie 狂気の認知施策と選考設計
ntaro
13
13k
UbieにおけるサーバサイドKotlin活用事例
ntaro
1
1.2k
KotlinでSpring 完全理解ガイド #jsug
ntaro
6
3.5k
Kotlinでサーバサイドを始めよう!
ntaro
1
1k
Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力 #devboost
ntaro
5
2.9k
Kotlin Contracts #m3kt
ntaro
4
4.2k
How_to_Test_Server-side_Kotlin.pdf
ntaro
1
530
Other Decks in Programming
See All in Programming
チームをチームにするEM
hitode909
0
330
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
350
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
110
Microservices rules: What good looks like
cer
PRO
0
1.4k
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
380
AIコーディングエージェント(skywork)
kondai24
0
170
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
130
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
6
2.2k
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
160
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
110
AIコーディングエージェント(Manus)
kondai24
0
180
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
500
Featured
See All Featured
Thoughts on Productivity
jonyablonski
73
5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.2k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Automating Front-end Workflow
addyosmani
1371
200k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
A Tale of Four Properties
chriscoyier
162
23k
The Cult of Friendly URLs
andyhume
79
6.7k
Being A Developer After 40
akosma
91
590k
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