JavaRush /Blog Java /Random-MS /Adakah terdapat perbezaan antara Kotlin dan Java?
Paul Soia
Tahap
Kiyv

Adakah terdapat perbezaan antara Kotlin dan Java?

Diterbitkan dalam kumpulan
Hai semua. Saya ingin memberitahu anda beberapa perkara asas tentang bahasa Kotlin, yang akan berguna untuk pemula. Kebetulan sekarang sukar untuk masuk ke dalam pembangunan Android dengan hanya satu bahasa - kebanyakan projek baharu mula ditulis dalam Kotlin, kebanyakan projek siap sedia ditulis dalam Java. Adakah terdapat perbezaan antara Kotlin dan Java?  - 1Pada masa ini saya mempunyai 4 projek di tempat kerja: dua di Kotlin dan dua di Java (satu utama besar dan tiga projek kecil untuk kegunaan dalaman). Apabila syarikat memutuskan untuk menulis projek baharu di Kotlin, keputusan ini kelihatan pelik bagi saya. Mengapa mencampurkan bahasa yang berbeza? Biarkan orang lain menulis dalam Kotlin, mengapa kita memerlukannya? Tetapi tidak ada jalan keluar, jadi saya memutuskan untuk mencuba bahasa baharu dan mula mempelajarinya. Kod pertama, sudah tentu, ditulis sepenuhnya dalam gaya Java, yang menambahkan lagi salah faham: mengapa saya memerlukan bahasa baharu? Tetapi apabila saya menggunakannya, saya mendapati lebih banyak kelebihan dan kini (saya telah menulis dalam Kotlin selama hampir 2 tahun) saya boleh mengatakan bahawa Kotlin lebih mudah dalam pembangunan Android. Saya ingin menunjukkan beberapa nuansa yang tidak akan jelas kepada seseorang yang memutuskan untuk mula belajar Kotlin selepas Java. Biar saya juga mengingatkan anda bahawa Android menggunakan Java 8, dengan versi semasa ialah 14. Jadi, pertama - Pembolehubah : Java:
Int a = 1;
String s = "test";
Kotlin:
val a = 1
var b = 2
val c: Int
val d = "test"
Terdapat dua jenis pembolehubah dalam Kotlin: val (baca-sahaja) dan var (baca-tulis). Adalah disyorkan untuk menggunakan val apabila boleh. Ia tidak perlu untuk mengisytiharkan jenis pembolehubah jika pembolehubah telah dimulakan. Kedua - if/else, tukar pernyataan : Berapa kerap anda menggunakan rangkaian pernyataan ini dalam Java:
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
Atau seperti ini:
switch(выражениеДляВыбора) {
        case (meaning 1):
                Код1;
                break;
        case (meaning 2):
                Код2;
                break;
...
        case (meaning N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
Dalam Kotlin, operator bila digunakan untuk ungkapan tersebut (walaupun jika/lain juga boleh digunakan):
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
Di sini kami bukan sahaja melalui rantaian syarat, tetapi juga dengan serta-merta memberikan keseluruhan ungkapan kepada pembolehubah hasil, yang menyelamatkan kami beberapa baris kod. Tetapi masih, jika anda hanya mempunyai dua pilihan dalam cawangan, saya cadangkan menggunakan yang biasa jika..lain. Masa pembinaan akan menjadi lebih pendek dalam tiga varian sahaja. Mari teruskan - Pembina . Ia adalah kisah dongeng di sini. Hanya bandingkan kod dalam Java dan Kotlin. Jawa:
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;
    }
}
Kotlin:
class Person(private val firstName: String,
             private val lastName: String,
             private var age: Int) {
}
Nampaknya ada sesuatu yang belum selesai dalam kod Kotlin. Tetapi tidak, ini adalah dua kod yang sama dalam bahasa yang berbeza. Mari kita fikirkan sedikit. Dalam Kotlin, pembina boleh ditulis terus dalam badan nama kelas (tetapi jika anda mahu, anda boleh melakukannya dengan cara lama, seperti dalam Java). Jadi, kami telah menulis tiga pembolehubah, di Jawa kami telah mencipta pembina, pengambil dan satu penetap untuk pembolehubah umur. Dalam Kotlin, seperti yang kita ingat, pembolehubah val adalah baca sahaja, dan oleh itu penetap untuk pembolehubah ini tidak tersedia (Kotlin melaksanakan penetap getter di bawah hud itu sendiri). Pembolehubah var membolehkan anda menggunakan penetap. Akibatnya, kami menulis hampir dalam satu baris perkara yang sama yang mengambil lebih daripada sedozen baris di Jawa. Di sini saya mengesyorkan membaca lebih lanjut tentang kelas data dalam Kotlin. Tetapi bukan itu sahaja yang pembina Kotlin mahir. Tetapi bagaimana jika anda memerlukan dua pembina? Bagaimana jika ada tiga? Di Jawa ia akan kelihatan seperti ini:
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;
    }
Tiada apa-apa yang rumit, sama seperti banyak pereka yang diperlukan, itulah yang mereka lakukan. Di Kotlin anda boleh bertahan dengan hanya satu pembina. Bagaimana? Ia mudah - nilai lalai.
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
Kami memberikan nilai lalai dalam pembina dan sekarang memanggilnya akan kelihatan seperti ini:
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
Persoalannya mungkin timbul: apakah ini:
private val lastName: String? = null
Apakah tanda tanya lain ini? Ya, jika nilai boleh menjadi null, maka ia ditetapkan ?. Terdapat juga pilihan seperti ini - !!(jika pembolehubah tidak boleh menerima null). Baca sendiri, semuanya mudah. Dan kita teruskan ke titik seterusnya. Sambungan . Ini adalah alat yang sangat hebat dalam Kotlin yang tidak tersedia di Java. Kadangkala dalam projek kami menggunakan kaedah templat yang diulang dalam banyak kelas. Sebagai contoh, seperti ini:
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
Dalam Kotlin kita boleh melanjutkan kelas:
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
Dan kemudian gunakannya seperti ini sepanjang projek:
context?.toast("hello world")
Kami membuat sambungan untuk kelas Konteks. Dan kini di mana sahaja konteksnya tersedia, kaedah roti bakar baharunya akan tersedia. Ini boleh dilakukan untuk mana-mana kelas: String, Fragment, kelas tersuai anda, tiada sekatan. Dan perkara terakhir yang akan kita lihat ialah Bekerja dengan Strings . Semuanya mudah di sini. Di Jawa ia ditulis seperti ini:
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
Lebih mudah di Kotlin:
val s = "friends"
val a = 5
println("I have $a $s!")
Ini adalah nuansa yang saya temui pada awal pembelajaran Kotlin, saya harap ini akan membantu anda.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION