JavaRush /Java блогу /Random-KY /KotlinRush: Java тилинде жазууну улантуунун мааниси барбы...
NikEy
Деңгээл
Новосибирск

KotlinRush: Java тилинде жазууну улантуунун мааниси барбы?

Группада жарыяланган
Салам, JavaRush студенти, сиз Java менен толук сиңирүүңүздөн мурун, мен сиздин көз карашыңызды кеңейтип, барган сайын популярдуу болуп жаткан Котлин тorне көңүл бургум келет !
KotlinRush: Java тorнде жазууну улантуунун мааниси барбы?  - 1
Котлин - бул JetBrains тарабынан иштелип чыккан жаш тил . Ооба, ооба, дал ошол эле компания биздин сүйүктүү IDE иштеп чыккан: IntelliJ IDEA. Kotlin бул JVM тor жана Java менен толук шайкеш келет , башкача айтканда, Котлин codeунан сиз тааныш Java китепканаларына оңой кире аласыз.Китепканалар жөнүндө эмне айтууга болот: Kotlin жана Java класстары бир пакетте чогуу жашай алат! Котлин программалоо коомчулугунда ушунчалык популярдуу болгондуктан, Google аны Android үчүн расмий иштеп чыгуу тor катары тааныган жана жакында Котлин ишкана долбоорлорунда популярдуу боло баштады. Бул макалада мен Котлин жана Java тилдеринде жазылган codeдун бир нече салыштырма мисалдарын келтирип, кээ бир жыйынтыктарды чыгаргым келет. Go! Адаттагыдай эле "Салам дүйнө" менен баштайлы
// 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() !
Instance түзүү
// 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
}
Котлин сап интерполяциясын колдойт, жөн гана өзгөрмөнүн башында "$" белгисин колдонуңуз. Бул белги codeдун тазалыгын жана окулушун кыйла жакшыртат. Мисалдарды салыштыруу
// Java
object1.equals(object2)
// Kotlin
object1 == object2
Котлинде ==an objectтин түрлөрү үчүн салыштыруу " " тorне которулган 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. Null Safety
// 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 көйгөйүнө кам көрүп, бир катар талаптарды киргизди:
  • класстын бардык талаалары жана өзгөрмөлөрү инициализацияланышы керек;
  • Сиз талаага же өзгөрмөгө "нөл" деп жаза аласыз, бирок андан кийин өзгөрмөңүз Nullable экенин ачык айтышыңыз керек ("?" белгисин жазыңыз);
  • Elvis оператору "?:" мындай иштейт: сол жакта Null бар болсо, оң жактагыны алыңыз. Биздин мисалда, маанинин өзгөрмөсү инициализацияланбаганда, “ аныкталбаган ” мааниси алынат.
Класс талаалары жана аларга кирүү
// 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")
     }
}
Котлинде талааны жөн эле сүрөттөп коюу жетиштүү: анын мурунтан эле жашыруун алуучулары жана орнотуучулары бар (hello 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)
    }
}
Котлин ырааттуулуктарды басып өтүү үчүн ыңгайлуу жана бирдиктүү синтаксисти камсыз кылды: сиз жөн гана сол жактагы өзгөрмө , оң жактагы ырааттуулук жана ортосунда " in " ачкыч сөзүн колдоносуз , тип автоматтык түрдө мазмун менен аныкталат. жалгыз
// 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
    }
}
Тааныш “ сингл ” үлгүсү практикада көп колдонулат, ошондуктан Котлин өзүнчө “ 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")
}
Методдогу же конструктордогу бардык параметрлер талап кылынbyte, ал эми 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ши коллекциялар менен иштөөдө ажырагыс функция болуп калды. Котлинде агымдар ого бетер ыңгайлуу жана функционалдык болуп калды: ар бир коллекцияда маалыматтар менен иштөө үчүн ыңгайлуу, көп колдонулган ыкмалардын топтому бар. Ошондой эле, биринчи ыкманын ичиндеги ламбда туюнтмасына көңүл буруңуз: эгерде функциянын литералында так бир параметр болсо, анын декларациясын алып салууга болот ( -> менен бирге) жана  аны . Жыйынтыктоого убакыт келди... Мен функциянын кичинекей, негизги бөлүгүн гана көрсөттүм, бирок сиз Котлинди сынап көргүңүз келгенине ишенем! Мен өзүмдүн тажрыйбамдан төмөнкүдөй жыйынтык чыгара алам:
  • Java иштеп чыгуучусу үчүн Котлин синтаксисин өздөштүрүү жана code жазууну баштоо абдан оңой;
  • Котлин Java менен толугу менен шайкеш келет жана сиз аны учурдагы долбоорлоруңузда, мисалы, тесттерде сынап көрө аласыз;
  • Котлин codeу тазараак жана окууга ыңгайлуу, сизге бир топ жазууну жазуунун кереги жок ;
  • IDEAда автоматтык Javaдан Котлинге конвертер бар, сиз даяр Java codeун алып, аны автоматтык түрдө Котлинге которсоңуз болот;
  • жаңы долбоор Котлинде жазылышы керек, анткени инфраструктуралык жактан ал Java менен бирдей, бирок колдонуу жагынан ал жакшыраак жана ыңгайлуу!
Эгер сизге макала жакса жана жалпысынан Java жөнүндө ресурста актуалдуу болсом, мен Котлинди чыныгы ишкана долбоорунда колдонуу тажрыйбасы жөнүндө жазууну уланта алам. Пайдалуу шилтемелер:
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION