JavaRush /Java Blogu /Random-AZ /Kotlin və Java arasında fərq varmı?
Paul Soia
Səviyyə
Kiyv

Kotlin və Java arasında fərq varmı?

Qrupda dərc edilmişdir
Hamıya salam. Mən sizə yeni başlayanlar üçün faydalı olacaq Kotlin dili haqqında bir neçə əsas şey demək istəyirəm. Elə olur ki, indi yalnız bir dillə Android-in inkişafına daxil olmaq çətin olacaq - yeni layihələrin əksəriyyəti Kotlin dilində yazılmağa başlayır, əksər hazır layihələr Java-da yazılır. Kotlin və Java arasında fərq varmı?  - 1Hazırda işimdə 4 layihə var: ikisi Kotlin, ikisi Java (bir böyük əsas və üç kiçik daxili istifadə üçün). Şirkət Kotlin-də yeni layihələr yazmaq qərarına gələndə bu qərar mənə qəribə gəldi. Niyə müxtəlif dilləri qarışdırırsınız? Qoy başqası Kotlində yazsın, bu bizə niyə lazımdır? Ancaq çıxış yolu yox idi, ona görə də yeni bir dil sınamaq qərarına gəldim və onu öyrənməyə başladım. Birinci kod, əlbəttə ki, tamamilə Java üslubunda yazılmışdır və bu, anlaşılmazlığı daha da artırdı: niyə mənə yeni bir dil lazımdır? Amma istifadə etdikcə getdikcə daha çox üstünlüklər tapdım və indi (mən 2 ilə yaxındır Kotlin dilində yazıram) deyə bilərəm ki, Kotlin Android inkişafında daha rahatdır. Java-dan sonra Kotlin öyrənməyə başlamaq qərarına gələn kimsə üçün aydın olmayacaq bəzi nüansları göstərmək istəyirəm. Nəzərinizə çatdırım ki, Android hazırkı versiya 14 olmaqla Java 8-dən istifadə edir. Beləliklə, əvvəlcə - Dəyişənlər : Java:
Int a = 1;
String s = "test";
Kotlin:
val a = 1
var b = 2
val c: Int
val d = "test"
Kotlin-də iki növ dəyişən var: val (yalnız oxumaq üçün) və var (oxumaq-yazmaq). Mümkün olduqda val istifadə etmək tövsiyə olunur. Əgər dəyişən artıq işə salınıbsa, dəyişənin növünü elan etmək lazım deyil. İkinci - if/else, ifadələri dəyişdirin : Java-da bu ifadələr silsiləsində nə qədər tez-tez istifadə edirsiniz:
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
Və ya bu kimi:
switch(выражениеДляВыбора) {
        case (meaning 1):
                Код1;
                break;
        case (meaning 2):
                Код2;
                break;
...
        case (meaning N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
Kotlin-də belə ifadələr üçün when operatoru istifadə olunur (baxmayaraq ki, if/else də istifadə oluna bilər):
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
Burada biz nəinki şərtlər zəncirindən keçdik, həm də dərhal bütün ifadəni nəticə dəyişəninə təyin etdik ki, bu da bizə kifayət qədər bir neçə kod sətirini xilas etdi. Amma yenə də filialda yalnız iki seçiminiz varsa, adi if..else-dən istifadə etməyi məsləhət görürəm. Tikinti yalnız üç variantdan daha qısa olacaq. Davam edək - Konstruktorlar . Burada bir nağıldır. Sadəcə Java və Kotlin-dəki kodu müqayisə edin. Java:
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) {
}
Kotlin kodunda bir şeyin yarımçıq qaldığı görünə bilər. Ancaq yox, bunlar fərqli dillərdə iki eyni koddur. Gəlin bunu bir az anlayaq. Kotlin-də konstruktor birbaşa sinif adının gövdəsinə yazıla bilər (lakin istəsəniz, bunu Java-da olduğu kimi köhnə üsulla edə bilərsiniz). Beləliklə, biz üç dəyişən yazdıq, Java-da yaş dəyişəni üçün bir konstruktor, alıcılar və bir setter yaratdıq. Kotlin-də, xatırladığımız kimi, val dəyişəni yalnız oxunur və buna görə də bu dəyişənlər üçün təyinedici mövcud deyil (Kotlin başlıq altında alıcı-setterləri həyata keçirir). Var dəyişəni sizə təyinedicidən istifadə etməyə imkan verir. Nəticədə, Java-da ondan çox sətir götürən eyni şeyi demək olar ki, bir sətirdə yazdıq. Burada Kotlin-də məlumat sinifləri haqqında daha çox oxumağı məsləhət görürəm. Lakin Kotlin konstruktorlarının yaxşı bacardıqları bu deyil. Bəs sizə iki konstruktor lazımdırsa? Bəs üçü varsa? Java-da bu belə görünür:
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;
    }
Mürəkkəb bir şey yox idi, lazım olduğu qədər dizaynerlər də elə etdilər. Kotlin-də yalnız bir konstruktorla məşğul ola bilərsiniz. Necə? Bu sadədir - standart dəyərlər.
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
Konstruktorda standart dəyərlər təyin etdik və indi onları çağırmaq belə görünəcək:
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
Sual yarana bilər: bu nədir:
private val lastName: String? = null
Bu digər sual işarələri nədir? Bəli, əgər dəyər null ola bilərsə, o zaman təyin edilir.Bunun ?kimi bir variant da var - !!(əgər dəyişən null qəbul edə bilmirsə). Bu barədə özünüz oxuyun, hər şey sadədir. Və növbəti nöqtəyə keçirik. Uzantılar . Bu, Java-da mövcud olmayan Kotlin-də çox gözəl bir vasitədir. Bəzən bir layihədə bir çox siniflərdə təkrarlanan şablon metodlarından istifadə edirik. Məsələn, bu kimi:
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
Kotlin-də biz bir sinfi genişləndirə bilərik:
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
Və sonra onu layihə boyu belə istifadə edin:
context?.toast("hello world")
Kontekst sinfi üçün genişləndirmə etdik. İndi kontekst mövcud olan yerdə onun yeni tost metodu mövcud olacaq. Bu, istənilən sinif üçün edilə bilər: String, Fragment, sizin fərdi sinifləriniz, heç bir məhdudiyyət yoxdur. Baxacağımız son nöqtə isə Simlərlə İşdir . Burada hər şey sadədir. Java-da belə yazılmışdır:
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
Kotlin-də daha asandır:
val s = "friends"
val a = 5
println("I have $a $s!")
Bunlar Kotlini öyrənməyə başlayanda rastlaşdığım nüanslardır, ümid edirəm ki, bu sizə kömək edəcək.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION