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頻出表現
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Moyuru Aizawa
November 28, 2016
Programming
0
280
Kotlin頻出表現
Kotlinでよくつかう文/式等
TwitterID変えました。@lvla0805 -> @MoyuruAizawa
Moyuru Aizawa
November 28, 2016
Tweet
Share
More Decks by Moyuru Aizawa
See All by Moyuru Aizawa
BLUETOOTH_SCAN and iBeacon
lvla
1
130
graphicsLayer
lvla
0
250
BluetoothDevice.getName()に裏切られた話
lvla
0
390
Jetpack Composeで画像クロップ機能を実装する
lvla
0
1.2k
Jetpack Compose drag gesture and pinch gesture
lvla
1
4.1k
Jetpack Compose Layout API
lvla
1
690
BLEを使ったアプリを継続的に開発するために
lvla
0
1.1k
RecyclerView.ItemAnimator
lvla
1
340
RecycledViewPool
lvla
1
260
Other Decks in Programming
See All in Programming
Package Management Learnings from Homebrew
mikemcquaid
0
230
CSC307 Lecture 04
javiergs
PRO
0
660
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
AI & Enginnering
codelynx
0
120
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
380
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
130
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
460
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
SourceGeneratorのススメ
htkym
0
200
Featured
See All Featured
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
110
Designing for Timeless Needs
cassininazir
0
130
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
420
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
79
Technical Leadership for Architectural Decision Making
baasie
2
250
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
Site-Speed That Sticks
csswizardry
13
1.1k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
200
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Producing Creativity
orderedlist
PRO
348
40k
Transcript
,PUMJOසग़දݱ !MWMB
lvla lvla0805 Ѫᖒ๖ .PZVSV"J[BXB -FBEFOHJOFFSPGQBJST%JWFVSFLB *OD FVSFLB,PUMJO&WBOHFMJTU
+BWB,PUMJO3Y+BWB
None
QBJST $PVQMFT NBUDIHSPVQ *"$ OPXIJSJOH
None
NFFUT
WBM
‣ SFBEPOMZ ‣ جຊWBMΛར༻͍ͯ͠Δɻ ‣ ňͦΕWBSͰ͋Δඞཁ͋Δͷ ʼn ‣ ΈΜͳ+BWBॻ࣌͘ʹpOBMΛ͚ͭΔΑ͏ʹͳͬͨ WBM
val readOnliy = 10 readOnliy = 20 // error
/VMMBCMF
‣ /VMMΛڐ༰͢Δܕͱɺ/VMMΛڋ൱͢Δܕ͕໌֬ʹΘ͚ΒΕ͍ͯΔ ‣ OPU/VMMʹOVMMೖͰ͖ͳ͍͠ɺOVMMBCMFΛೖ͢Δ͜ͱग़དྷͳ ͍ ‣ ৗʹ/VMMΛҙࣝͯ͠ίʔσΟϯά͢Δ͜ͱʹͳΔ /VMMBCMF val nullable:
String? = null var notNull: String = null // error notNull: String = nullable // error
4BGF$BMM
‣ /VMMBCMF͕/VMMͷ߹ɺOVMM͕ฦ٫͞ΕΔɻ ‣ /VMMBCMF͕/VMMͰͳ͍߹ɺ͕࣮ؔߦ͞ΕΔϓϩύςΟͷ͕ฦ٫ ͞ΕΔɻ 4BGF$BMM nullablePerson?.toString() nullablePerson?.age
%FMFHBUFE1SPQFSUJFT
‣ ϓϩύςΟͷॳظԽΛҕৡͰ͖Δ ‣ ॳظԽΛԆͰ͖Δ ‣ ϥΠϑαΠΫϧʹґଘ͢ΔͷͰWBMͰॳظԽͰ͖Δ %FMFHBUFE1SPQFSUJFT val view by
bindView(R.id.view) val string by lazy { getString(R.string.foo) }
&YUFOTJPO'VODUJPO
‣ ܧঝ͢Δࣄͳ͘ɺطଘΫϥεʹؔΛՃͰ͖Δɻ &YUFOTJPO'VODUJPO fun Activity.toWeb(uri: Uri) { startActivity( Intent(Intent.ACTION_VIEW, uri)
) } fun Subscription.addTo(subscriptions: CompositeSubscription) { subscriptions(this) }
4JOHMF&YQSFTTJPO'VODUJPO
‣ ؔͷ࣮͕୯Ұࣜͷ߹ɺฦΓͷએݴɺϒϩοΫɺSFUVSOΛলུ Ͱ͖Δɻ 4JOHMF&YQSFTTJPO'VODUJPO @Provide fun provideApplicationContext() = applicationContext
)JHIFS0SEFS'VODUJPO
‣ ؔΛҾʹͱͬͨΓ ‣ ؔΛฦ٫͢Δؔ ‣ +BWB͕ؔϑΝʔετΫϥεΦϒδΣΫτ͡Όͳ͍͔Β͜Ε͕Ͱ͖ ͳ͍ )JHIFS0SEFS'VODUJPO fun foo(
function: (Int)->Unit ) { … } fun bar(): (Int)->String { … }
‣ 7JFXΛҾʹͱΓ6OJU 㲈7PJE Λฦ٫͢ΔؔͱಉͰ 4". public interface OnClickListener { void
onClick(View var1); }
‣ ؔͭͷΠϯλʔϑΣʔεΛҾʹऔΔؔʹɺؔΛͤ·͢ ‣ هड़ྔΊͬͪΌݮΔʜ 4". view.setOnClickListener({ view -> view.visibility =
View.GONE }) view.setOnClickListener { view -> view.visibility = View.GONE } view.setOnClickListener { it.visibility = View.GONE }
MFU
‣ ؔΛ͢ͱɺͦͷؔΛ࣮ߦͯ͘͠ΕΔɻ ‣ 4BGF$BMMͰMFUΛ࣮ߦ͍ͯ͠ΔͷͰɺOVMMͰͳ͍߹ʹͷΈ࣮ߦ͞Ε Δɻ MFU nullable?.let { it.doSomething }
BQQMZ
‣ Ϩγʔό 'PP'SBHNFOU ͷϓϩύςΟؔΛར༻͢ΔؔΛ͢ ‣ ͦΕΒ͕ద༻͞ΕͨϨγʔό͕ฦ٫͞ΕΔɻ BQQMZ FooFragment().apply { arguments
= Bundle().apply { pustString("key", "value") } }
‣ 4JOHMF&YQSFTTJPO'VODUJPOͱΈ߹ΘͤΔͱ͖ͬ͢Γ BQQMZ fun newInstance() = FooFragment().apply { arguments =
Bundle().apply { pustString("key", "value") } }
EFDMBSJOHQSPQFSUJFTBOE JOJUJBMJ[JOHUIFNGSPNQSJNBSZ DPOTUSVDUPS
‣ ϓϩύςΟͷએݴͱॳظԽΛɺϓϥΠϚϦίϯετϥΫλͰߦ͑Δ ‣ ϗϯτָʜ EFDMBSJOHQSPQFSUJFTBOEJOJUJBMJ[JOHUIFNGSPNQSJNBSZDPOTUSVDUPS class Person(val firstName: String, val
lastName: String, var age: Int) { // ... }
%BUB$MBTT
‣ FRVBMT IBTI$PEF UP4USJOH DPQZ ΛίϯύΠϧ࣌ʹੜͯ͠ ͘ΕΔ ‣ Ξοϓσʔτ͞Εͳ͍FRVBMT ͱ͞Α͏ͳΒͰ͖Δɻ
%BUB$MBTT data class Person(val firstName: String, val lastName: String, var age: Int)
OUBSPLOJU
‣ ֦ுؔΛͬͯBTTFSU5IBUΛ͍͍ײ͡ʹͯ͘͠ΕΔ ‣ ͏͜Ε͕ͳ͍ͱςετॻ͚ͳ͍ʜ LOJU @Test fun test() { (1
+ 2).should be 3 // assertThat(1 + 2, `is`(3)) }
TZTZBHJLNPDLJUP
‣ ֦ுؔΛͬͯNPDLJUPΛ͍͍ײ͡ʹͯ͘͠ΕΔɻ ‣ ͜Εͳ͍ͱςετͰ͖ͳ͍ʜ LNPDLJUP var item: Item = mock()
item.length().invoked.thenReturn(10) item.length().should be 10 item.verify().length()
5IBOLZPV