Visualizzazione dei risultati da 1 a 8 su 8

Discussione: this ..

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085

    this ..

    C'è qualcuno di così gentile che spiega un attimo cosa rappresenta 'this' nel seguente esempio ?
    Grazie

    codice:
      public Veicolo()                
      {                               
        this(50, 4);  // costruttore  
      }                               
                                      
      public void setVal(int val)     
      {                               
        this.val = val;               
      }

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    significa che vai a richiamare un altro costruttore della stessa classe passando i parametri indicati.
    In genere this cmq fa riferimento alla classe corrente

  3. #3

    Re: this ..

    Originariamente inviato da JANUS70
    C'è qualcuno di così gentile che spiega un attimo cosa rappresenta 'this' nel seguente esempio ?
    Grazie

    codice:
      public Veicolo()                
      {                               
        this(50, 4);  // costruttore  
      }                               
                                      
      public void setVal(int val)     
      {                               
        this.val = val;               
      }
    Nella stessa classe dovrebbe esserci un secondo costruttore tipo:

    codice:
    public Veicolo(int a, int b) {
        ....
    }
    e con l'istruzione this.(50, 4); vai a richiamare proprio tale costruttore.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    in sostanza sarebbe così .. ?

    codice:
    class Veicolo                                 
    {                                             
       private int VelocitaMassima;               
       private int NumeroPosti;                   
                                                  
       public Veicolo(int VM, int NP)             
       {                                          
         VelocitaMassima = VM;                    
         NumeroPosti = NP;                        
       }                                          
                                                  
       public Veicolo()                           
       {                                          
         this(50, 4);                             
       }                                          
                                                  
       public void setVal(int val)                
       {                                          
         this.val = val;                          
       }                                          
    }

    .. e "this.val = val;" ?

    Grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da JANUS70
    .. e "this.val = val;" ?
    la sostanza è sempre quella: this si riferisce all'istanza corrente.

    codice:
    public void setVal(int val){
    this.val = val;
    }
    in questo caso c'è una ridondanza di nomi.
    val --> si riferisce alla variabile locale (parametro) val
    this.val --> si riferisce alla variabile di classe val

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    scusa ..
    per variabile di classe si intende proprietà di classe ?
    ma se così fosse nell'esempio precedente 'val' rappresenterebbe quindi 'VelocitaMassima' o 'NumeroPosti' ..
    proprietà che vengono valorizzate dal costruttore, 'val' del metodo 'setVal' viene valorizzato
    dal paramentro passato in input ..
    che senso avrebbe fare 'this.val = val;' ?
    grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    queste sono logiche del programmatore, non posso spiegarti io (o altri) cosa ha in testa chi scrive un programma!!
    In ogni caso, per variabile di classe intendo proprietà di classe.

    codice:
    public class Veicolo{
         private int velocitaMassima;               
         private int numeroPosti; 
    
         public Veicolo(){
              this (20, 5);
         } 
         public Veicolo (int velocitaMassima, int numeroPosti){
             this.velocitaMassima = velocitaMassima; 
             this.numeroPosti = numeroPosti; 
         }
    
         public void setVelocitaMassima(int velocitaMassima){
            this.velocitaMassima = velocitaMassima; 
         }
         public void setNumeroPosti(int numeroPosti){
             this.numeroPosti = numeroPosti; 
         }
         public int getNumeroPosti(){
             return numeroPosti;
         }
         public int getVelocitaMassima(){
             return velocitaMassima;
         }
    
    }
    questo è un esempio di modellizzazione classe.
    Allora in genere per il principio di encapsulation i campi si dichiarano private e si fanno metodi accessori come get/set per poter accedere ai valori in modo controllato. Mi fermo qui che potremmo scrivere un trattato su pro e contro di questo.
    In generale (per pigrizia direi) in questi casi tendi a dare lo stesso nome della variabile al parametro. L'operatore this ti consente di distinguere lo scope del nome che usi.

    this.nome --> proprietà della classe
    nome --> parametro

    con this.velocitaMassima = velocitaMassima;
    stai dicendo

    assegna il valore che ti passo come parametro (velocitaMassima) alla variabile della classe velocitaMassima.

    se tu avessi scritto
    codice:
      public void setVelocitaMassima(int vel){
          velocitaMassima = vel;
      }
    e non avresti usato this.

    Il this nel costruttore penso ce l'hai chiaro.
    Non farti ingannare dal fatto che valorizzo una proprietà nel costruttore. Tu dai un modo per accedere dall'esterno ai tuoi campi, per evitare in questo caso di settare la velocità solo alla costruzione della classe. Nulla ti vieta, per i tuoi scopi, di no fare getter e setter (quindi di dare un solo punto di accesso), ma ripeto dipende dal programma che fai, non è il caso generale

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    mi sembra tutto abbastanza chiaro ..
    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.