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 esta sub-lección
- 01Elegir entre Integer, Long, Decimal y Double a partir del dato, no por costumbre.
- 02Entender por qué una división entre enteros pierde los decimales.
- 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.
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.
Integer daysOpen = 47;
Long externalRecordId = 9000000000L; // la L es obligatoriaDecimal: 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.
Decimal unitPrice = 19.99;
Decimal taxRate = 0.21;
Decimal total = unitPrice * 3; // 59.97, exacto
Double temperature = 36.6; // medición, no dineroLa 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.
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 DecimalBoolean: 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.
Boolean isRenewal = true;
Boolean hasDiscount; // null, no falseId: 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.
| Longitud | Dónde aparece | Detalle |
|---|---|---|
| 15 caracteres | URLs, informes exportados | Distingue mayúsculas de minúsculas. |
| 18 caracteres | API, Apex, integraciones | Los 3 últimos son un sufijo de control; no distingue mayúsculas. |
La nutria: Lo mismo que ya te pasó en un VLOOKUP
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.
Blob fileBody = Blob.valueOf('Resumen trimestral');
String readable = fileBody.toString();