Referenstyper
arrays, structs, mappings
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
bytesochstring - 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.
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.