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 in action~
Search
yu mitsuhori
December 22, 2017
Technology
100
0
Share
小鳥の愛し方~Kotlin in action~
Kotlinの言語仕様、文法、特筆すべき点などをまとめて社内勉強会で発表した資料
yu mitsuhori
December 22, 2017
More Decks by yu mitsuhori
See All by yu mitsuhori
【DroidKaigi版】ReactNativeとKotlinで叶える夢のリアルタイム音声配信
youmitsu
1
3.2k
ReactNativeとKotlinで叶える夢のリアルタイム音声配信
youmitsu
1
920
stand.fm(Android)におけるreact-native-track-playerの改善
youmitsu
1
2.2k
TargetSdkVersion29で BottomNavigationが点滅する件
youmitsu
1
1.6k
リリース前のリグレッションテストをUIテストで自動化、1年間運用した話
youmitsu
2
420
New features in RemoteConfig, Analytics at Google I/O 2019
youmitsu
1
770
FirebaseNotification,RemoteConfigでユーザセグメントごとにプッシュ通知を実装する
youmitsu
8
1.6k
Report from Google I/O 2019
youmitsu
1
110
OSSにコントリビュートした話
youmitsu
1
110
Other Decks in Technology
See All in Technology
ESP32 IoTを動かしながらメモリ使用量を観測してみた話
zozotech
PRO
0
140
2026年春のAgentCoreアプデ 細かいやつ全部まとめ
minorun365
4
240
Claude Code で使える DuckDB Skills を試してみた / DuckDB Skills and Claude Code
masahirokawahara
1
650
最新技術を"今は選ばない"という技術選定
leveragestech
PRO
0
120
ECSのTerraformモジュールにコントリビュートした話
harukasakihara
0
230
Swift Sequence の便利 API 再発見
treastrain
1
290
鹿野さんに聞く!CSSの最新トレンド Ver.2026
tonkotsuboy_com
6
3.5k
【関西製造業祭り2026春】現場を変える技術はここまで来た〜世界最大の製造業見本市から持って帰ってきたもの〜
tanakaseiya
0
180
AsyncStreamでマルチブロードキャストを実装する
1mash0
1
120
AWSアップデートから考える継続的な運用改善
toru_kubota
2
300
Redmine次期バージョン7.0の注目新機能解説 — UI/UX強化と連携強化を中心に
vividtone
1
160
PdM・Eng・QAで進めるAI駆動開発の現在地/aidd-with-pdm-eng-qa
shota_kusaba
0
250
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
460
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
180
Site-Speed That Sticks
csswizardry
13
1.2k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.2k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
300
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
GitHub's CSS Performance
jonrohan
1033
470k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
510
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.6k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
230
Transcript
Kotlin in Action! ~How to use Kotlin language~
.5*$POGJEFOUJBM ΞδΣϯμ ࣗݾհ ,PUMJOͱ ؆ܿͳจ๏
/VMMͷऔΓѻ͍ +BWBͱͷޓੑ 2$%తͳ ·ͱΊ
.5*$POGJEFOUJBM ΞδΣϯμ ࣗݾհ ,PUMJOͱ ؆ܿͳจ๏
/VMMͷऔΓѻ͍ +BWBͱͷޓੑ 2$%తͳ ·ͱΊ
.5*$POGJEFOUJBM • ৽ଔҰ • େֶׂ࣌ͱ8FCدΓ 3VCZPO3BJMT ଞʹ+BWB $ +BWB4DSJQU
ૣظͰ4XJGU • झຯɿμʔπ • ࠷ۙϋϚ͍ͬͯΔ͜ͱ #JU$PJOτϨʔυ ͦͷ͏ͪࣗಈऔҾ#PUΛ࣮༧ఆ ࣗݾհ ࡾງ ༟ Έͭ΄Γ Ώ͏
.5*$POGJEFOUJBM w ࠷ۙ,PUMJO͕ྲྀߦ͍ͬͯΔ͕ɺฐࣾͰ,PUMJOͰॻ͍ ͍ͯΔϓϩμΫτ͓ͦΒ͘΄΅ͳ͍ ˠ͜Ε·͍ͣʂ w ࣾͰ৮ͬͯΔਓ͕গͳ͍͏ͪʹ,PUMJOͷୈҰਓऀత ͳײ͡ʹͳͬͯ͠·͓͏ͱࢥͬͨ w ͍
ࠓճͷഎܠ
.5*$POGJEFOUJBM ΞδΣϯμ ࣗݾհ ,PUMJOͱ ؆ܿͳจ๏
/VMMͷऔΓѻ͍ +BWBͱͷޓੑ 2$%తͳ ·ͱΊ
.5*$POGJEFOUJBM w +FU#SBJOT͕ࣾ։ൃͨ͠+7. +BWB7JSUVBM.BDIJOF ্ Ͱಈ࡞͢Δ൚༻ݴޠ w (PPHMF*0Ͱ"OESPJE։ൃެࣜݴޠͱͯ͠ೝ ఆ w
"OESPJE։ൃऀͷதͰʮখௗʯͱ͍͏ѪশͰ͠· ΕͨΓ͍ͯ͠Δʢ˞໊લͷ༝དྷϑΟϯϥϯυͷ ίτϦϯౡʣ w ҆શ /VMM εϨου ɺ+BWBͱͷ૬ޓӡ༻ੑɺ࣮༻ओ ٛ ,PUMJOͷ֓ཁ
.5*$POGJEFOUJBM ,PUMJOͷϚϧνϓϥοτϑΥʔϜ +BWBͷΈͰͳ͘+BWB4DSJQUʹ τϥϯεύΠϧՄೳ ˞,PUMJO3VOUJNFʹґଘɺιʔεͷ༰ ྔ͕Ͱ͔͍ কདྷతʹBOESPJEͷΈͰͳ͘ɺ JPT όοΫΤϯυ,PUMJOͰ
͔͚ΔΑ͏ͳ ϚϧνϓϥοτϑΥʔϜΛ ࢦ͍ͯ͠ΔΒ͍͠
.5*$POGJEFOUJBM ,PUMJOͷ࣮ߦڥ LU KBWB ,PUMJO ίϯύΠϥ KBWB ίϯύΠϥ DMBTT
KBS LPUMJO ϥϯλΠϜ ΞϓϦέʔγϣϯ ,PUMJOಠࣗͷඪ ४ϥΠϒϥϦ ,#΄ͲΒ͠ ͍
.5*$POGJEFOUJBM w *OUFMJ+ *%&" +FU#SBJOT͕ࣾ࡞͍ͬͯΔ*%& ଞͷ+7.ݴޠ +BWB 4DBMB (SPPWZ Λͬͨ։ൃ͕Ͱ͖Δڥ͕
͍ͬͯΔ w "OESPJE4UVEJP "OESPJEͷ։ൃ༻ʹ࡞ΒΕͨ*%&ɻ*OUFMJK *%&"͕ϕʔεͱͳ͍ͬͯ ΔɻϧφͰͬͯ·͢ w 5SZ,PUMJO 8FCΤσΟλʔɺαϯϓϧίʔυͳͲ࣮ߦͰ͖Δ IUUQTUSZLPUMJOMBOHPSH ˡੋඇ͓ࢼ͋͠Εʂ w ͪΖΜίϯύΠϥΛམͱ͖ͯͯ͠ίϚϯυϥΠϯͰ ࣮ߦՄೳ ,PUMJOΛಈ͔͢ʹ
.5*$POGJEFOUJBM ΞδΣϯμ ࣗݾհ ,PUMJOͱ ؆ܿͳจ๏
/VMMͷऔΓѻ͍ +BWBͱͷޓੑ 2$%తͳ ·ͱΊ
ܕ
.5*$POGJEFOUJBM Kotlinͷܕ w ੩తܕ͖ݴޠ w ,PUMJOͷܕશͯΦϒδΣΫτ ྫ *OUܕ 4USJOHจࣈྻ
"SSBZྻ 6OJU,PUMJOʹ͓͚ΔWPJE w +BWBͰ͍͏JOUͷΑ͏ͳϓϦϛςΟϒܕଘࡏ͠ͳ͍ w શͯͷΦϒδΣΫτ"OZΦϒδΣΫτΛܧঝͯ͠ ͍Δ
ม
.5*$POGJEFOUJBM w WBM มߋෆՄೳɺ+BWBͰ͍͏GJOBM w WBS มߋՄೳɺ௨ৗͷม ม [val]or[var]
変数名: 型名 = 値 省略した場合型推論してくれる
ؔ
.5*$POGJEFOUJBM ؔ ໊ؔ Γ ॻ͔ͳ͍ͱ7PJE Ҿ ҾʹσϑΥϧτΛઃఆͰ͖Δ Ҿ໊Λࢦఆͯ͠ݺͼग़ͤΔ +BWBͷΦʔόʔϩʔυ͕ෆཁʹͳΔ
݅ذ ~if,when ~
.5*$POGJEFOUJBM w +BWBͱಉ͡ॻ͖ํ w JGࣜͱͯ͑͠Λฦ͢ʢԼ߲ԋࢉࢠͷΘ Γ JGจ
.5*$POGJEFOUJBM w +BWBͰ͍͏TXJUDIɺTXJUDIΑΓ؆ܿʹॻ͚ͯ൚༻త XIFO
.5*$POGJEFOUJBM JGνΣʔϯΛXIFOͰॻ͘
Ϋϥε
.5*$POGJEFOUJBM Ϋϥεͷએݴ(Java) +BWBͷΫϥε
.5*$POGJEFOUJBM Ϋϥεͷએݴ(Kotlin) ,PUMJOͷΫϥε ΊͪΌΊͪΌγϯϓϧʂʂʂ
.5*$POGJEFOUJBM Ϋϥεͷએݴ ݺͼग़͠ଆ ϓϥΠϚϦίϯετϥΫλʹॻ͔ΕͨϓϩύςΟΞΫ ηεϝιουΛࣗಈੜͯ͘͠ΕΔ ɾWBMHFUUFSͷΈࣗಈੜ ɾWBSHFUUFS TFUUFSͷࣗಈੜ ʢʣͰғ·Ε͍ͯΔ෦
ϓϥΠϚϦίϯετϥΫ λ
.5*$POGJEFOUJBM w σʔλΛอ࣋͢ΔΫϥε w ҎԼͷϝιουΛࣗಈੜͯ͘͠ΕΔ UP4USJOH શͯͷϑΟʔϧυΛએݴॱʹฒͨจࣈྻදݱΛੜ ͢Δ
FRVBMT Πϯελϯεͷൺֱ IBTIDPEF )BTI.BQͳͲͷϋογϡϕʔεͷίϯςφͷΩʔ ͱͯ͠ΘΕΔIBTIDPEF %BUB$MBTT EBUBΛ͚ͭΔ ϓϥΠϚϦίϯετϥΫλ͕ඞਢ
.5*$POGJEFOUJBM JOUFSGBDFͷ࣮ΛผͷΫϥεʹҕৡ͢Δ͜ͱ͕Ͱ͖Δ ҕৡΫϥε $UFTUʹ*UFTUͷ࣮ΛͤΔ
.5*$POGJEFOUJBM w +BWBͰγϯάϧτϯΛ࣮͢Δͱ͖ w ,PUMJOͰॻ͘ͱɺɺɺ γϯάϧτϯΛ࡞Δʹ
.5*$POGJEFOUJBM w طଘͷΫϥεʹରͯ͠ϝιουΛ৽ͨʹՃ͢Δ͜ ͱ͕Ͱ͖Δɻ TXJGUͷΤΫεςϯγϣϯతͳײ͡ ֦ுؔ Ϩγʔόܕ ϨγʔόΦϒδΣΫτ
Lambda
.5*$POGJEFOUJBM -BNCEB Ҿ ຊମ ͋ΔৼΔ͍ΛίʔυϒϩοΫͱͯ͠એݴՄೳͰɺ ؔͷҾʹͤΔ
.5*$POGJEFOUJBM w BOESPJEͰ5FYU7JFXΛੜͯ͠ɺύϥϝʔλΛઃఆ͍ͨ͠ͱ͖ -BNCEBͷԠ༻ BQQMZ +BWB ,PUMJO BQQMZΛ༻ UFYU7JFX͕
লུͰ͖Δ
.5*$POGJEFOUJBM ͳΜ͔TXJGUʹࣅͯͳ͍ʁ ௗͬΆ͍͠ ҰԠTXJGUͱແؔΒ͍͠ ผͷௗͷݴޠͱͷؔ
.5*$POGJEFOUJBM ΞδΣϯμ ࣗݾհ ,PUMJOͱ ؆ܿͳจ๏
/VMMͷऔΓѻ͍ +BWBͱͷޓੑ 2$%తͳ ·ͱΊ
.5*$POGJEFOUJBM w ,PUMJOͰมʹ/VMMڐ༰ੑΛαϙʔτ͍ͯ͠Δ /VMM҆શ /VMMڐ༰ /VMMඇڐ༰ /VMMΛೖ͢Δͱ ίϯύΠϥౖ͕ͬͯ͘ΕΔ
.5*$POGJEFOUJBM w JGͰΓա͢͝ w ҆શݺͼग़͠ԋࢉࢠ w ΤϧϏεԋࢉࢠ w
҆શΩϟετ BT w ඇOVMMද໌ w MFUؔ /VMMͰ͋Δ͔ͷνΣοΫ๏ Null許容型はnullでないことを確認してから呼び出す必要が ある
.5*$POGJEFOUJBM w ಛʹͳΜͷͳ͍ /VMMνΣοΫ๏ JGͰΓա͢͝
.5*$POGJEFOUJBM w ϝιουΛݺͼग़͢ࡍͷOVMMνΣοΫํ๏ w ͕OVMMͰͳ͍߹ͷΈϝιουΛݺͼग़͢ɻ /VMMνΣοΫ๏ ҆શݺͼग़͠ԋࢉࢠ GPPOVMM
GPPOVMM
.5*$POGJEFOUJBM w Λࢀর͢ΔࡍͷOVMMνΣοΫํ๏ w ͕OVMMͩͬͨ߹ɺΘΓͷΛฦ͢͜ͱ͕Ͱ͖Δ /VMMνΣοΫ๏ ΤϧϏεԋࢉࢠ GPPOVMM
GPPOVMM
.5*$POGJEFOUJBM /VMMνΣοΫํ๏ ҆શΩϟετԋࢉࢠ BT w ,PUMJOͷΩϟετBTԋࢉࢠΛ༻͍Δ͕ɺΩϟετʹ ࣦഊͨ͠߹ྫ֎͕ൃੜ͢Δ w ΛΩϟετ͢ΔࡍͷOVMMνΣοΫํ๏
w ͕OVMMͰͳ͍߹ɺΩϟετΛߦ͍ɺOVMMͩͬͨ ߹ɺOVMMΛฦ͢ GPPJT 5ZQF GPP JT5ZQF
.5*$POGJEFOUJBM /VMMνΣοΫํ๏ ඇOVMMද໌ w ͕OVMMͩͬͨ߹ɺ/VMM1PJOUFS&YDFQUJPOΛεϩʔ ͢Δ w جຊతʹ͍͚ͬͯͳ͍ɻ
GPPOVMM GPP OVMM
.5*$POGJEFOUJBM /VMMνΣοΫํ๏ MFUؔ w ͕ࣜOVMMͰͳ͍߹ͷΈϥϜμΛ࣮ߦ͢Δ GPPOVMM GPP OVMM
.5*$POGJEFOUJBM ΞδΣϯμ ࣗݾհ ,PUMJOͱ ؆ܿͳจ๏
/VMMͷऔΓѻ͍ +BWBͱͷޓੑ 2$%తͳ ·ͱΊ
.5*$POGJEFOUJBM +BWBͱ,PUMJOޓ +BWB͔Β,PUMJOͷΫϥεΛݺΔ͠ɺ ,PUMJO͔Β+BWBͷΫϥεΛݺͿ͜ͱͰ͖Δ ͔͠͠ɺҠߦͷࡍҎԼΛߟྀɺҙ͢Δඞཁ͕͋Δ ɾϓϩύςΟ͕OVMMʹͳΓ͏Δͷ͔൱͔ WBM WBS͔ ɾ+BWBͷαʔυύʔςΟϥΠϒϥϦΛ͍ͬͯΔͱΞϊ ςʔγϣϯϓϩηοα͕ෆ۩߹Λى͜͢߹͕͋Δ
+BWBͱͷޓੑ
.5*$POGJEFOUJBM +BWB͔Β༻Ͱ͖Δ ࣮ྫ ,PUMJOͰఆٛ͞Εͨ&OUJUZ
.5*$POGJEFOUJBM w +BWBͰఆٛ͞Ε͍ͯΔܕ,PUMJO͔ΒϓϥοτϑΥʔϜ ܕͱͯ͠ද͞ΕΔ w OVMMڐ༰ܕ͘͠OVMMඇڐ༰ܕͷͲͪΒ͔ͱͳΔ w ͜ͷܕΛѻ͏߹ɺͦͷม͕OVMMʹͳΓ͏Δ͔൱͔Λ ։ൃऀ͕ߟ͑ͳ͕Β࣮͠ͳ͚ΕͳΒͳ͍
ϓϥοτϑΥʔϜܕ 5ZQF 5ZQF 5ZQF PS ʹ +BWB ,PUMJO OVMMͷՄೳੑ͕͋Ε ΤϧϏεԋࢉࢠͳͲΛͬͯ OVMMͷରॲΛ͠ͳ͚ΕͳΒͳ͍
.5*$POGJEFOUJBM ΞδΣϯμ ࣗݾհ ,PUMJOͱ ؆ܿͳจ๏
/VMMͷऔΓѻ͍ +BWBͱͷޓੑ 2$%తͳ ·ͱΊ
.5*$POGJEFOUJBM ,PUMJOಋೖΛ2$%తʹߟ͑Δ 2 $ % /VMM҆શ طଘϓϩδΣΫτ ৽نϓϩδΣΫτ ؆ܿʹ͔͚ΔͨΊͷݮ
.5*$POGJEFOUJBM ΞδΣϯμ ࣗݾհ ,PUMJOͱ ؆ܿͳจ๏
/VMMͷऔΓѻ͍ +BWBͱͷޓੑ 2$%తͳ ·ͱΊ
.5*$POGJEFOUJBM w ,PUMJOΛ͏ͱίʔυྔͷݮψϧϙΛ͓͖ʹ͘͘ ͢Δ͜ͱ͕Ͱ͖Δɻ w +BWBͱͷ૬ޓޓੑͰطଘͷϓϩδΣΫτʹಋೖ ͍͢͠ w ࠓޙͷ"OESPJEΞϓϦ,PUMJOͰʂ
·ͱΊ
.5*$POGJEFOUJBM ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ .FSSZ$ISJTUNBT