Apex Academy
Módulo 1·02·22 min

Tipos Numéricos y Boolean

Integer, Long, Decimal, Double y Boolean. Y además Id y Blob, los dos tipos que solo existen porque esto es Salesforce.

En Admin esElegir entre Number, Currency, Percent y Checkbox

✓ En esta sub-lección

  1. 01Elegir entre Integer, Long, Decimal y Double a partir del dato, no por costumbre.
  2. 02Entender por qué una división entre enteros pierde los decimales.
  3. 03Reconocer Id y Blob y saber para qué sirve cada uno.

La nutria: ¿Te acuerdas? · Repaso de la lección 1

¿Qué hace la palabra final delante de una variable?

En el asistente de campos nuevos, «Number», «Currency» y «Percent» parecen casi lo mismo, pero tú ya sabes que no lo son: uno cuenta unidades, otro dinero, otro proporciones. Apex hace la misma distinción, solo que te obliga a declararla en voz alta.

El dato: 24500.75

  • Integer
  • Long
  • Decimal
  • Double
  • Boolean
  • Id
  • Blob

Paso 1 de 4

El dato es 24500.75: el importe firmado de un contrato. Siete tipos posibles sobre la mesa; vamos descartando con preguntas, igual que eliges el tipo de un campo en Setup.

La pregunta no es «¿es un número?», sino «¿qué clase de número y para qué?».

Integer y Long: contar cosas

Integer guarda números enteros entre unos -2.100 millones y +2.100 millones. Sirve para todo lo que se cuenta en unidades: contactos, días, intentos, posiciones. Cuando ese rango se queda corto (milisegundos desde 1970, identificadores de un sistema externo) se usa Long, que se escribe con una L al final.

Apex
Integer daysOpen = 47;
Long externalRecordId = 9000000000L;   // la L es obligatoria

Decimal: el tipo del dinero

Decimal guarda decimales de forma exacta, cifra a cifra. Es el tipo que Salesforce te devuelve cuando lees un campo Currency, y es el único en el que deberías pensar cuando hay importes de por medio. Double también guarda decimales, pero de forma aproximada, en : perfecto para cálculos científicos y pésimo para facturas.

Apex
Decimal unitPrice = 19.99;
Decimal taxRate = 0.21;
Decimal total = unitPrice * 3;    // 59.97, exacto

Double temperature = 36.6;        // medición, no dinero

La trampa de la división entre enteros

Cuando divides dos Integer, Apex responde con un Integer: se queda con la parte entera y tira los decimales sin avisar. No redondea, corta. Es el error número uno de quien viene de fórmulas, donde 7/2 siempre da 3,5.

Apex
Integer won = 7;
Integer total = 2;

Decimal ratioA = won / total;                   // 3   ← ya se perdió antes de guardar
Decimal ratioB = Decimal.valueOf(won) / total;  // 3.5 ← uno de los dos es Decimal
Declarar el resultado como Decimal no salva nada: la división ya ocurrió entre enteros. Convertir uno de los dos antes de dividir tiene nombre (conversión de tipos) y es la sub-lección 9; por ahora quédate con el síntoma.

Boolean: el checkbox, con un matiz

Boolean guarda true o false, igual que un checkbox. El matiz es que un Boolean declarado y no asignado no vale false: vale , que es un tercer estado («no se sabe») del que hablaremos en detalle más adelante. Un checkbox en la base de datos nunca está vacío; una variable Boolean en memoria sí puede estarlo.

Apex
Boolean isRenewal = true;
Boolean hasDiscount;        // null, no false

Id: el tipo que solo existe aquí

Id guarda el identificador de un registro: esa cadena de 15 o 18 caracteres que ves en la URL cuando abres una cuenta. Podrías guardarlo en un String y funcionaría, pero al declararlo como Id la plataforma valida el formato por ti y rechaza una cadena inventada en el momento de asignarla.

LongitudDónde apareceDetalle
15 caracteresURLs, informes exportadosDistingue mayúsculas de minúsculas.
18 caracteresAPI, Apex, integracionesLos 3 últimos son un sufijo de control; no distingue mayúsculas.

La nutria: Lo mismo que ya te pasó en un VLOOKUP

A mí me pasó: crucé dos exportaciones de Salesforce en Excel con un VLOOKUP y no me cuadraban las filas. Estaba comparando un Id de 15 caracteres con uno de 18. En Apex esto se nota menos porque la plataforma te devuelve siempre 18, pero el día que recibas Ids de un sistema externo, esa diferencia volverá.

Blob: el archivo en bruto

Blob guarda datos binarios: el contenido real de un PDF, una imagen o un adjunto. No se lee ni se manipula directamente; se convierte. Blob.valueOf() pasa de texto a Blob, y toString() hace el camino de vuelta. Es el tipo que aparece cuando trabajas con ContentVersion o cuando firmas una petición a un sistema externo.

Apex
Blob fileBody = Blob.valueOf('Resumen trimestral');
String readable = fileBody.toString();