JavaRush /Blog Java /Random-MS /KotlinRush: adakah masuk akal untuk terus menulis di Jawa...
NikEy
Tahap
Новосибирск

KotlinRush: adakah masuk akal untuk terus menulis di Jawa?

Diterbitkan dalam kumpulan
Halo, pelajar JavaRush, sebelum anda diserap sepenuhnya oleh Java, saya ingin meluaskan pandangan anda dan menarik perhatian kepada bahasa Kotlin yang semakin popular !
KotlinRush: adakah masuk akal untuk terus menulis di Jawa?  - 1
Kotlin ialah bahasa yang agak muda yang dibangunkan oleh JetBrains . Ya, ya, syarikat yang sama yang membangunkan IDE kegemaran kami: IntelliJ IDEA. Kotlin ialah bahasa JVM dan serasi sepenuhnya dengan Java , iaitu, daripada kod Kotlin anda boleh mengakses perpustakaan Java biasa dengan mudah. ​​Bagaimana pula dengan perpustakaan: Kelas Kotlin dan Java boleh wujud bersama dalam satu pakej! Kotlin sangat popular dengan komuniti pengaturcaraan sehingga Google mengiktirafnya sebagai bahasa pembangunan rasmi untuk Android, dan baru-baru ini Kotlin telah mula mendapat populariti dalam projek perusahaan. Dalam artikel ini, saya ingin memberikan beberapa contoh perbandingan kod yang ditulis dalam Kotlin dan Java, dan membuat beberapa kesimpulan. Pergi! Mari mulakan, seperti biasa, dengan "Hello World"
// Java
public class Application {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
// Kotlin
class Application
fun main(vararg args: String) {
    println("Hello World!")
}
Melihat contoh Kotlin, kita boleh segera perhatikan perkara berikut:
  • tidak perlu menulis koma bertitik di hujung baris;
  • semua kaedah diterangkan oleh kata kunci yang menyeronokkan ;
  • Untuk mencetak baris, hanya satu perkataan sudah memadai - println() !
Mencipta Instance
// Java (до 10)
final Application application = new Application();
// Kotlin
val application = Application()
Perbezaan Kotlin:
  • tidak perlu mengisytiharkan jenis pembolehubah jika ia jelas daripada contoh;
  • bukannya jenis pembolehubah - val (tidak berubah) atau var (boleh berubah);
  • Anda tidak perlu menulis kata kunci baharu untuk membuat contoh !
Penerangan kaedah
// Java
public int sum(int a, int b) {
    return (a + b);
}
// Kotlin
fun sum(a: Int, b: Int): Int {
return (a + b)
}
Perbezaan Kotlin:
  • jika sesuatu perlu dikembalikan daripada kaedah, “ : Int ” ditambah pada tandatangan, dengan Int ialah jenis pulangan;
  • perihalan parameter kaedah: pertama nama pembolehubah, kemudian jenis;
  • memandangkan badan kaedah hanya terdiri daripada satu baris, anda boleh meninggalkan pulangan :
    fun sum(a: Int, b: Int): Int = (a+b)
Output rentetan yang diformatkan
// Java
public int sum(int a, int b) {
    int result = (a + b);
    System.out.printf("Сумма %d и %d равна %d\n", a, b, result);
    return result;
}
// Kotlin
fun sum(a: Int, b: Int): Int {
    val result = (a + b)
    println("Сумма $a и $b равна $result")
    return result
}
Kotlin menyokong interpolasi rentetan, hanya gunakan simbol "$" pada permulaan pembolehubah. Notasi ini meningkatkan kebersihan dan kebolehbacaan kod dengan ketara. Perbandingan contoh
// Java
object1.equals(object2)
// Kotlin
object1 == object2
Dalam Kotlin, perbandingan " ==" untuk jenis objek diterjemahkan kepada equals! Dan untuk membandingkan pautan, " ===" digunakan. Pengecualian
// Java
public List<String> getFileContent(String file) throws IOException {
    Path path = Paths.get(file);
    return Files.readAllLines(path);
}
// Kotlin
fun getFileContent(file: String): List<String> {
    val path = Paths.get(file)
    return Files.readAllLines(path)
}
Tiada pengecualian yang disemak dalam Kotlin ; kini anda tidak perlu membuang pengecualian tanpa henti melalui keseluruhan aplikasi atau membuat pengecualian berbilang peringkat try-catch. Keselamatan nol
// Java
public class Data {
    String value;

