para que sirve (this) en java

venedan

Lanero Regular
26 Abr 2007
44
bueno saludos he aqui de nuevo ;D y les queria hacer otra pregunta cual es la funcion de el this porque lo que tengo entendido es para evitar ambiguedades pero no estoy muy seguro y con respecto al siguiente codigo que es lo que retornaria

Código:
class  triangulo {
private double base, altura;
public  triangulo datos(double base, double altura) {
This.base    = base ;
This.altura  = altura ;
return this;
	}


public triangulo visualizar( ) {
	System.out.println(“Base igual: “+base);
	System.out.println(“Altura igual: “+altura);
	return this;
}
}

y lo que no entiendo es que si su funcion es evitar ambiguedades porque cuando escribo

base = base;
altura = altura;

no me da ningun tipo de error y yo pensaba que me iba a dar un error en compilacion y que para poder hacer eso necesitaria usar el operador this pero veo que no y me gustaria que alguien me aclarara la duda gracias

saludos
 
Hola!!

el this es un apuntador al objeto mismo donde este.
y si sirve para evitar ambiguedades por que en el metodo construtor que usas
sirve para diferenciar el atributo base de la clase del atributo base que entra como parametro.
public triangulo datos(double base, double altura) {
This.base = base ;
This.altura = altura ;

ademas es una excelente practica de programacion ;)
 
en tu caso this.base y this.altura se refieren a los atributos privados de la clase, y el base y altura sin this son variables locales que solo existen en public triangulo datos()
 
a ver me gustaria que me lo explicasen como a un niño de 5 años porque aun no lo entiendo y en la primera parte

This.base = base ;
This.altura = altura ;
return this;

para que esta return this; que es exactamente lo que este retornaria ??
 
El this en ese caso te sirve para diferenciar las dos variables que se llaman igual, una forma de evitar su uso seria:

private double base, altura;
public triangulo datos(double b, double a) {
base = b;
altura = a;
return this;
}

El return this es necesario pq se supone que es un metodo que retorna al mismo objeto (triangulo) por eso el this (este)
 
dios mio creo que tengo problemas de aprendizajes a ver

"El this en ese caso te sirve para diferenciar las dos variables que se llaman igual"

ok pero que retorna this this.base = base esta porque existe una variable del tipo privada con el nombre base y un constructor con el mismo nombre base igualmente con altura pero ahora sigo sin entenden que respuesta me daria ese return this; que esta solo

y otra cosa en ese ejemplo que colocastes me confundio mas porque cuando los nombres de las variables son diferentes a los de los constructores pensaba que no hacia falta el return this pero y tal caso para que esta el this ?
 
Venedan,
el this siempre hace referencia al objeto mismo al que se le mandó el mensaje en el que está escrito.
En el código que pusiste, lo que hace es setear los datos que le mandaste como parámetro (la base y la altura) al objeto que se esta creando. Algo así como:

this.base = base "pongo en mi (this) variable base el valor que me dieron en el parámetro base"

El return this, es porque se espera que después de la ejecución de ese método, se retorne la nueva instancia que se acaba de crear.
Seguramente el llamado será algo así como:

unaVariableTipoTriangulo = new Triangulo(2,4);

Lo que te confunde en el uso del this en estos casos es que estas tratando con constructores.

Decime si no se entendió, y buscamos un buen ejemplo.

Saludos,
Lucas.
 
venedan dijo:
dios mio creo que tengo problemas de aprendizajes a ver

"El this en ese caso te sirve para diferenciar las dos variables que se llaman igual"

ok pero que retorna this this.base = base esta porque existe una variable del tipo privada con el nombre base y un constructor con el mismo nombre base igualmente con altura pero ahora sigo sin entenden que respuesta me daria ese return this; que esta solo

y otra cosa en ese ejemplo que colocastes me confundio mas porque cuando los nombres de las variables son diferentes a los de los constructores pensaba que no hacia falta el return this pero y tal caso para que esta el this ?

Le recomiendo muchisimo lecturas sobre introducción orientación a objetos, la de wikipedia le puede resolver esa duda
 
bueno saludos he aqui de nuevo ;D y les queria hacer otra pregunta cual es la funcion de el this porque lo que tengo entendido es para evitar ambiguedades pero no estoy muy seguro y con respecto al siguiente codigo que es lo que retornaria

Código:
class  triangulo {
private double base, altura;
public  triangulo datos(double base, double altura) {
This.base    = base ;
This.altura  = altura ;
return this;
	}


public triangulo visualizar( ) {
	System.out.println(“Base igual: “+base);
	System.out.println(“Altura igual: “+altura);
	return this;
}
}

y lo que no entiendo es que si su funcion es evitar ambiguedades porque cuando escribo

base = base;
altura = altura;

no me da ningun tipo de error y yo pensaba que me iba a dar un error en compilacion y que para poder hacer eso necesitaria usar el operador this pero veo que no y me gustaria que alguien me aclarara la duda gracias

saludos

También soy novato, en los métodos public triangulo datos y public triangulo visualizar, son métodos que devuelven un objeto triangulo?? , porque si pongo public void datos y public void visualizar tambièn funciona, alguien me explica?
 
