java - desventajas - kotlin tutorial
¿Los tipos de datos de Kotlin están basados en tipos de datos Java primitivos o no primitivos? (2)
Tomé un tipo
Int
y luego intenté convertirlo en unDouble
diciendonum as Double
<...> Sin embargo, esto falló, diciendo que Int no se puede convertir aDouble
. Estoy asumiendo que esto se debe a que se basa en la claseInteger
lugar del tipo de datos en bruto.
No, y hay dos puntos importantes a tener en cuenta:
Kotlin posiciona sus tipos numéricos (
Int
,Long
,Double
, etc.) como no anidados el uno en el otro, no existe una relación entre estos tipos. Es por eso que el elencointNum as Double
no tiene éxito en Kotlin. Es por eso que no hay conversiones implícitas entre estos tipos. En cambio, la conversión numérica se realiza con las funciones correspondientes (por ejemplo,.toDouble()
)Los usos de tipo numérico en Kotlin se compilan en primitivas JVM siempre que sea posible. Algunos usos requieren tipos de cajas (por ejemplo, un Nullable
Int?
Requiere el boxeo, y lo mismo ocurre con una implementación de tipo genérico con unInt
como argumento de tipo), pero el compilador decide si son necesarios para cada caso.
<...> ¿Cuál es la forma más eficiente de emitir valores? Hay una función
.toDouble()
, pero parece ineficaz e inmanejable.
La forma más eficiente es usar las funciones de conversión numérica como .toDouble()
. De hecho, estas funciones están intrínsecas y no hay una sobrecarga de llamada de función cuando las usa. Se compilan estrechamente con lo que javac produciría para un molde numérico de Java o una conversión implícita. Puede inspeccionar el código de bytes que el compilador de Kotlin produce para descubrir qué es lo que está debajo del capó y si una conversión específica introduce alguna sobrecarga.
Ver también: una respuesta a una pregunta similar, (enlace)
Soy nuevo en Kotlin y estaba jugando con los tipos de datos. Tomé un tipo Int
y luego intenté convertirlo en un Double
al decir num as Double
, una llamada que es válida en Java (no sintácticamente pero obtienes el punto). Sin embargo, esto falló, diciendo que Int no se puede convertir a Doble. Estoy asumiendo que esto se debe a que se basa en la clase Integer en lugar del tipo de datos en bruto. ¿Estoy en lo correcto y cuál es la forma más eficiente de emitir valores? Hay una función .toDouble()
, pero parece ineficaz e inmanejable.
Esto se debe a que Kotlin no funciona como Java en números cada vez mayores.
No hay conversiones ensanchadas implícitas para los números en Kotlin. por ejemplo, puede escribir algo en Java de la siguiente manera:
int a = 1;
double b = a;
Sin embargo, no puedes escribir algo en Kotlin. por ejemplo:
val a:Int = 1
// v--- can''t be widening
val b:Double = a
Esto se debe a que todo en Kotlin es un objeto, no hay tipos primitivos, por lo que debe convertir un Int
en un Double
explícitamente, por ejemplo:
val a:Int = 1
// v--- convert it explicitly by `toDouble()` method
val b:Double = a.toDouble()