los tipos de datos primitivos son los tipos más fundamentales en Kotlin; todos los demás tipos se componen de estos tipos y matrices de los mismos. Su representación es muy eficiente (tanto en términos de memoria como de tiempo de CPU), ya que se asignan a pequeños grupos de bytes que son directamente manipulables por la CPU.

Tipos de enteros

Los tipos enteros en Kotlin tienen un tamaño limitado, a diferencia de los enteros arbitrariamente grandes en Python. El límite depende del tipo, que decide cuántos bits ocupa el número en la memoria:

Escribe Bits Valor min valor máximo
Long 64 -9223372036854775808 9223372036854775807
Int 32 -2147483648 2147483647
Short dieciséis -32768 32767
Byte 8 -128 127

Los bytes son de -128 a 127 debido a que Kotlin heredó una mala decisión de diseño de Java. Para obtener un valor de byte tradicional entre 0 y 255, mantenga el valor como está si es positivo y agregue 256 si es negativo (entonces -128 es realmente 128 y -1 es realmente 255). Consulte la sección sobre funciones de extensión para obtener una solución alternativa para esto.

Un literal entero tiene el tipo Int si su valor encaja en un Int, o Long de lo contrario. Long los literales deben tener el sufijo L para mayor claridad, lo que también le permitirá hacer un Long con un valor “pequeño”. No hay sufijos literales para Short o Byte, por lo que dichos valores necesitan una declaración de tipo explícita o el uso de una función de conversión explícita.

val anInt =3val anotherInt =2147483647val aLong =2147483648val aBetterLong =2147483649Lval aSmallLong =3Lval aShort: Short =32767val anotherShort =1024.toShort()val aByte: Byte =65val anotherByte =-32.toByte()

Tenga en cuenta que dividir un número entero por un número entero produce un número entero (como en Python 2, pero a diferencia de Python 3). Si desea un resultado de punto flotante, al menos uno de los operandos debe ser un número de punto flotante (y recuerde que, como en la mayoría de los lenguajes, las operaciones de punto flotante son generalmente imprecisas):

println(7/3)// Prints 2println(7/3.0)// Prints 2.3333333333333335val x =3println(7/ x)// Prints 2println(7/ x.toDouble())// Prints 2.3333333333333335

Siempre que use un operador aritmético en dos enteros del mismo tipo (o cuando use un operador unario como la negación), ¡No hay “actualización” automática si el resultado no encaja en el tipo de operandos! Prueba esto:

val mostPositive =2147483647val mostNegative =-2147483648println(mostPositive +1)println(-mostNegative)

Ambos imprimen -2147483648, porque sólo se almacenan los 32 bits inferiores del resultado “real”.

Cuando usa un operador aritmético en dos enteros de diferentes tipos, el resultado se “actualiza” al tipo más ancho. Tenga en cuenta que el resultado aún puede desbordarse.

En breve: Piense detenidamente en sus declaraciones de números enteros y tenga la absoluta certeza de que el valor nunca necesitará ser mayor que los límites del tipo. Si necesita un número entero de tamaño ilimitado, use el tipo no primitivo BigInteger.

Punto flotante y otros tipos

Escribe Bits Notas
Double 64 16-17 dígitos significativos (igual que float en Python)
Float 32 6-7 dígitos significativos
Char dieciséis Unidad de código UTF-16 (consulte la sección sobre cadenas; en la mayoría de los casos, este es un carácter Unicode, pero podría ser solo la mitad de un carácter Unicode)
Boolean 8 true o false

Los números de coma flotante actúan de manera similar a en Python, pero vienen en dos tipos, dependiendo de cuántos dígitos necesite. Si necesita una mayor precisión, o para trabajar con cantidades monetarias (u otras situaciones en las que debe tener resultados exactos), use el tipo no primitivo BigDecimal.


← Anterior: Declaración de variables Siguiente: Cadenas →

Este material fue escrito por Aasmund Eldhuset; es propiedad de academia Khan y tiene licencia para su uso bajo CC BY-NC-SA 3.0 EE. UU.. Tenga en cuenta que esto no es parte de la oferta oficial de productos de Khan Academy.