I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

Una caratteristica chiave che rende Rust potente e più accattivante è il suo supporto per le strutture. Le strutture sono tipi di dati compositi per il raggruppamento di dati correlati. Consentono di definire tipi di dati personalizzati con campi denominati che migliorano l'organizzazione del codice e semplificano la manipolazione dei dati.

È possibile utilizzare le strutture per rappresentare vari oggetti, inclusi i tipi di dati e le configurazioni definiti dall'utente. Le strutture sono più flessibili di molte altre strutture di dati. La loro capacità di incapsulare dati correlati li rende utili poiché creano un modello più logico di oggetti del mondo reale.

Definizione di strutture e campi struttura

Definirai una struttura usando il struct parola chiave seguita da un nome per la struttura. Segui questo specificando i nomi dei campi della struttura e il loro

instagram viewer
Tipi di dati Rust dentro un paio di parentesi graffe.

structPersona {
nome: Corda,
età: u8,
è_studente: bool,
}

Questo Persona struct ha tre campi. IL nome field è una stringa, il età campo è un numero intero senza segno a 8 bit e il è_studente il campo è un booleano.

È possibile utilizzare i valori letterali struct per creare istanze di struct dopo la definizione di struct. I letterali struct specificano i valori dei campi di uno struct.

permettere persona = Persona {
nome: Corda::da("John"),
età: 27,
è_studente: VERO,
};

IL persona variabile è un'istanza di Persona struct, creato con un letterale struct. Questo valore letterale istanzia tutti i campi della struttura con i valori del tipo di dati corrispondente.

Uso dei costruttori per creare strutture

È inoltre possibile utilizzare una funzione di costruzione per creare un'istanza di uno struct.

imp Persona {
// Definisci una funzione di costruzione `new` che accetta `name`, `age` e
// parametri `è_studente`
fnnuovo(nome: Corda, età: u8, è_studente: bool) -> Se stesso {
// Crea una nuova istanza di `Person` struct e inizializza i suoi campi
// con i valori forniti
Se stesso {
nome,
età,
è_studente,
}
}
}

// Chiama la funzione di costruzione `new` della struttura `Person` e assegna il file
// istanza risultante a `persona`
permettere persona = Persona:: nuovo(Corda::da("John"), 27, VERO);

Il programma sopra definisce un costruttore per il Persona struct con il imp parola chiave. IL nuovo Il costruttore accetta i campi della struttura come argomenti e restituisce una nuova istanza della struttura con i valori inizializzati.

Puoi creare un Persona esempio con il nuovo costruttore, passandogli gli argomenti appropriati.

Accesso e modifica dei campi della struttura

È possibile accedere e modificare i campi struct utilizzando una notazione punto. Devi semplicemente usare il punto (.) seguito dal nome del campo per accedere o modificarne il valore.

// dichiara una struttura Person
structPersona {
nome: Corda,
età: u8,
è_studente: bool,
}

fnprincipale() {
// istanzia una struttura
permetteremut persona = Persona {
nome: Corda::da("John"),
età: 27,
è_studente: VERO,
};

// stampa i campi nome ed età della struttura
stampa!("Nome: {}", persona.nome);
stampa!("Età: {}", persona.età);

// modifica il campo is_student
person.is_student = falso;

stampa!("È uno studente: {}", persona.è_studente);
}

Il programma crea una struttura, istanzia la struttura, stampa il file nome, E età campi e modifica il file è_studente campo prima di stampare il campo.

Dichiarare i metodi per le strutture

A differenza di strutture in C, puoi definire metodi su struct Rust che operano su un'istanza. I metodi sono funzioni che accettano un riferimento a una struttura per l'accesso e la modifica. Puoi anche usare la notazione punto per chiamare i metodi di uno struct e accedere alle loro funzionalità.

Ecco come puoi dichiarare metodi per struct e utilizzare tali metodi per eseguire operazioni:

structPersona {
nome: Corda,
età: u8,
è_studente: bool,
}

imp Persona {
fndi Ciao(&se stesso) {
stampa!("Ciao, mi chiamo {} e ho {} anni.", se stesso.nome,
se stesso.età);
}

fnbuon_compleanno(&mutse stesso) {
se stesso.età += 1;
}
}

fnprincipale() {
permetteremut persona = Persona {
nome: Corda::da("John"),
età: 27,
è_studente: VERO,
};

person.say_hello();

persona.buon_compleanno();

stampa!("Nuova era: {}", persona.età);
}

Il programma definisce due metodi per il Persona struct. IL di Ciao metodo prende un riferimento a se stesso e stampa un saluto che include il nome e l'età della persona. IL buon_compleanno metodo prende un riferimento mutabile a se stesso e incrementa l'età della persona.

Il modello di proprietà di Rust ottimizza la gestione della memoria

Le strutture sono strutture di dati versatili, che agiscono come una sorta di classe minima equivalente.

Come con altre strutture dati di Rust, dovresti seguire le regole di proprietà di Rust quando lavori con le variabili struct. Il modello di proprietà ti assicura di gestire la memoria in modo efficiente nei tuoi programmi, prevenendo problemi comuni come puntatori nulli e penzolanti.