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
Moyuru Aizawa
November 28, 2016
Programming
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin頻出表現
Kotlinでよくつかう文/式等
TwitterID変えました。@lvla0805 -> @MoyuruAizawa
Moyuru Aizawa
November 28, 2016
More Decks by Moyuru Aizawa
See All by Moyuru Aizawa
BLUETOOTH_SCAN and iBeacon
lvla
1
150
graphicsLayer
lvla
0
290
BluetoothDevice.getName()に裏切られた話
lvla
0
410
Jetpack Composeで画像クロップ機能を実装する
lvla
0
1.3k
Jetpack Compose drag gesture and pinch gesture
lvla
1
4.3k
Jetpack Compose Layout API
lvla
1
710
BLEを使ったアプリを継続的に開発するために
lvla
0
1.1k
RecyclerView.ItemAnimator
lvla
1
380
RecycledViewPool
lvla
1
290
Other Decks in Programming
See All in Programming
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
170
Agentic UI
manfredsteyer
PRO
0
220
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
290
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
430
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
0
360
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.6k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.6k
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
150
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
190
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
130
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
1k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
830
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Rails Girls Zürich Keynote
gr2m
96
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
A better future with KSS
kneath
240
18k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Designing for humans not robots
tammielis
254
26k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
180
Utilizing Notion as your number one productivity tool
mfonobong
4
340
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
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