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
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
690
Kotlin 最新動向2022 #tfcon #techfeed
ntaro
1
2.2k
#Ubie 狂気の認知施策と選考設計
ntaro
13
13k
UbieにおけるサーバサイドKotlin活用事例
ntaro
1
1.1k
KotlinでSpring 完全理解ガイド #jsug
ntaro
6
3.4k
Kotlinでサーバサイドを始めよう!
ntaro
1
980
Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力 #devboost
ntaro
5
2.7k
Kotlin Contracts #m3kt
ntaro
4
4.1k
How_to_Test_Server-side_Kotlin.pdf
ntaro
1
500
Other Decks in Programming
See All in Programming
Goで作る、開発・CI環境
sin392
0
190
PicoRuby on Rails
makicamel
2
120
Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : de la théorie à la production…
ahmedbhs123
0
120
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
0
300
CursorはMCPを使った方が良いぞ
taigakono
1
210
Team operations that are not burdened by SRE
kazatohiei
1
290
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
340
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
180
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
1.8k
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
110
WindowInsetsだってテストしたい
ryunen344
1
220
C++20 射影変換
faithandbrave
0
560
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Speed Design
sergeychernyshev
32
1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
17
950
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
800
Git: the NoSQL Database
bkeepers
PRO
430
65k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Music & Morning Musume
bryan
46
6.6k
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