facebook twitter hatena line email

「Android/kotlin/基本」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「==null許可== var name: String = null // これだと入らない var title: String? = null // ?をつけるとnullが許可される」)
 
(lateinitとは)
(同じ利用者による、間の19版が非表示)
行2: 行2:
 
  var name: String = null // これだと入らない
 
  var name: String = null // これだと入らない
 
  var title: String? = null // ?をつけるとnullが許可される
 
  var title: String? = null // ?をつけるとnullが許可される
 +
 +
==読み込みのみ==
 +
valを使う
 +
val description = "hoge"
 +
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じゃない時の値==
 +
text1.setText(name ?: "hello");
 +
 +
==null判定エラー==
 +
requireNotNull(context, {"contextがありません"})
 +
IllegalArgumentExceptionの例外が発生する。
 +
 +
以下と同等だが上のほうがシンプルでよい。
 +
<pre>
 +
if (context == null) {
 +
    throw IllegalArgumentException("contextがありません")
 +
}
 +
</pre>
 +
 +
==型==
 +
<pre>
 +
Int // 数字
 +
String // 文字
 +
Boolean // 真偽
 +
Array<String> // 文字配列
 +
Unit // voidみたいなもの、Unitは省略可能
 +
</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
 +
 +
==短縮コード==
 +
val name = if (id = 10) "taro" else "none"

2020年5月12日 (火) 17:44時点における版

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がありません")
}

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

短縮コード

val name = if (id = 10) "taro" else "none"