JavaRush /Java Blog /Random-TL /Mayroon bang pagkakaiba sa pagitan ng Kotlin at Java?
Paul Soia
Antas
Kiyv

Mayroon bang pagkakaiba sa pagitan ng Kotlin at Java?

Nai-publish sa grupo
Kamusta kayong lahat. Gusto kong sabihin sa iyo ang ilang pangunahing bagay tungkol sa wikang Kotlin, na magiging kapaki-pakinabang para sa mga nagsisimula. Nagkataon na ngayon ay magiging mahirap na makapasok sa pagbuo ng Android gamit ang isang wika lamang - karamihan sa mga bagong proyekto ay nagsisimulang isulat sa Kotlin, karamihan sa mga handa na proyekto ay nakasulat sa Java. Есть ли отличие Kotlin от Java? - 1Sa ngayon, mayroon akong 4 na proyekto sa trabaho: dalawa sa Kotlin at dalawa sa Java (isang malaking pangunahing isa at tatlong maliliit para sa panloob na paggamit). Nang magpasya ang kumpanya na magsulat ng mga bagong proyekto sa Kotlin, tila kakaiba sa akin ang desisyong ito. Bakit pinaghalo ang iba't ibang wika? Hayaan ang ibang tao na magsulat sa Kotlin, bakit natin ito kailangan? Ngunit walang paraan, kaya nagpasiya akong sumubok ng bagong wika at nagsimulang pag-aralan ito. Ang unang code, siyempre, ay isinulat nang buo sa istilong Java, na higit pang nagdagdag sa hindi pagkakaunawaan: bakit kailangan ko ng bagong wika? Ngunit habang ginagamit ko ito, nakakita ako ng higit at higit na mga pakinabang at ngayon (nagsusulat ako sa Kotlin sa loob ng halos 2 taon) masasabi kong mas maginhawa ang Kotlin sa pagbuo ng Android. Gusto kong magpakita ng ilang mga nuances na hindi magiging halata sa isang taong nagpasyang simulan ang pag-aaral ng Kotlin pagkatapos ng Java. Ipaalala ko rin sa iyo na ang Android ay gumagamit ng Java 8, na ang kasalukuyang bersyon ay 14. Kaya, una - Mga Variable : Java:
Int a = 1;
String s = "test";
Kotlin:
val a = 1
var b = 2
val c: Int
val d = "test"
Mayroong dalawang uri ng mga variable sa Kotlin: val (read-only) at var (read-write). Inirerekomenda na gamitin ang val hangga't maaari. Hindi kinakailangang ideklara ang uri ng isang variable kung ang variable ay nasimulan na. Pangalawa - if/else, switch statements : Gaano mo kadalas ginagamit ang chain of statements na ito sa Java:
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
O tulad nito:
switch(выражениеДляВыбора) {
        case (meaning 1):
                Код1;
                break;
        case (meaning 2):
                Код2;
                break;
...
        case (meaning N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
Sa Kotlin, ang kung kailan ginagamit ang operator para sa mga naturang expression (bagaman kung/iba ay maaari ding gamitin):
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
Dito hindi lamang kami dumaan sa hanay ng mga kundisyon, ngunit agad ding itinalaga ang buong expression sa variable ng resulta, na nag-save sa amin ng ilang linya ng code. Ngunit gayon pa man, kung mayroon ka lamang dalawang pagpipilian sa isang sangay, inirerekumenda kong gamitin ang karaniwang kung..iba. Magiging mas maikli ang konstruksyon sa tatlong variant lang. Magpatuloy tayo - Mga Konstruktor . Ito ay isang fairy tale dito. Ihambing lamang ang code sa Java at 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;
    }
}
Kotlin:
class Person(private val firstName: String,
             private val lastName: String,
             private var age: Int) {
}
Может показаться, что в codeе на котлине что-то не дописали. Но нет, это два идентичных codeа на разных языках. Давайте немного разберемся. В Kotlin конструктор можно прописывать прямо в теле названия класса (но если хочется, то можно и по старинке, How в Java). Итак, мы прописали три переменные, в Java создали конструктор, геттеры и один сеттер для переменной age. В Kotlin, How мы помним, переменная val только для чтения, а потому сеттер для этих переменных недоступен (геттеры-сеттеры котлин реализует под капотом сам). Переменная var дает возможность использовать сеттер. В итоге практически одной строкой мы написали то же самое, что на Java заняло больше десятка строк. Здесь рекомендую еще почитать про data class в Kotlin. Но это еще не всё, в чем хороши конструкторы в Kotlin. А что, если вам надо два конструктора? А если три? В 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;
    }
Ничего сложного, сколько надо конструкторов, столько и сделали. В Kotlin можно обойтись одним конструктором. Как? Всё просто — значения по умолчанию.
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
Мы в конструкторе присвоor значения по умолчанию и теперь вызов их будет выглядеть так:
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
Тут может возникнуть вопрос: что это такое:
private val lastName: String? = null
What еще за знаки вопроса? Да, если meaning может быть null, то ставится ?.Также есть вариант вот такой — !! (если переменная не может принимать null). Об этом уже сами почитайте, там всё просто. А мы идем к следующему пункту. Extensions. Это очень крутой инструмент в Kotlin, которого нету в Java. Иногда мы в проекте используем шаблонные методы, которые повторяются во многих классах. Например, так:
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
В Kotlin мы можем сделать расширение для класса:
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
И дальше по всему проекту использовать это вот так:
context?.toast("hello world")
Мы сделали расширение для класса Context. И теперь везде, где доступен context, будет доступен его новый метод toast. Это можно сделать для любого класса: String, Fragment, ваши кастомные классы, ограничений нет. И последний пункт, который разберем — Работа со строками. Тут всё просто. В Java это пишется так:
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
В Kotlin проще:
val s = "friends"
val a = 5
println("I have $a $s!")
Это те нюансы, на которых я спотыкался в начале изучения Kotlin, надеюсь вам это поможет.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION