Self in Swift

di Anonimizzato15813 il
4 risposte
Buonasera, sono nuovo nella programmazione in swift, e studiando le classi ho visto che questo linguaggio utilizza l'istruzione self, della quale però non ne ho capito il significato, questo è il sorgente :
class cane {
    var nome : String
    var altezza : Int
    init(nome: String , altezza :Int ){
        self.nome = nome;
        self.altezza = altezza;
    }

}
Potreste piegarmi per piacere che significa questa istruzione, poiché ho cercato sul web ma non ho trovato una risposta soddisfacente.

4 Risposte

  • Ciao, il "self" si riferisce a se stesso, l'oggetto "cane" che verrà istanziato. Equivale al "this" di Java.
    È un concetto magari un po ostico da comprendere all'inizio, ma è una cosa facile.

    Nello specifico quel codice dice che ogni oggetto di tipo "cane" ha 2 attributi, nome e altezza. Il "self" in questo caso è necessario per disambiguare le variabili locali e di istanza, che hanno lo stesso nome.
  • Grazie mille!
    Io comunque non ho capito a cosa serva mettere self.nome = nome , se , quando si va a istanziare un oggetto attraverso l' inizializzatore init si specificano già le proprietà dell'oggetto in questione.
    Non capisco proprio a cosa servano sia l'istruzione self che le istruzioni di per se nel corpo del costruttore.
  • Con l'istruzione "var nome : String" dici semplicemente che la classe "cane" ha una variabile chiamata "nome" di tipo String. A questo punto sapresti dire quale sia il suo valore? No, perché tecnicamente non ha nessun valore assegnato. Infatti se elimini il costruttore (la funzione init) dovrebbe uscirti un errore in compilazione che ti avvisa di questo problema.

    All'interno del costruttore (i metodi "init") specifichi come creare l'oggetto. In questo caso particolare dici che nella variabile d'istanza "nome" ci va il contenuto del parametro chiamato "nome".

    In generale potresti anche omettere il "self" nel caso in cui le variabili abbiano nomi diversi. Ad esempio:
    
    class Punto {
        var x: Int
        
        init(coordinata: Int) {
            x = coordinata
        }
    }
    
    Implicitamente, questo sarebbe identico a "self.x = coordinata".

    Nel caso in cui le variabili abbiano lo stesso nome, però, il "self" è necessario per disambiguare la variabile locale (cioè il parametro della funzione init) dalla variabile d'istanza (cioè la variabile che contiene la proprietà dell'oggetto).
  • Grazie mille! risposta veramente esaustiva
Devi accedere o registrarti per scrivere nel forum
4 risposte