SlideShare a Scribd company logo
2017/9/16 NSEG Vol.92
kotlin
Null Safety
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
お前
誰︖by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
⾃⼰紹介
・名前︓アベヒロキ (@hATrayflood)
・職業︓⾃宅サーバ管理者
・URL︓rayflood.org/diary-temp/
・地元︓東部町
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
kotlin
とは by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
JetBrains
(IntelliJ)
開発
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
alt java
っぽい⾔語
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
javaと相互
呼び出し可能
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
android
公式⾔語
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
基本的な⽂法
http://kotlinlang.org/docs/reference/basic-syntax.html
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
. ∧_∧
( ´∀`)< ぬるぽ
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
( ・∀・)  | | ガッ
と    )   | |
Y /ノ     ⼈
/ )  <  >__Λ ∩
_/し' // V`Д´)/ ←>>1
(_フ⼺          /
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
を軽減できる
仕組み
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
基本by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
val hoge: String
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
val fuga: String?
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
違いは︖
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
末尾の ?
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
val hoge: String
null不可
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
val fuga: String?
null許容
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
val hoge: String = null
コンパイルエラー
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
半ば型が違うもの
として扱われる
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
fun setHoge(hoge: String) {
this.hoge = hoge
}
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
fun getFuga(): String? {
return null
}
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
メソッドの引数と
戻り値も同様
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
基本2
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
fun setHoge(hoge: String) {
this.hoge = hoge
}
fun getFuga(): String? {
return "fuga"
}
val fuga = getFuga()
setHoge(fuga)
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
コンパイルエラー
fugaはnullの可能性があるので
nullを許容しないsetHoge()
には渡せない
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
どうするか
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
val fuga = getFuga()
if(fuga != null){
setHoge(fuga)
}
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
nullチェック
で渡せる
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
val fuga = getFuga()
setHoge(fuga ?: "fuga")
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
?: 演算⼦で
nullの代替値を
設定できる
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
fun getHage(): Hage? {
return Hage()
}
val hage = getHage()
hage.setHoge("hoge")
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
これもコンパイルエラー
hageはnullの可能性があるので
setHoge()を実⾏できない
ぬるぽの危険あり
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
どうするか
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
val hage = getHage()
hage?.setHoge("hoge")
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
変数名の末尾に ? をつけると
メソッド実⾏時に⾃動的に
nullチェック
nullだったらスルーする
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
⼿動nullチェックでも可
?: 演算⼦でも可能だけど
使い道はあんまりなさげ
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
禁じ⼿
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
val hage = getHage()
hage!!.setHoge("hoge")
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
変数名の末尾に !! をつけると
メソッド実⾏時にnullチェック
せず強引に実⾏します
ぬるぽの危険あり
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
禁じ⼿2
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
val hage = getHage() as Hage
hage.setHoge("hoge")
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
as でキャストすると
強引に ? を外せます
中⾝はnullもあるので
ぬるぽの危険あり
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
まとめby ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
適切に使えば
コンパイル時点で
ぬるぽ回避可能
なのは⼤きい
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
抜け道もあるので
気を付けよう
(特に外部ライブラリ)
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
最近の愛読書
2017/9/16 NSEG Vol.92
※いずれもDL版もしくはsteam版
by ABE Hiroki aka hATrayflood
by ABE Hiroki aka hATrayflood
y y
2017/9/16 NSEG Vol.92
・リンク集
twitter @hATrayflood
http://twitter.com/hATrayflood
Kotlin Programming Language
http://kotlinlang.org/
KotlinがAndroid開発⾔語になる
https://www.infoq.com/jp/news/2017/05/android-kotlin
【!ってなんだ】KotlinとJava、nullとPlatformType【NullableにNotNull】 - Qiita
http://qiita.com/RyotaMurohoshi/items/5fcc10d04fecd7304556
JavaプログラマがKotlinでつまづきがちなところ - Qiita
http://qiita.com/koher/items/d9411a00986f14683a3f
Kotlin : as, !, ? 周りのチートシート - i++
http://increment.hatenablog.com/entry/2015/10/31/090743
by ABE Hiroki aka hATrayflood
y y

More Related Content

More from hATrayflood

Nseg26 you should become a mozillian !!
Nseg26 you should become a mozillian !!Nseg26 you should become a mozillian !!
Nseg26 you should become a mozillian !!hATrayflood
 
Modbuilders 独自ビルド環境について
Modbuilders 独自ビルド環境についてModbuilders 独自ビルド環境について
Modbuilders 独自ビルド環境についてhATrayflood
 
高橋rf.html 0.3
高橋rf.html 0.3高橋rf.html 0.3
高橋rf.html 0.3hATrayflood
 
Nseg17 新世代firefox紹介
Nseg17 新世代firefox紹介Nseg17 新世代firefox紹介
Nseg17 新世代firefox紹介hATrayflood
 
Nseg18 カレーとfirefox
Nseg18 カレーとfirefoxNseg18 カレーとfirefox
Nseg18 カレーとfirefoxhATrayflood
 
Nseg15 一般的じゃないpython入門
Nseg15 一般的じゃないpython入門Nseg15 一般的じゃないpython入門
Nseg15 一般的じゃないpython入門hATrayflood
 
Modest09 j query事始め
Modest09 j query事始めModest09 j query事始め
Modest09 j query事始めhATrayflood
 
Modest08 core i7 2600とfirefox 4.0b9でベンチ測ってみたよ
Modest08 core i7 2600とfirefox 4.0b9でベンチ測ってみたよModest08 core i7 2600とfirefox 4.0b9でベンチ測ってみたよ
Modest08 core i7 2600とfirefox 4.0b9でベンチ測ってみたよhATrayflood
 
Nseg10 pcセキュリティの第一歩
Nseg10 pcセキュリティの第一歩Nseg10 pcセキュリティの第一歩
Nseg10 pcセキュリティの第一歩hATrayflood
 
Devnaga6 高橋rf.html + printplusリリース
Devnaga6 高橋rf.html + printplusリリースDevnaga6 高橋rf.html + printplusリリース
Devnaga6 高橋rf.html + printplusリリースhATrayflood
 
Modest06 firefox 4 の l10 n について
Modest06 firefox 4 の l10 n についてModest06 firefox 4 の l10 n について
Modest06 firefox 4 の l10 n についてhATrayflood
 
Modest04 firefox-3.6.4以降のビルドについて
Modest04 firefox-3.6.4以降のビルドについてModest04 firefox-3.6.4以降のビルドについて
Modest04 firefox-3.6.4以降のビルドについてhATrayflood
 
Modest02 freetype2 on fx-3.6 win32
Modest02 freetype2 on fx-3.6 win32Modest02 freetype2 on fx-3.6 win32
Modest02 freetype2 on fx-3.6 win32hATrayflood
 
Nseg8 最近のパソコン事情について
Nseg8 最近のパソコン事情についてNseg8 最近のパソコン事情について
Nseg8 最近のパソコン事情についてhATrayflood
 
Nseg5 第17回北海道開発オフ参加報告
Nseg5 第17回北海道開発オフ参加報告Nseg5 第17回北海道開発オフ参加報告
Nseg5 第17回北海道開発オフ参加報告hATrayflood
 
Nseg3 firefoxとmozillaコミュニティの紹介
Nseg3 firefoxとmozillaコミュニティの紹介Nseg3 firefoxとmozillaコミュニティの紹介
Nseg3 firefoxとmozillaコミュニティの紹介hATrayflood
 
Nseg2 自宅サーバ運用について
Nseg2 自宅サーバ運用についてNseg2 自宅サーバ運用について
Nseg2 自宅サーバ運用についてhATrayflood
 
Devdo17 nsegの現状と課題
Devdo17 nsegの現状と課題Devdo17 nsegの現状と課題
Devdo17 nsegの現状と課題hATrayflood
 
高橋Rf.html + printplus
高橋Rf.html + printplus高橋Rf.html + printplus
高橋Rf.html + printplushATrayflood
 

More from hATrayflood (19)

Nseg26 you should become a mozillian !!
Nseg26 you should become a mozillian !!Nseg26 you should become a mozillian !!
Nseg26 you should become a mozillian !!
 
Modbuilders 独自ビルド環境について
Modbuilders 独自ビルド環境についてModbuilders 独自ビルド環境について
Modbuilders 独自ビルド環境について
 
高橋rf.html 0.3
高橋rf.html 0.3高橋rf.html 0.3
高橋rf.html 0.3
 
Nseg17 新世代firefox紹介
Nseg17 新世代firefox紹介Nseg17 新世代firefox紹介
Nseg17 新世代firefox紹介
 
Nseg18 カレーとfirefox
Nseg18 カレーとfirefoxNseg18 カレーとfirefox
Nseg18 カレーとfirefox
 
Nseg15 一般的じゃないpython入門
Nseg15 一般的じゃないpython入門Nseg15 一般的じゃないpython入門
Nseg15 一般的じゃないpython入門
 
Modest09 j query事始め
Modest09 j query事始めModest09 j query事始め
Modest09 j query事始め
 
Modest08 core i7 2600とfirefox 4.0b9でベンチ測ってみたよ
Modest08 core i7 2600とfirefox 4.0b9でベンチ測ってみたよModest08 core i7 2600とfirefox 4.0b9でベンチ測ってみたよ
Modest08 core i7 2600とfirefox 4.0b9でベンチ測ってみたよ
 
Nseg10 pcセキュリティの第一歩
Nseg10 pcセキュリティの第一歩Nseg10 pcセキュリティの第一歩
Nseg10 pcセキュリティの第一歩
 
Devnaga6 高橋rf.html + printplusリリース
Devnaga6 高橋rf.html + printplusリリースDevnaga6 高橋rf.html + printplusリリース
Devnaga6 高橋rf.html + printplusリリース
 
Modest06 firefox 4 の l10 n について
Modest06 firefox 4 の l10 n についてModest06 firefox 4 の l10 n について
Modest06 firefox 4 の l10 n について
 
Modest04 firefox-3.6.4以降のビルドについて
Modest04 firefox-3.6.4以降のビルドについてModest04 firefox-3.6.4以降のビルドについて
Modest04 firefox-3.6.4以降のビルドについて
 
Modest02 freetype2 on fx-3.6 win32
Modest02 freetype2 on fx-3.6 win32Modest02 freetype2 on fx-3.6 win32
Modest02 freetype2 on fx-3.6 win32
 
Nseg8 最近のパソコン事情について
Nseg8 最近のパソコン事情についてNseg8 最近のパソコン事情について
Nseg8 最近のパソコン事情について
 
Nseg5 第17回北海道開発オフ参加報告
Nseg5 第17回北海道開発オフ参加報告Nseg5 第17回北海道開発オフ参加報告
Nseg5 第17回北海道開発オフ参加報告
 
Nseg3 firefoxとmozillaコミュニティの紹介
Nseg3 firefoxとmozillaコミュニティの紹介Nseg3 firefoxとmozillaコミュニティの紹介
Nseg3 firefoxとmozillaコミュニティの紹介
 
Nseg2 自宅サーバ運用について
Nseg2 自宅サーバ運用についてNseg2 自宅サーバ運用について
Nseg2 自宅サーバ運用について
 
Devdo17 nsegの現状と課題
Devdo17 nsegの現状と課題Devdo17 nsegの現状と課題
Devdo17 nsegの現状と課題
 
高橋Rf.html + printplus
高橋Rf.html + printplus高橋Rf.html + printplus
高橋Rf.html + printplus
 

Recently uploaded

FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 

Recently uploaded (16)

FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 

Nseg92 kotlin null safety

  • 1. 2017/9/16 NSEG Vol.92 kotlin Null Safety by ABE Hiroki aka hATrayflood
  • 2. y y 2017/9/16 NSEG Vol.92 お前 誰︖by ABE Hiroki aka hATrayflood
  • 3. y y 2017/9/16 NSEG Vol.92 ⾃⼰紹介 ・名前︓アベヒロキ (@hATrayflood) ・職業︓⾃宅サーバ管理者 ・URL︓rayflood.org/diary-temp/ ・地元︓東部町 by ABE Hiroki aka hATrayflood
  • 4. y y 2017/9/16 NSEG Vol.92 kotlin とは by ABE Hiroki aka hATrayflood
  • 5. y y 2017/9/16 NSEG Vol.92 JetBrains (IntelliJ) 開発 by ABE Hiroki aka hATrayflood
  • 6. y y 2017/9/16 NSEG Vol.92 alt java っぽい⾔語 by ABE Hiroki aka hATrayflood
  • 7. y y 2017/9/16 NSEG Vol.92 javaと相互 呼び出し可能 by ABE Hiroki aka hATrayflood
  • 8. y y 2017/9/16 NSEG Vol.92 android 公式⾔語 by ABE Hiroki aka hATrayflood
  • 9. y y 2017/9/16 NSEG Vol.92 基本的な⽂法 http://kotlinlang.org/docs/reference/basic-syntax.html by ABE Hiroki aka hATrayflood
  • 10. y y 2017/9/16 NSEG Vol.92 . ∧_∧ ( ´∀`)< ぬるぽ by ABE Hiroki aka hATrayflood
  • 11. y y 2017/9/16 NSEG Vol.92 ( ・∀・)  | | ガッ と    )   | | Y /ノ     ⼈ / )  <  >__Λ ∩ _/し' // V`Д´)/ ←>>1 (_フ⼺          / by ABE Hiroki aka hATrayflood
  • 12. y y 2017/9/16 NSEG Vol.92 を軽減できる 仕組み by ABE Hiroki aka hATrayflood
  • 13. y y 2017/9/16 NSEG Vol.92 基本by ABE Hiroki aka hATrayflood
  • 14. y y 2017/9/16 NSEG Vol.92 val hoge: String by ABE Hiroki aka hATrayflood
  • 15. y y 2017/9/16 NSEG Vol.92 val fuga: String? by ABE Hiroki aka hATrayflood
  • 16. y y 2017/9/16 NSEG Vol.92 違いは︖ by ABE Hiroki aka hATrayflood
  • 17. y y 2017/9/16 NSEG Vol.92 末尾の ? by ABE Hiroki aka hATrayflood
  • 18. y y 2017/9/16 NSEG Vol.92 val hoge: String null不可 by ABE Hiroki aka hATrayflood
  • 19. y y 2017/9/16 NSEG Vol.92 val fuga: String? null許容 by ABE Hiroki aka hATrayflood
  • 20. y y 2017/9/16 NSEG Vol.92 val hoge: String = null コンパイルエラー by ABE Hiroki aka hATrayflood
  • 21. y y 2017/9/16 NSEG Vol.92 半ば型が違うもの として扱われる by ABE Hiroki aka hATrayflood
  • 22. y y 2017/9/16 NSEG Vol.92 fun setHoge(hoge: String) { this.hoge = hoge } by ABE Hiroki aka hATrayflood
  • 23. y y 2017/9/16 NSEG Vol.92 fun getFuga(): String? { return null } by ABE Hiroki aka hATrayflood
  • 24. y y 2017/9/16 NSEG Vol.92 メソッドの引数と 戻り値も同様 by ABE Hiroki aka hATrayflood
  • 25. y y 2017/9/16 NSEG Vol.92 基本2 by ABE Hiroki aka hATrayflood
  • 26. y y 2017/9/16 NSEG Vol.92 fun setHoge(hoge: String) { this.hoge = hoge } fun getFuga(): String? { return "fuga" } val fuga = getFuga() setHoge(fuga) by ABE Hiroki aka hATrayflood
  • 27. y y 2017/9/16 NSEG Vol.92 コンパイルエラー fugaはnullの可能性があるので nullを許容しないsetHoge() には渡せない by ABE Hiroki aka hATrayflood
  • 28. y y 2017/9/16 NSEG Vol.92 どうするか by ABE Hiroki aka hATrayflood
  • 29. y y 2017/9/16 NSEG Vol.92 val fuga = getFuga() if(fuga != null){ setHoge(fuga) } by ABE Hiroki aka hATrayflood
  • 30. y y 2017/9/16 NSEG Vol.92 nullチェック で渡せる by ABE Hiroki aka hATrayflood
  • 31. y y 2017/9/16 NSEG Vol.92 val fuga = getFuga() setHoge(fuga ?: "fuga") by ABE Hiroki aka hATrayflood
  • 32. y y 2017/9/16 NSEG Vol.92 ?: 演算⼦で nullの代替値を 設定できる by ABE Hiroki aka hATrayflood
  • 33. y y 2017/9/16 NSEG Vol.92 fun getHage(): Hage? { return Hage() } val hage = getHage() hage.setHoge("hoge") by ABE Hiroki aka hATrayflood
  • 34. y y 2017/9/16 NSEG Vol.92 これもコンパイルエラー hageはnullの可能性があるので setHoge()を実⾏できない ぬるぽの危険あり by ABE Hiroki aka hATrayflood
  • 35. y y 2017/9/16 NSEG Vol.92 どうするか by ABE Hiroki aka hATrayflood
  • 36. y y 2017/9/16 NSEG Vol.92 val hage = getHage() hage?.setHoge("hoge") by ABE Hiroki aka hATrayflood
  • 37. y y 2017/9/16 NSEG Vol.92 変数名の末尾に ? をつけると メソッド実⾏時に⾃動的に nullチェック nullだったらスルーする by ABE Hiroki aka hATrayflood
  • 38. y y 2017/9/16 NSEG Vol.92 ⼿動nullチェックでも可 ?: 演算⼦でも可能だけど 使い道はあんまりなさげ by ABE Hiroki aka hATrayflood
  • 39. y y 2017/9/16 NSEG Vol.92 禁じ⼿ by ABE Hiroki aka hATrayflood
  • 40. y y 2017/9/16 NSEG Vol.92 val hage = getHage() hage!!.setHoge("hoge") by ABE Hiroki aka hATrayflood
  • 41. y y 2017/9/16 NSEG Vol.92 変数名の末尾に !! をつけると メソッド実⾏時にnullチェック せず強引に実⾏します ぬるぽの危険あり by ABE Hiroki aka hATrayflood
  • 42. y y 2017/9/16 NSEG Vol.92 禁じ⼿2 by ABE Hiroki aka hATrayflood
  • 43. y y 2017/9/16 NSEG Vol.92 val hage = getHage() as Hage hage.setHoge("hoge") by ABE Hiroki aka hATrayflood
  • 44. y y 2017/9/16 NSEG Vol.92 as でキャストすると 強引に ? を外せます 中⾝はnullもあるので ぬるぽの危険あり by ABE Hiroki aka hATrayflood
  • 45. y y 2017/9/16 NSEG Vol.92 まとめby ABE Hiroki aka hATrayflood
  • 46. y y 2017/9/16 NSEG Vol.92 適切に使えば コンパイル時点で ぬるぽ回避可能 なのは⼤きい by ABE Hiroki aka hATrayflood
  • 47. y y 2017/9/16 NSEG Vol.92 抜け道もあるので 気を付けよう (特に外部ライブラリ) by ABE Hiroki aka hATrayflood
  • 50. by ABE Hiroki aka hATrayflood y y 2017/9/16 NSEG Vol.92 ・リンク集 twitter @hATrayflood http://twitter.com/hATrayflood Kotlin Programming Language http://kotlinlang.org/ KotlinがAndroid開発⾔語になる https://www.infoq.com/jp/news/2017/05/android-kotlin 【!ってなんだ】KotlinとJava、nullとPlatformType【NullableにNotNull】 - Qiita http://qiita.com/RyotaMurohoshi/items/5fcc10d04fecd7304556 JavaプログラマがKotlinでつまづきがちなところ - Qiita http://qiita.com/koher/items/d9411a00986f14683a3f Kotlin : as, !, ? 周りのチートシート - i++ http://increment.hatenablog.com/entry/2015/10/31/090743 by ABE Hiroki aka hATrayflood
  • 51. y y