JavaRush /Java Blog /Random-JA /Kotlin と Java の間に違いはありますか?
Paul Soia
レベル 26
Kiyv

Kotlin と Java の間に違いはありますか?

Random-JA グループに公開済み
こんにちは、みんな。初心者にとって役立つ、Kotlin 言語についての基本的なことをいくつか説明したいと思います。たまたまですが、今では 1 つの言語だけで Android 開発に参入するのは難しくなります。ほとんどの新しいプロジェクトは Kotlin で書かれ始め、ほとんどの既成プロジェクトは Java で書かれています。 Kotlin と Java の間に違いはありますか?  - 1現在、私は 4 つのプロジェクトを進めています。そのうち 2 つは Kotlin で、2 つは Java です (1 つは大きなメインプロジェクト、3 つは内部使用のための小さなプロジェクトです)。会社が新しいプロジェクトを Kotlin で書くことに決めたとき、私にはこの決定が奇妙に思えました。なぜ異なる言語を混ぜるのですか? 他の人に Kotlin で書いてもらいましょう。なぜそれが必要なのでしょうか? しかし、どうしようもなかったので、新しい言語を試してみようと思い、勉強を始めました。もちろん、最初のコードは完全に Java スタイルで書かれていたため、「なぜ新しい言語が必要なのか?」という誤解がさらに深まりました。しかし、使っていくうちにどんどん利点が見えてきて、今では (私は約 2 年間 Kotlin で書いていますが) Android 開発では Kotlin の方が便利だと言えます。Java の後に Kotlin を学習し始めようと決めた人には明らかではないニュアンスをいくつか示したいと思います。Android は Java 8 を使用しており、現在のバージョンは 14 であることも思い出してください。つまり、最初に -変数: Java:
Int a = 1;
String s = "test";
コトリン:
val a = 1
var b = 2
val c: Int
val d = "test"
Kotlin には、val (読み取り専用) と var (読み取り/書き込み) の 2 種類の変数があります。可能な限り val を使用することをお勧めします。変数がすでに初期化されている場合、変数の型を宣言する必要はありません。2 番目 - if/else、switch ステートメント: Java でこの一連のステートメントをどのくらいの頻度で使用しますか?
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
または次のようにします。
switch(выражениеДляВыбора) {
        case (meaning 1):
                Код1;
                break;
        case (meaning 2):
                Код2;
                break;
...
        case (meaning N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
Kotlin では、このような式には when 演算子が使用されます (ただし、if/else も使用できます)。
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
ここでは、一連の条件を実行しただけでなく、式全体を結果変数に即座に代入したため、かなりの数のコード行が節約されました。ただし、ブランチにオプションが 2 つしかない場合は、通常の if..else を使用することをお勧めします。たった3つの選択肢から構築するだけで時短になります。次に進みましょう -コンストラクター。ここはおとぎ話です。Java と Kotlin のコードを比較してください。ジャバ:
public class Person {

    private String firstName;
    private String lastName;
    private int age;

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
コトリン:
class Person(private val firstName: String,
             private val lastName: String,
             private var age: Int) {
}
Kotlin コードに何かがやり残されているように見えるかもしれません。しかし、いいえ、これらは異なる言語で書かれた 2 つの同一のコードです。少し考えてみましょう。Kotlin では、コンストラクターをクラス名の本体に直接記述することができます (ただし、必要に応じて、Java のような昔ながらの方法で記述することもできます)。したがって、3 つの変数を作成し、Java で age 変数のコンストラクター、ゲッター、および 1 つのセッターを作成しました。Kotlin では、ご存知のとおり、val 変数は読み取り専用であるため、これらの変数のセッターは利用できません (Kotlin は内部でゲッターセッターを実装しています)。var 変数を使用すると、セッターを使用できます。結果として、Java で十数行かかっていたものをほぼ 1 行で書きました。ここでは、Kotlin のデータ クラスについて詳しく読むことをお勧めします。しかし、Kotlin コンストラクターが得意なのはそれだけではありません。しかし、2 つのコンストラクターが必要な場合はどうなるでしょうか? 3つある場合はどうなりますか?Java では次のようになります。
public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

public Person(String firstName) {
        this.firstName = firstName;
    }
何も複雑なことはなく、必要な数のデザイナーだけが作業を行ってくれました。Kotlin では、コンストラクターを 1 つだけ使用できます。どうやって?それは簡単です - デフォルト値です。
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
コンストラクターでデフォルト値を割り当てたので、それらを呼び出すと次のようになります。
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
「これは何ですか?」という疑問が生じるかもしれません。
private val lastName: String? = null
他の疑問符は何ですか? はい、値が null になれる場合は set になります?。このようなオプションもあります!!(変数が null を受け入れられない場合)。それについては自分で読んでみてください。すべて簡単です。そして次のポイントに進みます。 拡張機能。これは、Java では利用できない Kotlin の非常に優れたツールです。プロジェクトでは、多くのクラスで繰り返されるテンプレート メソッドを使用することがあります。たとえば、次のようになります。
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
Kotlin ではクラスを拡張できます。
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
そして、プロジェクト全体で次のように使用します。
context?.toast("hello world")
Context クラスの拡張機能を作成しました。そして、コンテキストが利用可能な場所であればどこでも、その新しいトースト メソッドを利用できるようになります。これは、文字列、フラグメント、カスタム クラスなど、どのクラスに対しても行うことができ、制限はありません。そして最後のポイントは、文字列の操作です。ここではすべてがシンプルです。Javaでは次のように書きます。
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
Kotlin ではもっと簡単です。
val s = "friends"
val a = 5
println("I have $a $s!")
これらは、Kotlin を学習し始めたときに私がつまずいたニュアンスです。これがお役に立てば幸いです。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION