JavaRush /Блоги Java /Random-TG /KotlinRush: оё идома додани навиштан дар Java маъно дорад...
NikEy
Сатҳи
Новосибирск

KotlinRush: оё идома додани навиштан дар Java маъно дорад?

Дар гурӯҳ нашр шудааст
Салом, донишҷӯи JavaRush, пеш аз он ки шумо бо Java пурра ғарқ шавед, ман мехоҳам ҷаҳонбинии шуморо васеъ кунам ва таваҷҷӯҳро ба забони рӯзафзуни Котлин ҷалб намоям !
KotlinRush: оё идома додани навиштан дар Java маъно дорад?  - 1
Котлин забони хеле ҷавон аст, ки аз ҷониби JetBrains таҳия шудааст . Бале, ҳа, ҳамон ширкате, ки IDE дӯстдоштаи моро таҳия кардааст: IntelliJ IDEA. Kotlin забони JVM аст ва комилан бо Java мувофиқ аст , яъне аз codeи Котлин шумо метавонед ба осонӣ ба китобхонаҳои шиноси Java дастрасӣ пайдо кунед.Дар бораи китобхонаҳо чӣ гуфтан мумкин аст: Синфҳои Kotlin ва Java метавонанд дар як баста зиндагӣ кунанд! Котлин дар байни ҷомеаи барномасозӣ он қадар маъмул буд, ки Google онро ҳамчун забони расмии таҳияи Android эътироф кард ва ба наздикӣ Котлин дар лоиҳаҳои корпоративӣ маъруфият пайдо кард. Дар ин мақола ман мехостам якчанд мисолҳои муқоисавии codeеро, ки дар Котлин ва Java навишта шудаанд, оварда, баъзе хулосаҳо барорам. Бирав! Биёед маъмулан бо "Салом ҷаҳон" оғоз кунем
// 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!")
}
Ба мисоли Котлин нигариста, мо метавонем фавран инҳоро қайд кунем:
  • дар охири сатр гузоштани нуктаи вергул лозим нест;
  • ҳама усулҳо бо калимаи ҷолиб тавсиф карда мешаванд ;
  • Барои чопи сатр танҳо як калима кифоя аст - println() !
Эҷоди як мисол
// Java (до 10)
final Application application = new Application();
// Kotlin
val application = Application()
Тафовутҳои Котлин:
  • зарурати эълон кардани навъи тағирёбанда вуҷуд надорад, агар он аз мисол равшан бошад;
  • ба ҷои навъи тағирёбанда - val (тағирнопазир) ё var (тағйирёбанда);
  • Барои сохтани мисол ба шумо лозим нест, ки калимаи навро нависед !
Тавсифи усулҳо
// Java
public int sum(int a, int b) {
    return (a + b);
}
// Kotlin
fun sum(a: Int, b: Int): Int {
return (a + b)
}
Тафовутҳои Котлин:
  • агар чизеро аз усул баргардонидан лозим бошад, ба имзо “ : Int ” илова карда мешавад, ки дар он Int навъи бозгашт аст;
  • тавсифи параметрҳои усул: аввал номи тағирёбанда, баъд навъи;
  • азбаски ҷисми метод танҳо аз як сатр иборат аст, шумо метавонед бозгаштро тарк кунед :
    fun sum(a: Int, b: Int): Int = (a+b)
Баромади сатри форматшуда
// 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
}
Котлин интерполясияи сатрро дастгирӣ мекунад, танҳо рамзи "$" -ро дар оғози тағирёбанда истифода баред. Ин нишона тозагӣ ва хондани рамзро ба таври назаррас беҳтар мекунад. Муқоисаи мисол
// Java
object1.equals(object2)
// Kotlin
object1 == object2
Дар Котлин, муқоисаи " ==" барои намудҳои an object ба equals! Ва барои муқоисаи истинодҳо, " ===" истифода мешавад. Истисноҳо
// 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)
}
Дар Котлин ягон истиснои санҷидашудаtry-catch вуҷуд надорад; акнун ба шумо лозим нест, ки беохир дар тамоми барнома истисно партоед ё истисноҳои бисёрсатҳиро эҷод кунед . Бехатарии нул
// 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"}"
}
Котлин ба мушкилоти NPE ғамхорӣ кард ва як қатор талаботҳоро ҷорӣ кард:
  • тамоми майдонҳо ва тағирёбандаҳои синф бояд оғоз карда шаванд;
  • Шумо метавонед "null" -ро дар майдон ё тағирёбанда нависед, аммо пас шумо бояд ба таври возеҳ бигӯед, ки тағирёбандаи шумо Нул аст (аломати "?" нависед);
  • Оператори Элвис "?:" чунин кор мекунад: агар дар тарафи чап Нуll мавҷуд бошад, он чизеро, ки дар тарафи рост аст, гиред. Дар мисоли мо, вақте ки тағирёбандаи арзиш оғоз карда нашудааст, арзиши " муайяннашуда " гирифта мешавад.
Майдонҳои синф ва дастрасӣ ба онҳо
// 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")
     }
}
Дар Котлин танҳо тавсиф кардани майдон кифоя аст ва ҳамин тавр аст: он аллакай қабулкунандаҳо ва танзимкунандаҳои номуайян дорад (салом lombok ), ки онҳоро дар вақти дилхоҳ, агар хоҳед, бекор кардан мумкин аст. Дар айни замон, мо арзиши майдонро танҳо тавассути дастрасӣ ба он мутолиа ва тағир медиҳем ва дар зери сарпӯш он номида мешавад get()|set(). Сиклҳо
// 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)
    }
}
Котлин синтаксиси қулай ва якхеларо барои гузариши пайдарпайҳо таъмин кардааст: шумо танҳо як тағирёбанда дар тарафи чап , пайдарпай дар тарафи рост ва калимаи калидии " дар " -ро истифода мебаред, намуд ба таври худкор аз рӯи мундариҷа муайян карда мешавад. Синглтон
// 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
    }
}
Намунаи шиноси " single " дар амал хеле зиёд истифода мешавад, аз ин рӯ Котлин тасмим гирифт, ки калимаи алоҳидаи " an object " -ро эҷод кунад, ки ба ҷои " класс " навишта шудааст ва маънои онро дорад, ки синф як сингл аст; ҳангоми истифода, шумо ҳатто конструктор ё ягон усулро даъват кардан лозим аст! Параметрҳои усули номбаршуда ва арзишҳои пешфарз
// 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")
}
Чунин мешавад, ки на ҳама параметрҳо дар усул ё конструктор талаб карда шаванд ва дар Java мо барои сохтани маҷмӯи усулҳо ё конструкторҳо барои ҳар як комбинатсияи имконпазири параметрҳо одат кардаем. Параметрҳои пешфарз ба Котлин ворид карда шудаанд, ки ба шумо имкон медиҳад, ки 1 усулро эълон кунед ва вобаста ба вазъият маҷмӯи зарурии параметрҳоро ба он гузаронед. Ҷараёнҳо
// 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 ба як функсияи ҷудонашаванда ҳангоми кор бо коллексияҳо табдил ёфтааст. Дар Котлин ҷараёнҳо боз ҳам қулайтар ва функсионалӣ шудаанд: ҳар як коллексия аллакай маҷмӯи усулҳои қулай ва зуд-зуд истифодашаванда барои кор бо додаҳо дорад. Инчунин, ба ифодаи лямбда дар дохor усули аввал аҳамият диҳед: агар функсияи literal маҳз як параметр дошта бошад, эъломияи онро метавон хориҷ кард (дар якҷоягӣ бо ->) ва онро  ҳамчун . Вақти он расидааст, ки ҷамъбаст кунед... Ман танҳо як қисми хурди асосии функсияҳоро нишон додам, аммо боварӣ дорам, ки шумо аллакай мехоҳед Котлинро санҷед! Аз таҷрибаи худ ман метавонам хулосаҳои зеринро барам:
  • Барои як таҳиягари Java азхуд кардани синтаксиси Котлин ва навиштани code хеле осон аст;
  • Котлин бо Java комилан мувофиқ аст ва шумо метавонед онро аллакай дар лоиҳаҳои мавҷудаи худ, масалан, дар озмоишҳо санҷед;
  • Рамзи Котлин тозатар ва хондантар аст, ба шумо лозим нест, ки як хӯшаи дегхона нависед ;
  • IDEA дорои табдилдиҳандаи автоматии Java ба Kotlin мебошад, шумо метавонед рамзи Java-и тайёрро гирифта, ба таври худкор онро ба Kotlin табдил диҳед;
  • Лоиҳаи нав бояд дар Котлин навишта шавад, зеро аз нуқтаи назари инфрасохтор он ба Java монанд аст, аммо аз ҷиҳати истифода беҳтар ва қулайтар аст!
Агар ба шумо мақола писанд омада бошад ва умуман дар манбаи Java алоқаманд бошад, ман метавонам навиштанро дар бораи таҷрибаи истифодаи Котлин дар лоиҳаи воқеии корхона идома диҳам. Истинодҳои муфид:
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION