Grunderna i Web3- och DApp-utveckling · Lektion

Referenstyper

arrays, structs, mappings

Lektion 2 av 413 steg

Referenstyper är en gratis lektion i Grunderna i Web3- och DApp-utveckling på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Grunderna i Web3- och DApp-utveckling, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Grunderna i Web3- och DApp-utveckling innehåller totalt 4 lektioner.

Vad är referenstyper?

Referenstyper beskriver data som är för stor för att rymmas i en slot, så variablerna hänvisar till en plats i stället för att innehålla datan direkt.

De tre referenstyperna är arrayer, structs och mappings. När ni använder dem måste ni ta hänsyn till deras dataplats: storage, memory eller calldata.

Arrayer med fast storlek

En array med fast storlek har en längd som bestäms vid kompilering och kan inte växa. Typen uint[3] innehåller alltid exakt tre värden.

Använd .length för att läsa storleken. Åtkomst utanför gränserna avbryts.

<code>uint[3] public scores = [10, 20, 30];

function first() public view returns (uint) {
    return scores[0];
}</code>

Dynamiska arrayer

En dynamisk array kan växa och krympa. Deklarera den som uint[]. I storage kan ni använda push för att lägga till ett element sist och pop för att ta bort det sista elementet.

<code>uint[] public nums;

function add(uint n) public {
    nums.push(n);
}

function removeLast() public {
    nums.pop();
}</code>

Bytes och string

bytes är en bytearray med dynamisk storlek och string är dess UTF-8-baserade textmotsvarighet. Båda är referenstyper.

Observera: string har varken .length eller indexering. Konvertera först till bytes för att granska råa byte.

<code>string public name = 'Alice';

function nameLength() public view returns (uint) {
    return bytes(name).length;
}</code>

Definiera structs

En struct grupperar relaterade variabler i en anpassad typ. Den passar utmärkt för att modellera entiteter som användare, order eller tokens.

<code>struct User {
    string name;
    uint256 balance;
    bool active;
}</code>

Använda structs

Ni kan skapa en struct med positionsbaserade eller namngivna argument och lagra den. När ni läser en struct från storage får ni en referens som ni kan ändra.

<code>User public owner;

function setup(string memory n) public {
    owner = User({ name: n, balance: 0, active: true });
}</code>

Mappings

En mapping är en nyckel-värde-lagring, ungefär som en hashtabell. Det är en av de mest använda datastrukturerna i smarta kontrakt, till exempel för att spåra saldon per adress.

Nycklarna lagras inte, så ni kan inte iterera över en mapping eller hämta dess längd.

<code>mapping(address => uint256) public balances;

function deposit() public payable {
    balances[msg.sender] += msg.value;
}</code>

Nästlade mappings

Mappings kan nästlas för att modellera relationer, till exempel tilldelningar där en ägare godkänner flera användare.

Detta mönster utgör kärnan i ERC-20:s allowance-system.

<code>mapping(address => mapping(address => uint256)) public allowance;

function approve(address spender, uint256 amount) public {
    allowance[msg.sender][spender] = amount;
}</code>

Kombinera structs och mappings

Ett kraftfullt mönster är att mappa nycklar till structs. På så sätt kan ni lagra utförliga poster med ett id eller en adress som nyckel.

<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 av structs

Ni kan använda en dynamisk array av structs när ni behöver ordnade poster som går att iterera över. Kombinera den med en mapping för snabb uppslagning.

<code>struct Item { string name; uint256 price; }
Item[] public items;

function addItem(string memory n, uint256 p) public {
    items.push(Item(n, p));
}</code>

Referenssemantik

När ni tilldelar en referenstyp i storage till en lokal storage-variabel pekar båda på samma data. Ändringar via den ena syns via den andra.

En kopia i memory är däremot självständig.

<code>uint[] public data;

function tweak() public {
    uint[] storage ref = data; // alias
    ref.push(42);              // also changes data
}</code>

Snabbtest

Testa er förståelse av referenstyper.

Sammanfattning

Ni har utforskat Soliditys referenstyper:

  • Arrayer (fasta och dynamiska), samt bytes och string
  • Structs för att gruppera relaterade fält
  • Mappings och nästlade mappings för nyckel-värde-lagring
  • Kraftfulla kombinationer som mappings till structs och arrayer av structs

Referenstyper delar platser, så var alltid noga med skillnaden mellan storage och memory.

Gratis att börja

Lär dig Grunderna i Web3- och DApp-utveckling med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
29
Lektioner
105

Vanliga frågor

Är lektionen ”Referenstyper” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Grunderna i Web3- och DApp-utveckling, inklusive ”Referenstyper”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Grunderna i Web3- och DApp-utveckling innehåller totalt 4 lektioner.

Vad lär jag mig i ”Referenstyper”?

arrays, structs, mappings Ni övar på Grunderna i Web3- och DApp-utveckling med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Grunderna i Web3- och DApp-utveckling?

Du behöver inga förkunskaper. Utbildningen i Grunderna i Web3- och DApp-utveckling på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Referenstyper”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Grunderna i Web3- och DApp-utveckling-lektionen?

Ja. Varje Grunderna i Web3- och DApp-utveckling-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Värdetyper
  2. Referenstyper
  3. Storage jämfört med memory
  4. Konstanter och oföränderliga värden
← Tillbaka till Grunderna i Web3- och DApp-utveckling