Kotlin zapożyczenia z Javy

Odpowiedz Nowy wątek
2018-01-12 21:10
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...


"Trolling is a art"

Pozostało 580 znaków

2018-01-12 22:22

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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2018-01-12 23:14
Malutki Wąż
0

Ciekawe jak by to zapisać w Scali.

Prawie identycznie jak w Kotlinie w tym przypadku: width = reader.readLine().toDouble - różnica to tylko brak nawiasów w wywołaniu toDouble - Wibowit 2018-01-12 23:26

Pozostało 580 znaków

2018-01-13 00:16
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 :-)


"Trolling is a art"

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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