JavaRush /Java блогы /Random-KK /Котлин мен Java арасында қандай да бір айырмашылық бар ма...
Paul Soia
Деңгей
Kiyv

Котлин мен Java арасында қандай да бір айырмашылық бар ма?

Топта жарияланған
Бәріңе сәлем. Мен сізге жаңадан бастағандар үшін пайдалы болатын Котлин тілі туралы бірнеше негізгі нәрселерді айтқым келеді. Енді бір ғана тілмен Android әзірлеуіне кіру қиынға соғады - жаңа жобалардың көпшілігі Котлин тілінде жазыла бастайды, дайын жобалардың көпшілігі Java тілінде жазылады. Котлин мен Java арасында қандай да бір айырмашылық бар ма?  - 1Қазіргі уақытта менің жұмысымда 4 жоба бар: екеуі Котлинде және екеуі Java-да (бір үлкен негізгі және үш шағын ішкі пайдалануға арналған). Компания Котлинде жаңа жобалар жазуға шешім қабылдағанда, бұл шешім маған оғаш болып көрінді. Неліктен әртүрлі тілдерді араластыру керек? Басқа біреу Котлинде жазсын, ол бізге не үшін керек? Бірақ амал жоқ, сондықтан мен жаңа тілді сынап көруді шешіп, оны үйренуге кірістім. Бірінші code, әрине, толығымен Java стилінде жазылған, бұл түсінбеушілікті одан әрі арттырды: маған жаңа тіл не үшін қажет? Бірақ мен оны пайдаланған сайын мен көбірек артықшылықтарды таптым және қазір (мен Котлинде 2 жылға жуық уақыт бойы жазып жүрмін) Котлин Android әзірлеуде ыңғайлырақ деп айта аламын. Мен Java-дан кейін Котлинді үйренуді шешкен адамға түсініксіз кейбір нюанстарды көрсеткім келеді. Еске сала кетейін, Android жүйесінде Java 8 қолданылады, ағымдағы нұсқасы 14. Сонымен, біріншіден - Айнымалылар : Java:
Int a = 1;
String s = "test";
Котлин:
val a = 1
var b = 2
val c: Int
val d = "test"
Котлинде айнымалылардың екі түрі бар: val (тек оқу үшін) және var (оқу-жазу). Мүмкіндігінше val пайдалану ұсынылады. Егер айнымалы инициализацияланған болса, айнымалының түрін жариялау қажет емес. Екінші - if/else, операторларды ауыстырыңыз : Java тілінде осы мәлімдемелер тізбегін қаншалықты жиі пайдаланасыз:
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
Немесе келесідей:
switch(выражениеДляВыбора) {
        case (meaning 1):
                Код1;
                break;
        case (meaning 2):
                Код2;
                break;
...
        case (meaning N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
Котлинде мұндай өрнектер үшін when операторы пайдаланылады (бірақ if/else де қолдануға болады):
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
Мұнда біз шарттар тізбегінен өтіп қана қоймай, сонымен бірге нәтиже айнымалысына бірден бүкіл өрнекті тағайындадық, бұл бізге codeтың бірнеше жолын сақтап қалды. Дегенмен, фorалда тек екі опция болса, мен әдеттегі if..else пайдалануды ұсынамын. Қашан құрылыс үш нұсқадан ғана қысқа болады. Әрі қарай жүрейік - Конструкторлар . Бұл жерде ертегі. Тек Java және Kotlin codeтарын салыстырыңыз. 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;
    }
}
Котлин:
class Person(private val firstName: String,
             private val lastName: String,
             private var age: Int) {
}
Котлин codeында бірдеңе аяқталмаған сияқты көрінуі мүмкін. Бірақ жоқ, бұл әртүрлі тілдердегі екі бірдей code. Оны аздап анықтайық. Котлин тілінде конструкторды тікелей класс атауының негізгі бөлігіне жазуға болады (бірақ қаласаңыз, оны Java тіліндегідей ескі әдіспен жасауға болады). Сонымен, біз үш айнымалыны жаздық, Java тілінде жас айнымалысы үшін конструктор, гетер және бір орнатушыны жасадық. Котлинде, біздің есімізде, val айнымалысы тек оқуға арналған, сондықтан бұл айнымалылар үшін орнатушы қол жетімді емес (Котлин сорғыштың астында гетер-сеттерді жүзеге асырады). Var айнымалысы реттеушіні пайдалануға мүмкіндік береді. Нәтижесінде біз Java тілінде оннан астам жолды алған нәрсені бір жолға дерлік жаздық. Мұнда мен Котлиндегі деректер кластары туралы көбірек оқуды ұсынамын. Бірақ бұл Котлин конструкторларының жақсы білетінінің бәрі емес. Бірақ екі конструктор қажет болса ше? Егер үшеу болса ше? Java тілінде ол келесідей болады:
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;
    }
Ештеңе күрделі емес, қанша дизайнер қажет болса, олар осылай жасады. Котлинде сіз тек бір конструктормен жұмыс істей аласыз. Қалай? Бұл қарапайым - әдепкі мәндер.
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
Біз конструкторда әдепкі мәндерді тағайындадық және енді оларды шақыру келесідей болады:
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
Сұрақ туындауы мүмкін: бұл не:
private val lastName: String? = null
Бұл басқа сұрақ белгілері қандай? Иә, егер мән нөл болуы мүмкін болса, онда ол орнатылады.Осы ?сияқты опция да бар - !!(айнымалы нөлді қабылдай алмаса). Бұл туралы өзіңіз оқыңыз, бәрі қарапайым. Ал біз келесі нүктеге көшеміз. Кеңейтімдер . Бұл Java-да жоқ Котлиндегі өте керемет құрал. Кейде жобада біз көптеген сыныптарда қайталанатын үлгі әдістерін қолданамыз. Мысалы, келесідей:
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
Котлинде біз сыныпты кеңейте аламыз:
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
Содан кейін оны бүкіл жобада келесідей пайдаланыңыз:
context?.toast("hello world")
Біз Context класы үшін кеңейтім жасадық. Енді мәтінмән бар жерде оның жаңа тост әдісі қолжетімді болады. Бұл кез келген сынып үшін жасалуы мүмкін: String, Fragment, пайдаланушы кластары, ешқандай шектеулер жоқ. Және біз қарастыратын соңғы нүкте - Жолдармен жұмыс . Мұнда бәрі қарапайым. Java тілінде ол былай жазылған:
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
Котлинде оңайырақ:
val s = "friends"
val a = 5
println("I have $a $s!")
Бұл Котлинді үйренудің басында мен тап болған нюанстар, бұл сізге көмектеседі деп үміттенемін.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION