![Kotlin vs Java | Android開発用のJavaまたはKotlin | Kotlinチュートリアル|エドゥレカ](https://i.ytimg.com/vi/eVLPnewCMRI/hqdefault.jpg)
コンテンツ
- Kotlin対Java、後者はより簡潔なコードを提供します-findViewByIdなし
- Kotlinはデフォルトでnullセーフです
- 拡張機能
- コルーチンは一流の市民です
- チェック済みの例外はありません
- 委任のネイティブサポート
- データクラス
- スマートキャスト
- コンストラクターのサポート
- 暗黙的な拡大変換はサポートされていません
- Kotlinを使用した注釈処理ライブラリ
- Javaとの互換性
- まとめ
Javaは、Androidについて考えるときに思い浮かぶ最初のプログラミング言語である可能性がありますが、 持ってる Android開発にJavaを使用します。実際、Kotlinは現在Googleの好むAndroidの公用語!
Javaの詳細については、Make Android AppsのJava入門コースを無料で入手してください。
今日、Android StudioにはKotlinサポートが組み込まれているため、Kotlinコードを理解するAndroidプロジェクトの作成は、Android Studioのプロジェクト作成ウィザードでチェックボックスを選択するのと同じくらい簡単です。このオプションのサポートは時間を超えすぎており、この決定が主に優先されるようになりました。
しかし、JavaからKotlinに切り替えた場合、正確に何が得られますか? Kotlinにはどのような機能があり、Javaにはありません。
この記事では、KotlinとJavaの主な違いをすべて見ていきます。
Kotlin対Java、後者はより簡潔なコードを提供します-findViewByIdなし
同じ作業を実行しているKotlinクラスとJavaクラスを比較すると、一般的にKotlinクラスははるかに簡潔になりますが、特に、Kotlinが記述する必要のある定型コードの量を大幅に削減できる領域が1つあります。 findViewByIds.
Kotlin Android Extensionsを使用すると、ビューへの参照をアクティビティファイルにインポートできます。この時点で、そのビューをアクティビティの一部であるかのように操作できます。結果?別のfindViewByIdメソッドを再度記述する必要はありません!
これらの拡張機能を使用する前に、モジュールレベルのbuild.gradleファイルに追加のプラグインを追加する必要があります(適用プラグイン: 'kotlin-android-extensions')が、その後、ビューのインポートを開始する準備ができていますたとえば、activity_main.xmlファイルにID textViewのTextViewが含まれている場合は、アクティビティに次を追加します。
import kotlinx.android.synthetic.main.activity_main.textView
次に、IDのみを使用してこのTextViewにアクセスできます。
textView.setText( "Hello World")
これは ずっと Javaの同等物よりも簡潔:
TextView text =(TextView)findViewById(R.id.textView); text.setText( "Hello World");
Kotlinはデフォルトでnullセーフです
NullPointerExceptionsは、Java開発者にとって大きな不満の源です。 Javaでは、任意の変数にnullを割り当てることができますが、null値を持つオブジェクト参照を使用しようとすると、NullPointerExceptionが発生することになります。
また読む: Kotiln for Androidの紹介
Kotlinでは、すべてのタイプはデフォルトでnull不可(null値を保持できない)です。 Kotlinコードでnullを割り当てたり返したりしようとすると、コンパイル時に失敗するため、次の行はいずれもコンパイルされません。
val name:String = null
fun getName():String = null
もし、あんたが 本当に Kotlinの変数にnull値を割り当てたい場合は、型の後に疑問符を追加して、その変数を明示的にnull可能としてマークする必要があります。
値:Int? = null
これにより、KotlinでNullPointerExceptionsに遭遇することはほとんど不可能になります。実際、この例外に遭遇した場合、Kotlinに明示的に例外をスローするように要求したか、NullPointerExceptionが外部Javaコードから発生している可能性があります。
拡張機能
開発者は、Kotlinを使用してクラスを新しい機能で拡張することができます。これは、重要なメソッドが欠けていると常に感じていたクラスがある場合に理想的です。
これらの「拡張機能」はJavaでは使用できませんが、C#などのAndroid開発に使用できる他のプログラミング言語で使用できます。
次を読む: 初心者向けのJavaチュートリアル
拡張関数を作成するには、拡張するクラスの名前(「String」など)を作成する関数の名前(「styleString」)の前に追加します。次に例を示します。
fun String.styleString():String {//文字列をスタイルし、それを返す//}
その後、を介して、拡張クラスのインスタンスでこの関数を呼び出すことができます。それがそのクラスの一部であるかのように表記:
コルーチンは一流の市民です
ネットワークI / OやCPU集中型の作業など、長時間実行される操作を開始すると、呼び出しスレッドは操作が完了するまでブロックされます。 Androidはデフォルトでシングルスレッドであるため、メインスレッドをブロックするとすぐにアプリのUIがフリーズし、操作が完了するまで応答しなくなります。
Javaのソリューションは、従来、この集中的または長時間実行される作業を実行できるバックグラウンドスレッドを作成することでしたが、複数のスレッドを管理すると、エラーが発生しやすい複雑なコードにつながる可能性があり、新しいスレッドの作成は高価な操作です
Kotlinで追加のスレッドを作成できますが、コルーチンを使用することもできます。コルーチンは、スレッドをブロックせずに特定のポイントで実行を一時停止し、後で別のスレッドでこの機能を再開することにより、長時間実行される集中的なタスクを実行します。これにより、非ブロッキング非同期コードを作成できます。 見える 同期的であるため、より明確で、簡潔で、人間が読むことができます。コルーチンもスタックレスであるため、スレッドと比較してメモリ使用量が少なく、async / awaitなどの非同期ノンブロッキングプログラミングの追加スタイルへの扉を開きます。
チェック済みの例外はありません
Kotlinにはチェックされた例外がないため、例外をキャッチしたり宣言したりする必要はありません。
これがKotlinに惹きつけられるものなのか、Javaに固執したいのかは、開発者コミュニティを分割する機能であるため、チェック例外の意見に依存します。 Javaコードを乱雑にしようとするtry / catchブロックにうんざりしている場合は、この省略に満足しますが、チェックされた例外がエラー回復について考え、最終的にはより堅牢なものを作成するように促した場合コードでは、JavaがKotlinに勝る領域としてこれを見る可能性が高くなります。
委任のネイティブサポート
Kotlinは、Javaとは異なり、ファーストクラスの委任(暗黙的な委任とも呼ばれる)を介して、「継承を介した構成」デザインパターンをサポートします。委任では、受信側のオブジェクトが操作を2番目の委任オブジェクトに委任します。これは、元のコンテキストを持つヘルパーオブジェクトです。
Kotlinのクラス委任は、多重継承の使用を可能にする継承の代替です。一方、Kotlinの委任プロパティはコードの重複を防ぎます。たとえば、複数のプロパティのゲッターとセッターに同じコードを再利用する必要がある場合、このコードを委任プロパティに抽出できます。プロパティデリゲートは、getValue演算子関数と、オプションでsetValue演算子を定義する必要があります。
class Delegate {operator fun getValue(...)... ... ...} operator fun setValue(...)... ... ...}}
次に、プロパティを作成するときに、この特定のプロパティのgetterおよびsetter関数が別のクラスによって処理されることを宣言できます。
class MyClass {var property:String by Delegate()}
データクラス
プロジェクトがデータを保持するだけの複数のクラスを持つことは珍しいことではありません。 Javaの場合、クラス自体の機能はほとんどありませんが、これらのクラスの定型コードを大量に記述していることに気付くでしょう。通常、コンストラクター、データを保存するフィールド、各フィールドのゲッター関数とセッター関数、およびhashCode()、equals()、toString()関数を定義する必要があります。
Kotlinでは、クラス定義に「データ」キーワードを含めると、コンパイラは必要なすべてのゲッターとセッターの生成など、この作業をすべて実行します。
データクラスDate(var month:String、var day:Int)
スマートキャスト
Javaでは、多くの場合、オブジェクトをキャストできることが既に明らかな状況では、タイプをチェックしてからオブジェクトをキャストする必要があります。
Kotlinのスマートキャストはこれらの冗長なキャストを処理できるため、Kotlinの「is」演算子で既にチェックしている場合はステートメント内にキャストする必要はありません。たとえば、コンパイラは次のキャストが安全であることを知っています。
if(helloは文字列){printString(hello)}
コンストラクターのサポート
Javaとは異なり、Kotlinクラスにはプライマリコンストラクターと1つ以上のセカンダリコンストラクターを含めることができます。これらをクラス宣言に含めることで作成します。
クラスMainActivity constructor(firstName:String){}
暗黙的な拡大変換はサポートされていません
Kotlinは、数値の暗黙的な拡大変換をサポートしていないため、小さなタイプが暗黙的に大きなタイプに変換されることはありません。 Kotlinでは、Byte型の値をInt変数に割り当てる場合、明示的な変換を実行する必要がありますが、Javaは暗黙的な変換をサポートしています。
Kotlinを使用した注釈処理ライブラリ
Kotlinは、アノテーション処理に依存する高度なフレームワークを含む、既存のすべてのJavaフレームワークとライブラリをサポートしていますが、一部のJavaライブラリは、RxKotlinなどのKotlin拡張機能を既に提供しています。
アノテーション処理に依存するJavaライブラリを使用する場合、Kotlinプロジェクトへの追加は少し異なります。これは、次を使用して依存関係を指定する必要があるためです。 kotlin-kapt そして、annotationProcessorの代わりにKotlin Annotation処理ツール(kapt)を使用します。例えば:
//プラグインを適用//プラグインを適用:kotlin-kapt // kapt設定を使用してそれぞれの依存関係を追加//依存関係{kapt "com.google.dagger:dagger-compiler:$ dagger-version" ... ... ...}
Javaとの互換性
Android開発にKotlinとJavaのどちらを使用するかを議論するとき、3番目のオプションがあることに注意する必要があります。 両方を使う。 2つの言語のすべての違いにもかかわらず、JavaとKotlinは100%相互運用可能です。 JavaからKotlinコードを呼び出すことができます。また、KotlinからJavaコードを呼び出すことができます。そのため、同じプロジェクト内でKotlinクラスとJavaクラスを並べて配置することができ、すべてがコンパイルされます。
2つの言語間を移動するこの柔軟性は、Kotlinを既存のプロジェクトに段階的に導入できるため、Kotlinを使い始めるときに役立ちますが、永続的に両方の言語を使用することもできます。たとえば、Kotlinで記述したい特定の機能や、Javaで記述しやすい特定の機能があります。 KotlinとJavaはどちらもバイトコードにコンパイルされるため、エンドユーザーはJavaコードの終了位置とKotlinコードの開始位置を知ることができません。したがって、Javaで構成されるアプリをリリースできない理由はありません。 そして Kotlinコード。
自分でKotlinを試してみたい場合は、Android Studio 3.0 Preview以降がインストールされている限り、いくつかの方法で開始できます。
- 新しいAndroid Studioプロジェクトを作成します。 最も簡単な方法は、新しいプロジェクトを作成し、プロジェクト作成ウィザードから「Kotlinサポートを含める」チェックボックスを選択することです。
- Kotlinクラスを既存のディレクトリに追加します。 問題のディレクトリをControlキーを押しながらクリックし、[ファイル]> [新規]> [Kotlinファイル/クラス]を選択します。AndroidStudioは、Kotlinをサポートするようにプロジェクトを構成するように求めるバナーを表示します。 [設定]リンクをクリックして、画面の指示に従います。
- 既存のJavaファイルをKotlinに変換します。 Controlキーを押しながらファイルをクリックし、[コード]> [JavaファイルをKotlinファイルに変換]を選択すると、Kotlinコンバーターを介して任意のJavaファイルを実行できます。
まとめ
ご覧のとおり、JavaよりもKotlinを好む理由はたくさんありますが、Javaが優位を占める分野がいくつかあります。おそらく最も注目すべきは、多くのAndroid開発者がこの時点でJavaに精通していることです。おそらく、Kotlin対Javaの議論はすぐには解決せず、どちらにもメリットがあります。それで、あなたはKotlinに切り替えるつもりですか、それともJavaはAndroid開発の最良の選択肢であると感じますか?
次を読む: Android開発用のJava構文の紹介