Java はプログラミング言語の中で優勢であるため、Java 開発者が Kotlin を使用中に同じ間違いを犯しているのを何度も見かけます。誤解しないでください。これは、これらがバグであると言っているのではなく、開発者が Java での開発に慣れていて Kotlin の機能を活用していない場合、Kotlin で「コードの臭い」が発生する傾向があるということです。
この記事では、私がよく目にするコードの匂いと、それを「Kotlin 方式」で理想的に実装する方法について説明します。
このシリーズのパート 1 では以下について説明します:
私の Java 開発者にもレコード クラスの使用経験がある人が増えてくると、このトピックはすぐに消えるかもしれません。それでも、Java レコードと Kotlin データ クラスの間にはいくつかの違いがあります。
Java メソッド:
<code class="language-java">public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getters, setters, ... }</code>
または記録のために:
<code class="language-java">public record Person( String name, int age ) { }</code>
Kotlin の方法:
<code class="language-kotlin">data class Person(val name: String, var age: Int)</code>
Java レコードと Kotlin データ クラスの間には、知っておくとよい相違点がいくつかあります。
いくつかの例:
Java でオブジェクトをコピー
<code class="language-java">Person p2 = new Person(p1.getName(), p1.getAge());</code>
Kotlin:
<code class="language-kotlin">val p2 = p1.copy(age = 42)</code>
または Java での宣言の構造化:
<code class="language-java">String name = p1.getName(); int age = p1.getAge();</code>
Kotlin:
<code class="language-kotlin">val (name, age) = p1 println(name) // "John" println(age) // 42</code>
私の意見では、Kotlin の null 安全性は最も強力な機能の 1 つです。これは、時間と手間を大幅に節約する画期的な機能です。 Kotlin では、null 安全性が型システムに組み込まれているため、null 関連のランタイム エラーを回避しやすくなります。
Kotlin では、null 許容型は明示的に宣言されます。これは、null 値を保持できる変数を持つことができますが、それを宣言で明示的に指定する必要があることを意味します。
null 非許容型 (デフォルトの動作)
デフォルトでは、Kotlin のすべての型は null 非許容です。つまり、変数は null 値を保持できません。
<code class="language-kotlin">val name: String = "John" // 不可空 name = null // 编译错误!</code>
Nullable 型
NULL 値を保持できる変数を宣言するには、? 演算子を使用する必要があります。
<code class="language-kotlin">val name: String? = null // 可空</code>
強力な機能は、安全な通話オペレーター? です。これにより、NullPointerException をスローせずに、安全にメソッドを呼び出したり、プロパティにアクセスしたりできるようになります。
例
<code class="language-java">public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getters, setters, ... }</code>
?.operator は、オブジェクトが空かどうかをチェックし、空の場合はすぐに null を返し、そうでない場合はメソッドの呼び出しまたはプロパティへのアクセスを続けます。オブジェクトが空の場合、式全体が null と評価されます。
Elvis 演算子?: 演算子の左側の式が空の場合にデフォルト値を返す略語です。
<code class="language-java">public record Person( String name, int age ) { }</code>
!! 演算子を使用して、値が null ではないことをコンパイラーに伝えることができます。値が null の場合は、NullPointerException がスローされます。
<code class="language-kotlin">data class Person(val name: String, var age: Int)</code>
ヒント: この !! 演算子の使用は、null 安全性の目的に反しているため、非推奨です。
関数を定義するときに、パラメーターを null にできるかどうかを指定できます。この場合、呼び出し側が処理する必要があります。
<code class="language-java">Person p2 = new Person(p1.getName(), p1.getAge());</code>
? として安全な変換演算子があり、変換が不可能な場合は null を返します。
<code class="language-kotlin">val p2 = p1.copy(age = 42)</code>
ラムダ式や高階関数で null 安全機能を使用することもできます。
<code class="language-java">String name = p1.getName(); int age = p1.getAge();</code>
let 関数は、null 以外のオブジェクトでコードのブロックを実行できるようにするスコープ関数です。これは、安全な方法で null 許容オブジェクトのコードを実行するためによく使用されます。
例とデフォルト値:
<code class="language-kotlin">val (name, age) = p1 println(name) // "John" println(age) // 42</code>
Kotlin は関数型プログラミング スタイルを強く推奨しています。関数型プログラミング スタイルの場合、不変性は、特にマルチスレッド アプリケーションでエラーを回避する上で重要な役割を果たします。
おそらく Kotlin または Java での関数型プログラミングについては別の記事を書くことになると思いますが、今は不変性に焦点を当てましょう。
Kotlin は基本的に、可変オブジェクトよりも不変オブジェクトを好みます。これにより、特に同時実行環境において、コードがよりシンプルで予測可能になります。
Kotlin では、val キーワードを使用して宣言された変数はデフォルトで不変です。これは Java での最終変数の宣言に非常に似ていますが、いくつかの重要な違いがあります。
例:
<code class="language-kotlin">val name: String = "John" // 不可空 name = null // 编译错误!</code>
変数変数の例:kotlinでvarキーワードを使用して、変数を再起動できるようにします。
<code class="language-java">public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getters, setters, ... }</code>
ヒント: Kotlinは、非債務を確保するために、VARの代わりにできるだけ多くを奨励しています。2。不変のコレクション
<code class="language-java">public record Person( String name, int age ) { }</code>
<code class="language-kotlin">data class Person(val name: String, var age: Int)</code>
3。変数データカテゴリの不可能
<code class="language-java">Person p2 = new Person(p1.getName(), p1.getAge());</code>
<code class="language-kotlin">val p2 = p1.copy(age = 42)</code>
以上がJava 開発者のための Kotlin (パート 1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。