    String render() {
        if (value == null) {
            return "Value: undefined";
        } else {
            return "Value:" + value.toUpperCase();
        }
    }
}
// Kotlin
class Data {
    var value: String? = null
    fun render(): String =
            "Value: ${value?.toUpperCase() ?: "undefined"}"
}
Kotlin mengurus masalah NPE dan memperkenalkan beberapa keperluan:
  • semua medan kelas dan pembolehubah mesti dimulakan;
  • Anda boleh menulis "null" dalam medan atau pembolehubah, tetapi kemudian anda mesti menyatakan dengan jelas bahawa pembolehubah anda adalah Nullable (tulis tanda "?");
  • Pengendali Elvis "?:" berfungsi seperti ini: jika ada Null di sebelah kiri, ambil apa yang ada di sebelah kanan. Dalam kes contoh kami, apabila pembolehubah nilai tidak dimulakan, nilai " tidak ditentukan " akan diambil.
Medan kelas dan akses kepada mereka
// Java
public class Data {
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
class App {
    void execute() {
           Data data = new Data()
           data.setValue("Foo")
     }
}
// Kotlin
class Data {
    var value: String = ""
}
class App {
    fun execute() {
          val data = Data()
          data.value = "Foo" // Под капотом выполнится data.set("Foo")
     }
}
Dalam Kotlin, cukup sekadar menerangkan medan dan itu sahaja: ia sudah mempunyai pengambil dan penyetel tersirat (hello lombok ), yang boleh ditindih pada bila-bila masa jika dikehendaki. Pada masa yang sama, kami membaca dan mengubah suai nilai medan hanya dengan mengaksesnya secara terus, dan di bawah hud ia dipanggil get()|set(). Kitaran
// Java
void example() {
    for(int i = 1; i <= 10; i++) {
        System.out.println(i);
    }

    for(String line : "a,b,c".split(",")) {
        System.out.println(line);
    }
}
// Kotlin
fun example() {
    for(i in 1..10) {
        println(i)
    }

    for(line in "a,b,c".split(",")) {
        println(line)
    }
}
Kotlin telah menyediakan sintaks yang mudah dan seragam untuk merentasi jujukan: anda hanya menggunakan pembolehubah di sebelah kiri , jujukan di sebelah kanan dan kata kunci " di " di antaranya, jenis ditentukan secara automatik oleh kandungan. Singleton
// Java
public class Singleton {
    private static Singleton ourInstance = new Singleton();

    public static Singleton getInstance() {
        return ourInstance;
    }

    private Singleton() {
    }
}
class App {
    void execute() {
         Singleton singleton = Singleton.getInstance()
    }
}
// Kotlin
object Singleton {}

class App {
    fun execute() {
          val singleton = Singleton
    }
}
Corak " tunggal " yang biasa digunakan dalam amalan, jadi Kotlin memutuskan untuk mencipta kata kunci " objek " yang berasingan, yang ditulis bukannya " kelas " dan bermaksud bahawa kelas itu adalah tunggal; apabila digunakan, anda tidak perlu memanggil pembina atau mana-mana kaedah lain! Parameter kaedah dinamakan dan nilai lalai
// Java
void setStatus(String code) {
    setStatus(code, "");
}

void setStatus(String code, String desc) {
    this.code = code;
    this.desc = desc;
}
// Kotlin
fun setStatus(code: String, desc: String = "") {
    this.code = code;
    this.desc = desc;
}

fun execute() {
    setStatus("200")
    setStatus(code = "200", desc = "Ok")
}
Ia berlaku bahawa tidak semua parameter dalam kaedah atau pembina mesti diperlukan, dan dalam Java kita digunakan untuk mencipta satu set kaedah atau pembina untuk setiap gabungan parameter yang mungkin. Parameter lalai telah diperkenalkan ke dalam Kotlin, yang membolehkan anda mengisytiharkan 1 kaedah dan menghantar set parameter yang diperlukan kepadanya bergantung pada situasi. Aliran
// Java
String getFirst(List<String> strings, String alpha) {
    return strings.stream()
            .filter(x -> x.startsWith(alpha))
            .findFirst()
            .orElse("");
}
// Kotlin
fun getFirst(strings: List<String>, alpha: String): String {
    return strings.first { it.startsWith(alpha) }
}
Pengenalan aliran dalam Java 8 telah menjadi fungsi penting apabila bekerja dengan koleksi. Di Kotlin, strim telah dibuat lebih mudah dan berfungsi: setiap koleksi sudah mempunyai satu set kaedah yang mudah dan kerap digunakan untuk bekerja dengan data. Juga, perhatikan ungkapan lambda dalam kaedah pertama: jika fungsi literal mempunyai satu parameter, pengisytiharannya boleh dialih keluar (bersama-sama dengan ->), dan dirujuk sebagai  ia . Sudah tiba masanya untuk menyelesaikan... Saya hanya menunjukkan sebahagian kecil fungsi asas, tetapi saya pasti anda sudah mahu mencuba Kotlin! Dari pengalaman saya, saya boleh membuat kesimpulan berikut:
  • Sangat mudah bagi pembangun Java untuk menguasai sintaks Kotlin dan mula menulis kod;
  • Kotlin serasi sepenuhnya dengan Java, dan anda sudah boleh mencubanya dalam projek sedia ada anda, contohnya, dalam ujian;
  • Kod Kotlin adalah lebih bersih dan lebih mudah dibaca, anda tidak perlu menulis sekumpulan boilerplate ;
  • IDEA mempunyai penukar Java ke Kotlin automatik, anda boleh mengambil kod Java siap pakai dan menukarnya secara automatik kepada Kotlin;
  • projek baharu perlu ditulis dalam Kotlin, kerana dari sudut infrastruktur ia adalah sama seperti Java, tetapi dari segi penggunaan ia lebih baik dan lebih mudah!
Jika anda menyukai artikel tersebut dan secara amnya berkaitan dengan sumber tentang Java, saya boleh terus menulis tentang pengalaman menggunakan Kotlin dalam projek perusahaan sebenar. Pautan berguna:
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION