this: el objeto hablando de sí mismo
Dentro de una clase, this es «esta instancia». Sirve para distinguir un atributo de un parámetro con el mismo nombre y para que un constructor llame a otro.
✓ En esta sub-lección
- 01Usar this.atributo cuando un parámetro se llama igual que un atributo.
- 02Encadenar constructores con this(…) para no repetir código.
- 03Reconocer el error silencioso de asignar un parámetro a sí mismo.
La nutria: ¿Te acuerdas? · Repaso de la lección 3
¿Qué tipo de retorno lleva un constructor?
Dentro de un método, a veces necesitas hablar de la instancia sobre la que se está ejecutando: «mi nivel», «mis horas». Apex tiene una palabra para eso: this. No es un concepto nuevo, solo le pone nombre a algo que ya estabas haciendo.
La nutria: El paralelo de Admin
Uso 1: cuando el parámetro se llama igual
En la lección anterior el parámetro se llamaba planLevel para no chocar con el atributo level. Lo natural es llamarlos igual, pero entonces dentro del constructor level significa el parámetro, porque es lo más cercano: el más interior gana. this.level deja claro que hablas del atributo de la instancia.
public class SupportPlan {
public String level;
public SupportPlan(String level) {
level = level; // ❌ asigna el parámetro a sí mismo: el atributo sigue null
this.level = level; // ✅ atributo de esta instancia = parámetro
}
}public SupportPlan(String level) {
level = level;
}EL PARÁMETRO level
- valor'Gold'
- vivesolo dentro del constructor
EL ATRIBUTO this.level
- valornull
- vivelo que viva el objeto
Dentro del constructor, level a secas es el parámetro, que tapa al atributo. level = level; copia el parámetro en sí mismo, compila sin avisar… y el atributo sigue en null.
Uso 2: un constructor que llama a otro
La lección anterior terminó con dos constructores que repetían tres líneas. this(…), escrito como primera línea de un constructor, llama a otro constructor de la misma clase. Así la lógica vive en un único sitio y los demás constructores solo aportan sus valores por defecto.
public class SupportPlan {
public String level;
public Date startDate;
public List<String> contacts;
public SupportPlan(String level) {
this.level = level;
this.startDate = Date.today();
this.contacts = new List<String>();
}
public SupportPlan() {
this('Basic'); // «hazlo como el otro, con nivel Basic»
}
}this como argumento: el objeto se presenta a otro
this no solo sirve para distinguir un atributo de un parámetro. También puedes pasarlo como argumento, cuando un objeto necesita entregarse a sí mismo a otro código: «apúntame en el registro de auditoría», «añádeme a esta lista». Y un método puede devolver this al terminar, para que se puedan encadenar llamadas sobre el mismo objeto, como encadenabas métodos de String en el Módulo 1. Lo verás mucho en el Módulo 10, en las clases que fabrican datos de prueba.
public class SupportPlan {
public List<String> contacts = new List<String>();
public SupportPlan addContact(String email) {
this.contacts.add(email);
return this; // devuelve el mismo objeto…
}
}
// …así que las llamadas se encadenan
SupportPlan plan = new SupportPlan('Gold')
.addContact('ana@northwind.com')
.addContact('luis@northwind.com');La nutria: Pasar $Record a un subflow