JavaRush /Java Blogu /Random-AZ /KotlinRush: Java-da yazmağa davam etməyin mənası varmı?
NikEy
Səviyyə
Новосибирск

KotlinRush: Java-da yazmağa davam etməyin mənası varmı?

Qrupda dərc edilmişdir
Salam, JavaRush tələbəsi, Java ilə tamamilə mənimsənilməmişdən əvvəl mən sizin üfüqlərinizi genişləndirmək və diqqəti getdikcə populyarlaşan Kotlin dilinə çəkmək istərdim !
KotlinRush: Java-da yazmağa davam etməyin mənası varmı?  - 1
Kotlin JetBrains tərəfindən hazırlanmış kifayət qədər gənc bir dildir . Bəli, bəli, bizim sevimli IDE-ni inkişaf etdirən şirkət: IntelliJ IDEA. Kotlin JVM dilidir və Java ilə tam uyğundur , yəni Kotlin kodundan siz asanlıqla tanış Java kitabxanalarına daxil ola bilərsiniz.Kitabxanalar haqqında nə demək olar: Kotlin və Java sinifləri bir paketdə birlikdə mövcud ola bilər! Kotlin proqramlaşdırma ictimaiyyəti arasında o qədər məşhur idi ki, Google onu Android üçün rəsmi inkişaf dili kimi tanıdı və bu yaxınlarda Kotlin korporativ layihələrdə populyarlıq qazanmağa başladı. Bu yazıda mən Kotlin və Java dillərində yazılmış bir neçə müqayisəli kod nümunəsi vermək və bəzi nəticələr çıxarmaq istərdim. Get! Gəlin həmişəki kimi "Salam Dünya" ilə başlayaq
// 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 nümunəsinə baxsaq, dərhal aşağıdakıları qeyd edə bilərik:
  • sətrin sonunda nöqtəli vergül yazmağa ehtiyac yoxdur;
  • bütün üsullar əyləncə açar sözü ilə təsvir olunur ;
  • Xətti çap etmək üçün sadəcə bir söz kifayətdir - println() !
Nümunənin yaradılması
// Java (до 10)
final Application application = new Application();
// Kotlin
val application = Application()
Kotlin fərqləri:
  • instansiyadan aydın olarsa, dəyişənin tipini elan etməyə ehtiyac yoxdur;
  • dəyişən tipinin əvəzinə - val (dəyişməz) və ya var (dəyişən);
  • Nümunə yaratmaq üçün yeni açar söz yazmağa ehtiyac yoxdur !
Metodların təsviri
// Java
public int sum(int a, int b) {
    return (a + b);
}
// Kotlin
fun sum(a: Int, b: Int): Int {
return (a + b)
}
Kotlin fərqləri:
  • metoddan nəyisə qaytarmaq lazımdırsa, imzaya “ : Int ” əlavə edilir, burada Int qaytarma növüdür;
  • metod parametrlərinin təsviri: əvvəlcə dəyişənin adı, sonra tipi;
  • Metod gövdəsi yalnız bir sətirdən ibarət olduğundan, qaytarmağı buraxa bilərsiniz :
    fun sum(a: Int, b: Int): Int = (a+b)
Formatlaşdırılmış sətir çıxışı
// 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 sətir interpolyasiyasını dəstəkləyir, sadəcə dəyişənin əvvəlində "$" simvolundan istifadə edin. Bu qeyd kodun təmizliyini və oxunuşunu əhəmiyyətli dərəcədə yaxşılaşdırır. Nümunələrin müqayisəsi
// Java
object1.equals(object2)
// Kotlin
object1 == object2
Kotlin-də ==obyekt növləri üçün " " müqayisəsi equals! Və keçidləri müqayisə etmək üçün " ===" istifadə olunur. İstisnalar
// 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-də yoxlanılmış istisnalar yoxdur; indi bütün tətbiqdə sonsuz bir istisna atmaq və ya çox səviyyəli istisnalar yaratmaq lazım deyil try-catch. Null Təhlükəsizlik
// 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 problemini həll etdi və bir sıra tələblər təqdim etdi:
  • bütün sinif sahələri və dəyişənlər işə salınmalıdır;
  • Siz sahəyə və ya dəyişənə “null” yaza bilərsiniz, lakin sonra dəyişəninizin Null olduğunu açıq şəkildə deməlisiniz (“?” işarəsini yazın);
  • Elvis operatoru "?:" belə işləyir: solda Null varsa, sağda olanı götürün. Nümunəmizdə, dəyər dəyişəni işə salınmadıqda, " müəyyən edilməmiş " dəyəri alınacaq.
