JavaRush /Блоги Java /Random-TG /Оё байни Котлин ва Java фарқият вуҷуд дорад?
Paul Soia
Сатҳи
Kiyv

Оё байни Котлин ва Java фарқият вуҷуд дорад?

Дар гурӯҳ нашр шудааст
Салом ба ҳама. Ман мехоҳам ба шумо чанд чизи асосиро дар бораи забони Котлин бигӯям, ки барои шурӯъкунандагон муфид хоҳад буд. Ҳамин тавр мешавад, ки ҳоло бо як забон ворид шудан ба таҳияи Android душвор хоҳад буд - аксари лоиҳаҳои нав дар Котлин навишта мешаванд, аксари лоиҳаҳои омода дар Java навишта мешаванд. Оё байни Котлин ва Java фарқият вуҷуд дорад?  - 1Дар айни замон ман 4 лоиҳа дорам: ду дар Котлин ва ду дар Java (як калон калон ва се хурд барои истифодаи дохилӣ). Вақте ки ширкат тасмим гирифт, ки дар Котлин лоиҳаҳои нав нависад, ин тасмим ба ман аҷиб менамуд. Чаро забонҳои гуногунро омехта кунед? Бигзор каси дигар дар Котлин нависад, ба мо чаро лозим аст? Аммо ҳеҷ роҳе набуд, бинобар ин ман тасмим гирифтам, ки забони навро санҷам ва ба омӯхтани он шурӯъ кардам. Рамзи аввал, албатта, комилан бо услуби Java навишта шуда буд, ки ин нофаҳмиро илова кард: чаро ба ман забони нав лозим аст? Аммо вақте ки ман онро истифода кардам, ман бартариҳои бештар ва бештар пайдо кардам ва ҳоло (ман тақрибан 2 сол дар Котлин менависам) гуфта метавонам, ки Котлин дар таҳияи Android қулайтар аст. Ман мехоҳам баъзе нозукиҳоро нишон диҳам, ки барои касе, ки тасмим гирифт, ки пас аз Java ба омӯзиши Котлин шурӯъ кунад, аён нахоҳад буд. Инчунин ба шумо хотиррасон мекунам, ки Android Java 8-ро истифода мебарад, ки versionи ҷорӣ 14 мебошад. Ҳамин тавр, аввал - Тағирёбандаҳо : Java:
Int a = 1;
String s = "test";
Котлин:
val a = 1
var b = 2
val c: Int
val d = "test"
Дар Котлин ду намуди тағирёбанда мавҷуданд: val (танҳо барои хондан) ва var (хондан-навиштан). Тавсия дода мешавад, ки вал то ҳадди имкон истифода шавад. Агар тағирёбанда аллакай оғоз карда шуда бошад, эълон кардани навъи тағирёбанда шарт нест. Дуюм - 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;
        }
Дар Котлин, оператори вақте барои чунин ифодаҳо истифода мешавад (гарчанде ки 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 муқоиса кунед. 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и Котлин чизе нотамом мондааст. Аммо не, ин ду рамзи якхела бо забонҳои гуногун мебошанд. Биёед инро каме фаҳмем. Дар Котлин, конструкторро бевосита дар бадани номи синф навиштан мумкин аст (аммо агар шумо хоҳед, шумо метавонед онро бо усули кӯҳна, мисли 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