Kotlin zapożyczenia z Javy

0

Cześć.
Kilka dni temu wpadłem na pomysł przyjrzenia się Kotlinowi. Po odejściu od Javy i poznaniu składni poczułem dziwne (wspaniałe) uczucie :-) Natomiast mam trochę noob question. Postanowiłem zobaczyć jak to jest gdy chcielibyśmy przepisać coś bezpośrednio z Javy. Jak wiadomo Kotlin wykorzystuje biblioteki Javy - przechodząc do pytania posłużę się pewnym przykładem.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {
    public static void main(String[] args) throws IOException {
        double width, height, area;

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter a length of rectangle: ");
        width = Double.parseDouble(reader.readLine());
        System.out.println("Enter a width of rectangle: ");
        height = Double.parseDouble(reader.readLine());

        area = width * height;
        System.out.println("Area of rectangle with " + width + " width and " + height + " height is: ");
        System.out.println(area);
    }
}

A teraz rozważmy taki zapis w Kotlinie:

import java.io.BufferedReader
import java.io.IOException
import java.io.InputStreamReader

@Throws(IOException::class)
fun main(args: Array<String>) {
    val width: Double
    val height: Double
    val area: Double

    val reader = BufferedReader(InputStreamReader(System.`in`))
    println("Enter a length of rect: ")
    width = java.lang.Double.parseDouble(reader.readLine())
    println("Enter a width of rect: ")
    height = java.lang.Double.parseDouble(reader.readLine())

    area = width * height
    println("Area of rect with $width width and $height height is $area")
}

Najbardziej interesuje mnie zapis z drugiego przykładu:

width = java.lang.Double.parseDouble(reader.readLine())

Ktoś piszący na co dzień w Kotlinie(o ile w ogóle występuje) byłby w stanie mi wyjaśnić jak bardzo złą praktyką byłby taki zapis z użyciem lib z Javy? Czy też z racji tego iż oba języki działają na JVMi (na pewnym poziomie) można je ze sobą w prosty sposób łączyć i czerpać pewne rozwiązania? Czy też wypadałoby nie stosować takiego "hackingu" w kodzie i przepisać całość po ludzki do wersji 100% Kotlin...

4

Kotlin jest zorientowany na wygodną współpracę z kodem Javowym, więc w ogólności nie powinieneś się obawiać korzystać z klas Javowych. Z drugiej strony, jeśli w bibliotece standardowej Kotlina lub w popularnych bibliotekach Kotlinowych są zwięźlejsze i czytelniejsze alternatywy niż Javowe to dobrze jest się o nich dowiedzieć i z nich korzystać.

Jeśli chodzi o tę linijkę:

width = java.lang.Double.parseDouble(reader.readLine())

to Kotlin pozwala na taki zapis:

width = reader.readLine().toDouble()

który będzie robił dokładnie to samo.

0

Ciekawe jak by to zapisać w Scali.

0

Dzieki za wyjasnienie. Tak sie wlasnie zastanawialem czy mozna zapozyczac bezposrednio z javy. Czyli kwestia douczenia sie co jest w Kotlinie, a czego nie. Zawsze mozna w takim razie siegnac po jave gdy potrzeba czegos szybko i pozniej podmienic na Kotlinowe.
Dzieki :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1