【Android Studio&Kotlin】「as」「 !」「 ?」 変数の後ろにつける ! 記号、 ? 記号の使い方

こんにちは。YOSHITAKA(@YOSHITA19704216)です。

初心者
「as」「 !」「 ?」はどういった時に理利用するんですか?

よしたか
学んだことをアウトプットしていきます。

 

この記事を読むことで
  • 「as」「 !」「 ?」の使い分けがわかります。

Contents

「as」「 !」「 ?」の意味と使い方

対象者

大前提
  • kotolin初学者に向けて書いております。

「as」「 !」「 ?」

キャスト(as)や、型や変数の後ろにつける ! 記号、 ? 記号の意味について

「?」はnullable可能  型宣言に?をつける

型宣言に付けた場合は nullableになります。

Kotlin は明示的に 「?」 を付けないと null を代入できない

var b : String? = "abc"
b = null

 変数に?をつける

変数に付けた場合は Safe Call(安全な呼び出し)になります。

b が null じゃない場合にのみ、関数を実行

b が null の場合は null を返す。

var l = b?.length

?:  エルピス演算子(Elvis Operator)

?: の左側にくる式の値が null の場合は右側の値を返す。

今回の場合は-1になります。

val l = b?.length ?: -1

!

Java コード呼び出し時の引数や返り値に型の後ろについていて、T! は T もしくは ? を表します。

※ Kotlin コードを書いている際に直接使用することはありません。

例えば Android の Context.getFileStreamPath は IDE の補完機能では context.getFileStreamPath(name : String!) : File! と表示されますが、! がついていることにより、引数や返り値に nullable な型でもそうでない型でもどちらでも使用できることがわかります。

var p0 : String? = null;
var f0 : File? = context.getFileStreamPath(p0)
var p1 : String = ""
var f1 : File = context.getFileStreamPath(p1)

!!

var l = b!!.length()

b が Null の場合 Null Pointer Exception が発生します。

「as」は  アンセーフキャスト

キャストとは、プログラミングにおいて、あるデータ型の変数を別のデータ型に変換する型変換のことで、ソースコードに記述して行うものを指します。 

キャストに失敗した場合は例外が発生します。

 

明示的なキャスト

// yをStringにキャストするが、キャストできなかったら例外を投げる。
val x: String = y as String
// 上の場合、nullでも例外。nullを許容するにはNullableでないといけない
val a: String? = b as String?
// as? を使うと失敗時に例外を投げずnullを返す。なのでキャスト結果はNullableになる。
val x: String? = y as? String

 

エラー文章は次のようになります。


Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
	at ******.main(*******.kt:11)
11

キャストに失敗した場合はClassCastExceptionという例外がスローされてしまいます。

例外は適切に処理されなければ不具合のもとになるため、Kotlinではアンセーフキャストと呼ばれています。

「as?」 は セーフキャスト

安全なキャスト。

キャストが失敗した場合は null を返します。

明示的なキャスト


// as? を使うと失敗時に例外を投げずnullを返す。なのでキャスト結果はNullableになる。
val x: String? = y as? String

 

var aInt : Int? = a as? Int

キャストしようとしてできなかった場合、nullが返ります。
つまり、そもそも適切に処理をしないとビルドエラーになり、実行することができません。
プログラマコンパイラによって、きちんとnullチェックをすることが強制され、 うっかりによるチェックもれを防ぐことができるので「安全」だということになるようです。

まとめ

今回は「as」「 !」「 ?」 変数の後ろにつける ! 記号、 ? 記号の使い方についてざっくりお伝えしました。

 

詳しいことは参考に更に書いていますので、ご確認ください。

※プログラミングは習得中ですので、参考程度に記事を読んでください。

 

参考はこちら

 

https://www.ipride.co.jp/blog/3987

https://k5-n.com/kotlin-tour/

あなたは「Web集客」に限界を感じていませんか?

サイトをただ作るだけで満足ですか?

あなたのサービスやコンテンツはとっても有益なものがたくさんあります。

良いコンテンツも埋もれてしまっては全く意味がありません。

正しい知識と実践で、SEO対策はもちろん、ユーザビリティーを考えたサイトを作りませんか?

私と歩めばWebマーケティング知識とWordPressスキルが定着し、サイト回遊率、再訪問がアップします。

しかも、これだけでは終わりません!!

その先の「攻めのメディア」と組み合わせ、あなたのサービスを広めて売上を伸ばしていきます。

サイトを育てて、長い間愛されることのできるWordPressサイトからの集客導線(ゴールデンルート)を一緒に作りませんか?

↓ ↓ ↓ ↓ ↓ ↓ 

おすすめの記事