Gadgeteros Laneros HWCol

para que sirve (this) en java

Tema en 'Programacion y Diseño de Software' iniciado por venedan, 21 Julio 2007.

  1. venedan

    venedan Lanero novato

    Mensajes:
    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

    CODE, HTML o PHP Insertado:
    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

    Anuncio


    saludos
  2. RicardoSpica

    RicardoSpica Lanero novato

    Mensajes:
    28
    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 ;)
  3. Tr0nad0r

    Tr0nad0r Lanero reconocido

    Mensajes:
    7,680
    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()
  4. venedan

    venedan Lanero novato

    Mensajes:
    44
    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 ??
  5. Tr0nad0r

    Tr0nad0r Lanero reconocido

    Mensajes:
    7,680
    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)
  6. venedan

    venedan Lanero novato

    Mensajes:
    44
    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 ?
  7. RicardoSpica

    RicardoSpica Lanero novato

    Mensajes:
    28
  8. Lucassss

    Lucassss Lanero novato

    Mensajes:
    12
    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.
  9. lasumo

    lasumo Lanero novato

    Mensajes:
    152
    Le recomiendo muchisimo lecturas sobre introducción orientación a objetos, la de wikipedia le puede resolver esa duda
  10. ChristMetal

    ChristMetal Lanero novato

    Mensajes:
    1
    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?
  11. GaudyG

    GaudyG Lanero novato

    Mensajes:
    7
    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?
  12. keru25

    keru25 Lanero reconocido

    Mensajes:
    43
    this es esto por ejemplo cuando lo tenemos en una clase y desimos this.lavariable queremos decir que se use la variable del objeto
  13. el_guazu

    el_guazu Lanero reconocido

    Mensajes:
    419
    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...
  14. GaudyG

    GaudyG Lanero novato

    Mensajes:
    7
    Gracias, con eso entiendo a q objeo se refiere, pero el this no sería objeto, sino mas bien... una palabra reservada.

    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?[​IMG]

    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í

    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.
  15. wrocha

    wrocha Lanero reconocido

    Mensajes:
    143
    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
  16. el_guazu

    el_guazu Lanero reconocido

    Mensajes:
    419
    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.


    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!
  17. GaudyG

    GaudyG Lanero novato

    Mensajes:
    7
    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;
    }
  18. el_guazu

    el_guazu Lanero reconocido

    Mensajes:
    419

    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...
  19. GaudyG

    GaudyG Lanero novato

    Mensajes:
    7
    Gracias, con eso creo q ya no tengo mas dudas
    [​IMG]

Compartir esta página

Certain XenForo add-ons by Waindigo™ ©2011-2014 Waindigo Enterprises Ltd.