Pero en todo caso, tambien tengo conflictos con entender el This, entiendo el uso clasico de This.variable, pero al decir return this, a que es lo mismo decir, q referencia da?
 
this es esto por ejemplo cuando lo tenemos en una clase y desimos this.lavariable queremos decir que se use la variable del objeto
 
El objeto this es apuntador a un objeto, ¿que objeto? el mismo que ha llamado a la
función...

Lo que hace al decir "return this", es regresar la dirección del objeto triangulo que ha llamado
a la función datos...


Cuando pone return this a una función que regresa void, simplemente ignora ese dato, creo
que es por eso que le funciona... aunque la verdad imagino que es bronca del compilador si
se lo marca como warning o como error...
 
El objeto this es apuntador a un objeto, ¿que objeto? el mismo que ha llamado a la función...
Gracias, con eso entiendo a q objeo se refiere, pero el this no sería objeto, sino mas bien... una palabra reservada.

Lo que hace al decir "return this", es regresar la dirección del objeto triangulo que ha llamado a la función datos...
Aun me complica entenderlo, si NO existiera la palabra this... en lugar de decir "return this", ¿que debería decir en esa linea de código?http://javascript<b></b>:void(0);
dNYyWabFAAAAAElFTkSuQmCC


El objeto this es apuntador a un objeto, ¿que objeto? el mismo que ha llamado a lafunción...
Gracias, ahora se entiende a q objeto está haciendo referencia, pero this no es un objeto, vendría siendo un operador de palabra reservada o algo así

Lo que hace al decir "return this", es regresar la dirección del objeto triangulo que ha llamado a la función datos...
Sigo sin entender esa parte, tengo entendido que la palabra this no es obligatorio, es opcional. Quiero saber q palabra debería ir ahí si no escribieramos This.
 
Sigo sin entender esa parte, tengo entendido que la palabra this no es obligatorio, es opcional. Quiero saber q palabra debería ir ahí si no escribieramos This.

amigo, realmente es que con el ejemplo no es fácil de explicar el this, no es común que se utilice como parte de un return y no hay equivalencia que reemplace la forma en la que está el ejemplo.

sin embargo, en la mayoría de los casos retornar this es redundante e innecesario ya que quien recibe el resultado del llamado al método ya tiene la referencia (la necesita para invocar el método),

haga de cuenta que yo le envio un sms a usted, y usted me responde el sms al final indicandome y mi número de célular es... obviamente si yo le envíe un mensaje es porque ya tenía su número de celular no necesito que me lo devuelva.

como dijeron antes, el principal uso de this es para resolver ambiguedades en variables que tengan el mismo nombre pero que unas son de un ámbito diferente (atributos vs parámetros de métodos)

Class A{

int variableA;//1

public void metodo(int variableA)//2
{
int x= variableA; //toma el valor del parámetro de entrada (2)
x = this.variableA;//toma el valor del atributo del objeto (1)
}
}


espero haberme hecho entender.

saludos
 
Gracias, ahora se entiende a q objeto está haciendo referencia, pero this no es un objeto, vendría siendo un operador de palabra reservada o algo así

Es un apuntador, si está viendo clases de programación imagino que le enseñarán
sobre apuntadores. Un apuntador es una variable que guarda la dirección de memoria
de la variable a la que apunta.


Sigo sin entender esa parte, tengo entendido que la palabra this no es obligatorio, es opcional. Quiero saber q palabra debería ir ahí si no escribieramos This.

return 0x0023FEA8; // si 0x0023FEA8 fuera la dirección del objeto apuntado...


Recuerde que las variables se almacenan en memoria, y la dirección en la que están
estas variables es lo que se guarda en un apuntador...

Saludos!
 
Gracias el_guazu, recién me estaba dando cuenta de un detalle y tiene sentido si me dices q tiene referencia al objeto que instanció el método. This hace referencia al objeto, pero en el caso del 1º ejemplo, entonces... ¿lo que retorna es el mismo objeto triangulo? aun si no ha hecho ninguna operación mas que imprimir??

me refiero a este ejemplo:

PHP:
public triangulo visualizar( ) {
     System.out.println(“Base igual: “+base);     
     System.out.println(“Altura igual: “+altura);     
     return this;
}
 
¿lo que retorna es el mismo objeto triangulo? aun si no ha hecho ninguna operación mas que imprimir??
me refiero a este ejemplo:

PHP:
public triangulo visualizar( ) {
     System.out.println(“Base igual: “+base);     
     System.out.println(“Altura igual: “+altura);     
     return this;
}


Sí, retorna la dirección donde está guardado el objeto tríangulo...

Ahora, lo que me dice es correcto, es innecesario regresar el this en esta función
dado que lo único que se hace es imprimir y si nos ponemos a analizar ni siquiera
en la otra función; pero como sobre este código estabamos explicando, pues... :p

En lugar de retornar "triangulo" se puede utilizar el void, que mencionaron en un
comentario previo...

Saludos...
 

Los últimos temas