Sinif sahələri və onlara giriş
// 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")
     }
}
Kotlin-də sadəcə bir sahəni təsvir etmək kifayətdir və budur: onun artıq gizli alıcıları və təyinediciləri (salam lombok ) var, istəsən istənilən vaxt ləğv edilə bilər. Eyni zamanda, sahənin dəyərini sadəcə olaraq birbaşa daxil olmaqla oxuyuruq və dəyişdiririk və başlıq altında ona deyilir get()|set(). Velosipedlər
// 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 ardıcıllıqları keçmək üçün rahat və vahid sintaksisi təmin etmişdir: siz sadəcə olaraq solda dəyişən , sağda ardıcıllıq və aralarında “ in ” açar sözündən istifadə edirsiniz , tip avtomatik olaraq məzmunla müəyyən edilir. 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
    }
}
Təcrübədə tanış “ singl ” nümunəsi tez-tez istifadə olunur, ona görə də Kotlin “ class ” əvəzinə yazılan və sinfin singleton olduğunu ifadə edən ayrıca “ obyekt ” açar sözü yaratmağa qərar verdi ; istifadə edildikdə, hətta bunu etmirsiniz. konstruktora və ya başqa üsullara zəng etmək lazımdır! Adlandırılmış metod parametrləri və standart dəyərlər
// 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")
}
Belə olur ki, metod və ya konstruktorda bütün parametrlər tələb olunmur və Java-da biz parametrlərin hər bir mümkün kombinasiyası üçün metodlar və ya konstruktorlar toplusu yaratmağa alışmışıq. Kotlin-ə defolt parametrlər daxil edilmişdir ki, bu da 1 metodu elan etməyə və vəziyyətdən asılı olaraq lazımi parametrlər toplusunu ona ötürməyə imkan verir. Axınlar
// 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-də axının tətbiqi kolleksiyalarla işləyərkən ayrılmaz bir funksiyaya çevrildi. Kotlin-də axınlar daha da rahat və funksional hala gətirilib: hər bir kolleksiya artıq verilənlərlə işləmək üçün rahat, tez-tez istifadə olunan metodlar toplusuna malikdir. Həmçinin, birinci metodun daxilindəki lambda ifadəsinə diqqət yetirin: əgər funksiya hərfi dəqiq bir parametrə malikdirsə, onun bəyanı silinə bilər ( -> ilə birlikdə) və  ona . İşi yekunlaşdırmaq vaxtıdır... Mən funksionallığın yalnız kiçik, əsas hissəsini nümayiş etdirdim, amma əminəm ki, siz artıq Kotlin-i sınamaq istəyirsiniz! Təcrübəmdən aşağıdakı nəticələr çıxara bilərəm:
  • Java tərtibatçısı üçün Kotlin sintaksisini mənimsəmək və kod yazmağa başlamaq çox asandır;
  • Kotlin Java ilə tam uyğundur və siz artıq onu mövcud layihələrinizdə, məsələn, testlərdə sınaya bilərsiniz;
  • Kotlin kodu daha təmiz və daha oxunaqlıdır, bir dəstə boşqab yazmağa ehtiyac yoxdur ;
  • IDEA-nın avtomatik Java-dan Kotlin çeviricisi var, siz hazır Java kodunu götürüb avtomatik olaraq Kotlin-ə çevirə bilərsiniz;
  • Kotlin-də yeni bir layihə yazılmalıdır, çünki infrastruktur baxımından Java ilə eynidir, lakin istifadə baxımından daha yaxşı və daha rahatdır!
Məqaləni bəyəndinizsə və ümumiyyətlə Java ilə bağlı resursda aktualsınızsa, mən Kotlin-dən real müəssisə layihəsində istifadə təcrübəsi haqqında yazmağa davam edə bilərəm. Faydalı bağlantılar:
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION