Referansetyper
arrays, structs og mappings
Referansetyper er en gratis leksjon i Grunnleggende om Web3- og DApp-utvikling på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Grunnleggende om Web3- og DApp-utvikling, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Grunnleggende om Web3- og DApp-utvikling inneholder totalt 4 leksjoner.
Hva er referansetyper?
Referansetyper beskriver data som er for store til å få plass i én slot, så variabler viser til en plassering i stedet for å inneholde dataene direkte.
De tre referansetypene er arrayer, strukturer og mappinger. Når De bruker dem, må De ta hensyn til dataplaceringen deres: storage, memory eller calldata.
Arrayer med fast størrelse
En array med fast størrelse har en lengde som fastsettes ved kompilering, og kan ikke vokse. Typen uint[3] inneholder alltid nøyaktig tre verdier.
Bruk .length for å lese størrelsen. Tilgang utenfor grensene fører til revert.
<code>uint[3] public scores = [10, 20, 30];
function first() public view returns (uint) {
return scores[0];
}</code>Dynamiske arrayer
En dynamisk array kan vokse og krympe. Deklarer den som uint[]. I storage kan De bruke push for å legge til et element og pop for å fjerne det siste elementet.
<code>uint[] public nums;
function add(uint n) public {
nums.push(n);
}
function removeLast() public {
nums.pop();
}</code>Bytes og string
bytes er en byte-array med dynamisk størrelse, og string er tekstvarianten i UTF-8. Begge er referansetyper.
Merk: string har ingen .length eller indeksering. Konverter først til bytes for å undersøke råbytene.
<code>string public name = 'Alice';
function nameLength() public view returns (uint) {
return bytes(name).length;
}</code>Definere strukturer
En struct samler relaterte variabler i én egendefinert type. Den egner seg godt til å modellere enheter som brukere, bestillinger eller tokener.
<code>struct User {
string name;
uint256 balance;
bool active;
}</code>Bruke strukturer
De kan opprette en struct med posisjonsbaserte eller navngitte argumenter og lagre den. Når De leser en struct fra storage, får De en referanse som De kan endre.
<code>User public owner;
function setup(string memory n) public {
owner = User({ name: n, balance: 0, active: true });
}</code>Mappinger
En mapping er et nøkkel-verdi-lager, omtrent som en hashtabell. Det er en av de mest brukte strukturene i smartkontrakter, for eksempel for å holde oversikt over saldoer per adresse.
Nøkler lagres ikke, så De kan ikke iterere over en mapping eller hente lengden dens.
<code>mapping(address => uint256) public balances;
function deposit() public payable {
balances[msg.sender] += msg.value;
}</code>Nestede mappinger
Mappinger kan nøstes for å modellere relasjoner, for eksempel tillatelser der én eier tillater flere brukere å bruke midler.
Dette mønsteret er kjernen i ERC-20-tillatelsessystemet.
<code>mapping(address => mapping(address => uint256)) public allowance;
function approve(address spender, uint256 amount) public {
allowance[msg.sender][spender] = amount;
}</code>Kombinere strukturer og mappinger
Et kraftig mønster er å knytte nøkler i en mapping til strukturer. Da kan De lagre detaljerte poster med en id eller adresse som nøkkel.
<code>struct Order {
uint256 amount;
bool paid;
}
mapping(uint256 => Order) public orders;
function createOrder(uint256 id, uint256 amt) public {
orders[id] = Order({ amount: amt, paid: false });
}</code>Arrayer med strukturer
De kan bruke en dynamisk array med strukturer når De trenger ordnede poster som kan itereres over. Kombiner den med en mapping for raske oppslag.
<code>struct Item { string name; uint256 price; }
Item[] public items;
function addItem(string memory n, uint256 p) public {
items.push(Item(n, p));
}</code>Referansesemantikk
Når De tilordner en referansetype fra storage til en lokal variabel av typen storage, peker begge på de samme dataene. Endringer gjennom den ene er synlige gjennom den andre.
En kopi i memory er derimot uavhengig.
<code>uint[] public data;
function tweak() public {
uint[] storage ref = data; // alias
ref.push(42); // also changes data
}</code>Kort kontroll
Test forståelsen Deres av referansetyper.
Oppsummering
De har utforsket Soliditys referansetyper:
- Arrayer (faste og dynamiske), samt
bytesogstring - Strukturer for å samle relaterte felt
- Mappinger og nøstede mappinger for nøkkel-verdi-lagring
- Kraftige kombinasjoner som mapping-til-struct og arrayer-av-structer
Referansetyper deler plasseringer, så vær alltid bevisst på forskjellen mellom storage og memory.
Lær deg Grunnleggende om Web3- og DApp-utvikling med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 29
- Leksjoner
- 105
Ofte stilte spørsmål
Er leksjonen «Referansetyper» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende om Web3- og DApp-utvikling, inkludert «Referansetyper», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Grunnleggende om Web3- og DApp-utvikling inneholder totalt 4 leksjoner.
Hva lærer jeg i «Referansetyper»?
arrays, structs og mappings Du øver på Grunnleggende om Web3- og DApp-utvikling med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Grunnleggende om Web3- og DApp-utvikling?
Ingen tidligere erfaring er nødvendig. Grunnleggende om Web3- og DApp-utvikling på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Referansetyper»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Grunnleggende om Web3- og DApp-utvikling-leksjonen?
Ja. Alle Grunnleggende om Web3- og DApp-utvikling-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.