JavaRush /Java blogi /Random-UZ /KotlinRush: Java-da yozishni davom ettirish mantiqiymi?
NikEy
Daraja
Новосибирск

KotlinRush: Java-da yozishni davom ettirish mantiqiymi?

Guruhda nashr etilgan
Salom, JavaRush talabasi, Java-ni to'liq o'zlashtirishingizdan oldin men sizning dunyoqarashingizni kengaytirmoqchiman va tobora ommalashib borayotgan Kotlin tiliga e'tibor qaratmoqchiman !
KotlinRush: Java-da yozishni davom ettirish mantiqiymi?  - 1
Kotlin - JetBrains tomonidan ishlab chiqilgan juda yosh til . Ha, ha, bizning sevimli IDE-ni ishlab chiqqan kompaniya: IntelliJ IDEA. Kotlin JVM tilidir va Java bilan to'liq mos keladi , ya'ni Kotlin kodidan siz tanish Java kutubxonalariga osongina kirishingiz mumkin Kutubxonalar haqida nima deyish mumkin: Kotlin va Java sinflari bir paketda birga yashashi mumkin! Kotlin dasturlash hamjamiyatida shu qadar mashhur ediki, Google uni Android uchun rasmiy dastur tili sifatida tan oldi va yaqinda Kotlin korporativ loyihalarda mashhur bo'la boshladi. Ushbu maqolada men Kotlin va Java tillarida yozilgan kodlarning bir nechta qiyosiy misollarini keltirmoqchiman va ba'zi xulosalar chiqarmoqchiman. Bor! Keling, odatdagidek, "Salom dunyo" bilan boshlaylik
// 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!")
}
Kotlin misoliga qarab, biz darhol quyidagilarni qayd etishimiz mumkin:
  • satr oxiriga nuqtali vergul yozish shart emas;
  • barcha usullar qiziqarli kalit so'z bilan tavsiflanadi ;
  • Chiziqni chop etish uchun faqat bitta so'z kifoya - println() !
Namuna yaratish
// Java (до 10)
final Application application = new Application();
// Kotlin
val application = Application()
Kotlin farqlari:
  • misoldan aniq bo'lsa, o'zgaruvchining turini e'lon qilishning hojati yo'q;
  • o'zgaruvchi turi o'rniga - val (o'zgarmas) yoki var (o'zgaruvchan);
  • Misol yaratish uchun yangi kalit so'zni yozishingiz shart emas !
Usullarning tavsifi
// Java
public int sum(int a, int b) {
    return (a + b);
}
// Kotlin
fun sum(a: Int, b: Int): Int {
return (a + b)
}
Kotlin farqlari:
  • agar biror narsa usuldan qaytarilishi kerak bo'lsa, imzoga “ : Int ” qo'shiladi, bu erda Int - qaytarish turi;
  • usul parametrlarining tavsifi: avval o'zgaruvchining nomi, keyin turi;
  • usul tanasi faqat bitta satrdan iborat bo'lganligi sababli, siz return ni o'tkazib yuborishingiz mumkin :
    fun sum(a: Int, b: Int): Int = (a+b)
Formatlangan satr chiqishi
// 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 string interpolyatsiyasini qo'llab-quvvatlaydi, shunchaki o'zgaruvchining boshida "$" belgisidan foydalaning. Ushbu belgi kodning tozaligi va o'qilishini sezilarli darajada yaxshilaydi. Misollarni taqqoslash
// Java
object1.equals(object2)
// Kotlin
object1 == object2
Kotlinda ==ob'ekt turlari uchun taqqoslash " " ga tarjima qilingan equals! Va havolalarni solishtirish uchun " ===" ishlatiladi. Istisnolar
// 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)
}
Kotlin-da tekshirilgan istisnolar yo'q; endi siz butun ilova bo'ylab cheksiz istisnolarni tashlashingiz yoki ko'p darajali istisnolar yaratishingiz shart emas try-catch. Null Xavfsizlik
// 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 NPE muammosiga g'amxo'rlik qildi va bir qator talablarni kiritdi:
  • barcha sinf maydonlari va o'zgaruvchilar ishga tushirilishi kerak;
  • Siz maydon yoki o'zgaruvchiga "null" yozishingiz mumkin, lekin keyin siz o'zgaruvchingiz Nullable ekanligini aniq aytishingiz kerak ("?" belgisini yozing);
  • Elvis operatori "?:" quyidagicha ishlaydi: agar chap tomonda Null bo'lsa, o'ngdagi narsani oling. Bizning misolimizda, qiymat o'zgaruvchisi ishga tushirilmaganda, " aniqlanmagan " qiymati olinadi.
