との差 !! と ? Kotlin の演算子

Kailash Vaviya 2024年2月15日
  1. Null 安全の概念
  2. Null 安全演算子 ? コトリンで
  3. 非 Null アサーション !! Kotlin のオペレーター
との差 !! と ? Kotlin の演算子

Kotlin では、アサーション演算子 !! 安全な呼び出し演算子 ? null 安全で動作します。

この記事では、null セーフティの概念を紹介します。 !! の方法についても説明します。 と ? in Kotlin は null の安全性に役立ちます。

Null 安全の概念

Kotlin の型システムは、null 参照の問題を取り除くことを目的としています。 問題は、null の概念を持つ多くのプログラミング言語で、null 参照メンバーにアクセスすると例外が発生することです。

Kotlin では、この例外は NullPointerException または NPE と呼ばれます。 Kotlin の型システムは、null 安全性によって null 参照の問題を克服することを目的としています。

システムは、NULL 参照を保持できる参照と保持できない参照を区別します。 たとえば、標準の String 変数は null を保持できませんが、String? は保持できません。 できる。

同じことを示す例を次に示します。

最初の例では、null 以外の参照を意味する標準変数を使用しています。

fun main() {
    var s: String = "Hello" // Regular initialization means a non-null value
    println(s)
}

出力:

通常の初期化変数

標準変数で null を使用しようとすると、エラーがスローされます。

fun main() {
    var s: String = null
    println(s)
}

出力:

null 値を持つ通常の初期化変数

2 番目の例では String? を使用していますが、これは null にすることができます。

fun main() {
    var s: String? = null // we can set this to null
    print(s)
}

出力:

弦? Null 値を持つ変数

ご覧のとおり、String? だけです。 null を保持できます。 したがって、標準の変数の初期化であれば、Kotlin の型システムはそれが null 値を持たないことを理解できます。

したがって、NPE を気にすることなく、そのような参照をすばやく呼び出すことができます。

しかし、null を保持できる変数はどうでしょうか? これらの変数は NPE セーフではないため、直接アクセスすることはできません。

fun main() {
    var s: String? = null // we can set this to null
    print(s)

    val l = s.length // This throws error as 's' can be null
}

出力:

アクセス文字列? 変数がエラーをスローします

では、そのような変数にどのようにアクセスするのでしょうか? そして答えは?を通してです と !! オペレーター。

Null 安全演算子 ? コトリンで

null 参照メンバーにアクセスする 1つの方法は、? を使用することです。 この演算子を使用すると、変数が null でない場合は値が返され、それ以外の場合は null が返されます。

これを理解するために、以下の例を考えてみましょう。

最初の例では null 以外の値を使用し、その長さを取得します。

例 1:

fun main() {
    var s: String? = "Hello"
    println(s)

    val l = s?.length
    print(l)
}

出力:

アクセス文字列? Null 以外の値を持つ変数

ここで、変数を null として初期化します。

例 2:

fun main() {
    var s: String? = null
    println(s)

    val l = s?.length
    print(l)
}

出力:

アクセス文字列? Null 値を持つ変数

安全な演算子 ? チェーンの作成にも役立ちます。

たとえば、会社の従業員を考えてみましょう。 彼には、マネージャーの下で働くチームリーダーがいるかもしれません。

? を使用できます 次の方法でチェーンを作成し、David のマネージャーの名前にアクセスします。

employeename?.teamleader?.manager?.name

上記の構文は次のように読むことができます。

  • employeename が null でない場合は、部門を返します。
  • department が null でない場合は、マネージャーを返します。
  • manager が null でない場合は、名前を返します。

変数のいずれかが null の場合、構文は null を返します。

非 Null アサーション !! Kotlin のオペレーター

null 参照メンバーにアクセスする別のオプションは、!! を使用することです。 オペレーター。 NPE愛好家向けです。

したがって、null 以外の参照メンバーにアクセスするアクションで、存在する場合は値を与えるか、NPE をスローする必要がある場合は、Kotlin でこの演算子を使用できます。

安全な ? に対して行ったのと同じ 2つの例を考えてみましょう。 演算子を使用して、not-null アサーション !! を理解する オペレーターが動作します。

例 1:

fun main() {
    var s: String? = "Hello"
    println(s)

    val l = s!!.length
    print(l)
}

出力:

アクセス文字列? Not-Null アサーション 1 を持つ変数

例 2:

fun main() {
    var s: String? = null
    println(s)

    val l = s!!.length
    print(l)
}

出力:

アクセス文字列? Not-Null アサーションを持つ変数 2

著者: Kailash Vaviya
Kailash Vaviya avatar Kailash Vaviya avatar

Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.

LinkedIn

関連記事 - Kotlin Operator