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
0
260
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
57
graphicsLayer
lvla
0
180
BluetoothDevice.getName()に裏切られた話
lvla
0
300
Jetpack Composeで画像クロップ機能を実装する
lvla
0
1k
Jetpack Compose drag gesture and pinch gesture
lvla
1
3.5k
Jetpack Compose Layout API
lvla
1
620
BLEを使ったアプリを継続的に開発するために
lvla
0
960
RecyclerView.ItemAnimator
lvla
1
290
RecycledViewPool
lvla
1
190
Other Decks in Programming
See All in Programming
新宿駅構内を三人称視点で探索してみる
satoshi7190
2
120
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
160
TCAを用いたAmebaのリアーキテクチャ
dazy
0
210
Jakarta EE meets AI
ivargrimstad
0
520
ナレッジイネイブリングにAIを活用してみる ゆるSRE勉強会 #9
nealle
0
160
SwiftUI Viewの責務分離
elmetal
PRO
2
280
AIプログラミング雑キャッチアップ
yuheinakasaka
19
4.9k
CDK開発におけるコーディング規約の運用
yamanashi_ren01
2
260
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
210
自力でTTSモデルを作った話
zgock999
0
120
Drawing Heighway’s Dragon- Recursive Function Rewrite- From Imperative Style in Pascal 64 To Functional Style in Scala 3
philipschwarz
PRO
0
110
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
1
290
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Automating Front-end Workflow
addyosmani
1369
200k
Unsuck your backbone
ammeep
669
57k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
The Language of Interfaces
destraynor
156
24k
It's Worth the Effort
3n
184
28k
Raft: Consensus for Rubyists
vanstee
137
6.8k
Visualization
eitanlees
146
15k
Side Projects
sachag
452
42k
Docker and Python
trallard
44
3.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
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