Sinf maydonlari va ularga kirish
// 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")
     }
}
Kotlinda maydonni oddiygina tasvirlash kifoya va tamom: u allaqachon yashirin qabul qiluvchi va sozlagichlarga ega (salom lombok ), agar xohlasangiz, istalgan vaqtda bekor qilinishi mumkin. Shu bilan birga, biz to'g'ridan-to'g'ri kirish orqali maydonning qiymatini o'qiymiz va o'zgartiramiz va kaput ostida u deyiladi get()|set(). Velosipedlar
// 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 ketma-ketliklarni kesib o'tish uchun qulay va bir xil sintaksisni taqdim etdi: siz shunchaki chapdagi o'zgaruvchidan , o'ngdagi ketma-ketlikdan va ularning orasidagi " in " kalit so'zidan foydalanasiz, tur avtomatik ravishda kontent tomonidan aniqlanadi. 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
    }
}
Mashhur “ singl ” qolipi amalda tez-tez qo‘llaniladi, shuning uchun Kotlin “ class ” o‘rniga yozilgan alohida “ obyekt ” kalit so‘zini yaratishga qaror qildi va bu sinf singl ekanligini bildiradi; foydalanilganda siz hatto buni qilmaysiz. konstruktorni yoki boshqa usullarni chaqirish kerak! Nomlangan usul parametrlari va standart qiymatlari
// 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")
}
Usul yoki konstruktordagi barcha parametrlar talab qilinishi shart emas va Java-da biz parametrlarning har bir mumkin bo'lgan kombinatsiyasi uchun usullar yoki konstruktorlar to'plamini yaratishga odatlanganmiz. Kotlinga standart parametrlar kiritildi, bu sizga 1 ta usulni e'lon qilish va vaziyatga qarab unga kerakli parametrlar to'plamini o'tkazish imkonini beradi. Oqimlar
// 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) }
}
Java 8 da oqimni joriy qilish kollektsiyalar bilan ishlashda ajralmas funksiyaga aylandi. Kotlinda oqimlar yanada qulay va funktsional holga keltirildi: har bir to'plam allaqachon ma'lumotlar bilan ishlash uchun qulay, tez-tez ishlatiladigan usullar to'plamiga ega. Bundan tashqari, birinchi usuldagi lambda ifodasiga e'tibor bering: agar funktsiya literalida aynan bitta parametr bo'lsa, uning deklaratsiyasini olib tashlash mumkin ( -> bilan birga) va uni u deb atash  mumkin . Yakunlash vaqti keldi... Men funksionallikning faqat kichik, asosiy qismini namoyish qildim, lekin ishonchim komilki, siz allaqachon Kotlinni sinab ko'rmoqchisiz! O'z tajribamdan men quyidagi xulosalar chiqarishim mumkin:
  • Java dasturchisi uchun Kotlin sintaksisini o'zlashtirish va kod yozishni boshlash juda oson;
  • Kotlin Java bilan to'liq mos keladi va siz uni allaqachon mavjud loyihalaringizda, masalan, testlarda sinab ko'rishingiz mumkin;
  • Kotlin kodi yanada toza va o'qilishi mumkin, siz bir nechta boilerplate yozishingiz shart emas ;
  • IDEA-da Java-dan Kotlin-ga avtomatik konvertor mavjud, siz tayyor Java kodini olishingiz va uni avtomatik ravishda Kotlin-ga o'zgartirishingiz mumkin;
  • yangi loyihani Kotlinda yozish kerak, chunki infratuzilma nuqtai nazaridan u Java bilan bir xil, ammo foydalanish nuqtai nazaridan u yaxshiroq va qulayroq!
Agar sizga maqola yoqqan bo'lsa va umuman Java haqidagi resursga tegishli bo'lsa, men haqiqiy korxona loyihasida Kotlindan foydalanish tajribasi haqida yozishni davom ettira olaman. Foydali havolalar:
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION