「Android/kotlin/基本」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→null判定のときにreturn) |
|||
(同じ利用者による、間の18版が非表示) | |||
行7: | 行7: | ||
val description = "hoge" | val description = "hoge" | ||
description = "hoge2" // 許可されない | description = "hoge2" // 許可されない | ||
+ | |||
+ | ==!!の意味== | ||
+ | <pre> | ||
+ | var nickname: String? = null | ||
+ | if (!TextUtils.isEmpty(nickname!!)) { | ||
+ | Log.i("test", nickname) | ||
+ | } | ||
+ | </pre> | ||
+ | nullが入ってたときにkotlin.KotlinNullPointerExceptionを発生させる。 | ||
+ | ==?の意味== | ||
+ | user?.name = "taro" | ||
+ | userがnullだったらnullとしてそのまま処理する。 | ||
==nullじゃない時の値== | ==nullじゃない時の値== | ||
text1.setText(name ?: "hello"); | text1.setText(name ?: "hello"); | ||
+ | |||
+ | ==null判定エラー== | ||
+ | requireNotNull(context, {"contextがありません"}) | ||
+ | IllegalArgumentExceptionの例外が発生する。 | ||
+ | |||
+ | 以下と同等だが上のほうがシンプルでよい。 | ||
+ | <pre> | ||
+ | if (context == null) { | ||
+ | throw IllegalArgumentException("contextがありません") | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | ==null判定のときにreturn== | ||
+ | <pre> | ||
+ | var aa = null | ||
+ | val url = aa ?: return | ||
+ | </pre> | ||
+ | |||
+ | 参考:https://qiita.com/itmammoth/items/918835d1433809e4def6 | ||
==型== | ==型== | ||
行20: | 行51: | ||
</pre> | </pre> | ||
− | == | + | ==lateinitとは== |
− | + | インスタンスや変数が使われるタイミングで初期化するもの。nullが入らないように設計されたもの。DIとかでも使えそう。 | |
− | + | <pre> | |
+ | class MainActivity : AppCompatActivity() { | ||
+ | lateinit var user: User | ||
+ | override fun onCreate(savedInstanceState: Bundle?) { | ||
+ | super.onCreate(savedInstanceState) | ||
+ | setContentView(R.layout.activity_main) | ||
+ | user = User() | ||
+ | } | ||
+ | fun hoge() { | ||
+ | user.name = "taro" | ||
+ | Log.i("MainActivity", "user.name=" + user.name) | ||
+ | } | ||
} | } | ||
+ | </pre> | ||
+ | lateinit property has not been initialized が起こる場合はインスタンス生成せず呼び出してるので、初回に生成はしておく。 | ||
+ | |||
+ | ==配列の分割== | ||
+ | <pre> | ||
+ | val key = params[0] | ||
+ | val value = params[1] | ||
+ | </pre> | ||
+ | or | ||
+ | val (key, value) = params |
2021年3月3日 (水) 20:49時点における最新版
目次
null許可
var name: String = null // これだと入らない var title: String? = null // ?をつけるとnullが許可される
読み込みのみ
valを使う
val description = "hoge" description = "hoge2" // 許可されない
!!の意味
var nickname: String? = null if (!TextUtils.isEmpty(nickname!!)) { Log.i("test", nickname) }
nullが入ってたときにkotlin.KotlinNullPointerExceptionを発生させる。
?の意味
user?.name = "taro"
userがnullだったらnullとしてそのまま処理する。
nullじゃない時の値
text1.setText(name ?: "hello");
null判定エラー
requireNotNull(context, {"contextがありません"})
IllegalArgumentExceptionの例外が発生する。
以下と同等だが上のほうがシンプルでよい。
if (context == null) { throw IllegalArgumentException("contextがありません") }
null判定のときにreturn
var aa = null val url = aa ?: return
参考:https://qiita.com/itmammoth/items/918835d1433809e4def6
型
Int // 数字 String // 文字 Boolean // 真偽 Array<String> // 文字配列 Unit // voidみたいなもの、Unitは省略可能
lateinitとは
インスタンスや変数が使われるタイミングで初期化するもの。nullが入らないように設計されたもの。DIとかでも使えそう。
class MainActivity : AppCompatActivity() { lateinit var user: User override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) user = User() } fun hoge() { user.name = "taro" Log.i("MainActivity", "user.name=" + user.name) } }
lateinit property has not been initialized が起こる場合はインスタンス生成せず呼び出してるので、初回に生成はしておく。
配列の分割
val key = params[0] val value = params[1]
or
val (key, value) = params