Static vs Non-Static
Lo que pertenece a cada instancia frente a lo que pertenece a la clase entera. Llevas usando métodos estáticos desde el Módulo 1 sin saberlo.
✓ En esta sub-lección
- 01Distinguir un miembro de instancia de uno estático y llamar a cada uno correctamente.
- 02Escribir una clase de utilidades con constantes y métodos estáticos.
- 03Saber cuánto vive una variable estática en Salesforce.
La nutria: ¿Te acuerdas? · Repaso de la lección 4
En un constructor con un parámetro level, ¿qué hace la línea level = level; sin this?
Todo lo que has escrito en este módulo pertenecía a una instancia: cada WorkTicket tenía sus horas, cada SupportPlan su nivel. Pero hay cosas que no son de ningún registro concreto: el tipo de IVA, una función que calcula un precio. Esas pertenecen a la clase, y se marcan con static.
La nutria: El paralelo de Admin
Ya los estabas usando
Date.today(), String.isBlank(name), Integer.valueOf('42'): en todos escribes el nombre de una clase, un punto y el método, sin ningún new delante. Son métodos estáticos. En cambio name.trim() o opp.clone() se llaman sobre una instancia concreta: son métodos de instancia.
LA CLASE · una sola vez
- static finalVAT_RATE = 0.21
- staticcreated = 1
- transacción#1
instancia 1
- hoursSpent6
Cada instancia tiene SUS horas; created y VAT_RATE existen una sola vez, en la clase, y los comparten todas. Como un campo de cada registro frente a un Custom Setting de toda la org.
Una clase de utilidades
public class PricingUtils {
public static final Decimal VAT_RATE = 0.21;
public static Decimal withVat(Decimal amount) {
return (amount ?? 0) * (1 + VAT_RATE);
}
}
// Se usa con el nombre de la clase, sin new
Decimal total = PricingUtils.withVat(1000); // 1210Un método estático no trabaja sobre ninguna instancia, así que no puede leer atributos de instancia ni usar this: no hay «registro actual». Todo lo que necesita le llega por parámetro. Al revés sí funciona: un método de instancia puede usar las constantes y métodos estáticos de su clase.
| De instancia | Estático | |
|---|---|---|
| Pertenece a… | cada objeto | la clase |
| Se llama… | ticket.cost(95) | PricingUtils.withVat(1000) |
| ¿Hace falta new? | Sí | No |
| ¿Puede usar this? | Sí | No |
Cuánto vive una variable estática
Una variable estática (static, sin final) se puede cambiar y todo el código la ve con el mismo valor… pero solo durante una . Cuando termina el guardado que la creó, desaparece; el siguiente usuario empieza de cero. Eso la hace perfecta para recordar algo mientras dura un guardado (por ejemplo, «este trigger ya se ha ejecutado») y es justo lo que usarás en el Módulo 7.
¿Constante en el código o configuración en la org?
static final VAT_RATE = 0.21 es perfecto para algo que nunca cambia sin que cambie también el código. Pero si el valor lo decide el negocio (el IVA de otro país, el descuento máximo del trimestre), meterlo en una constante significa que cada cambio necesita un desarrollador y un despliegue. Para eso la plataforma tiene Custom Metadata Types y Custom Settings: el valor vive en la org, lo cambia un Admin desde Setup y el código lo lee. La regla: static final para lo que es parte de la lógica; metadatos para lo que es parte del negocio.
La nutria: Tú mismo pedirías esto
La nutria: Static y los triggers del Módulo 7