Referencetyper
arrays, structs, mappings
Referencetyper er en gratis Grundlæggende udvikling af Web3- og DApp-programmer-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Grundlæggende udvikling af Web3- og DApp-programmer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Grundlæggende udvikling af Web3- og DApp-programmer-kurset indeholder 4 lektioner i alt.
Hvad er referencetyper?
Referencetyper beskriver data, der er for store til at passe i én slot, så variabler henviser til en placering i stedet for at indeholde dataene direkte.
De tre referencetyper er arrays, structs og mappings. Når du bruger dem, skal du tænke over deres dataplacering: storage, memory eller calldata.
Arrays med fast størrelse
Et array med fast størrelse har en længde, der fastsættes ved kompilering, og kan ikke vokse. Typen uint[3] indeholder altid præcis tre værdier.
Brug .length til at læse størrelsen. Adgang uden for grænserne medfører revert.
<code>uint[3] public scores = [10, 20, 30];
function first() public view returns (uint) {
return scores[0];
}</code>Dynamiske arrays
Et dynamisk array kan vokse og blive mindre. Deklarer det som uint[]. I storage kan du bruge push til at tilføje et element og pop til at fjerne det sidste element.
<code>uint[] public nums;
function add(uint n) public {
nums.push(n);
}
function removeLast() public {
nums.pop();
}</code>Bytes og string
bytes er et dynamisk byte-array, og string er dets tekstmæssige fætter i UTF-8. Begge er referencetyper.
Bemærk: string har hverken .length eller indeksering. Konvertér først til bytes for at undersøge de rå bytes.
<code>string public name = 'Alice';
function nameLength() public view returns (uint) {
return bytes(name).length;
}</code>Definition af structs
En struct grupperer relaterede variabler i én brugerdefineret type. Den er ideel til at modellere entiteter som brugere, ordrer eller tokens.
<code>struct User {
string name;
uint256 balance;
bool active;
}</code>Brug af structs
Du kan oprette en struct med positions- eller navngivne argumenter og gemme den. Når du læser en struct fra storage, får du en reference, som du kan ændre.
<code>User public owner;
function setup(string memory n) public {
owner = User({ name: n, balance: 0, active: true });
}</code>Mappings
En mapping er et lager med nøgler og værdier, ligesom en hash-tabel. Det er en af de mest brugte strukturer i smart contracts, f.eks. til at holde styr på saldi pr. adresse.
Nøgler gemmes ikke, så du kan hverken gennemløbe en mapping eller hente dens længde.
<code>mapping(address => uint256) public balances;
function deposit() public payable {
balances[msg.sender] += msg.value;
}</code>Indlejrede mappings
Mappings kan indlejres for at modellere relationer, f.eks. tilladelser, hvor én ejer giver flere forbrugere tilladelse.
Dette mønster er kernen i ERC-20's tilladelsessystem.
<code>mapping(address => mapping(address => uint256)) public allowance;
function approve(address spender, uint256 amount) public {
allowance[msg.sender][spender] = amount;
}</code>Kombination af structs og mappings
Et effektivt mønster er at knytte nøgler i en mapping til structs. Det lader dig gemme detaljerede poster med en id eller adresse som nøgle.
<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>Arrays af structs
Du kan gemme et dynamisk array af structs, når du har brug for ordnede poster, der kan gennemløbes. Kombinér det med en mapping for hurtige opslag.
<code>struct Item { string name; uint256 price; }
Item[] public items;
function addItem(string memory n, uint256 p) public {
items.push(Item(n, p));
}</code>Reference-semantik
Når du tildeler en storage-referencetype til en lokal storage-variabel, peger begge på de samme data. Ændringer gennem den ene er synlige gennem den anden.
En memory-kopi er derimod uafhængig.
<code>uint[] public data;
function tweak() public {
uint[] storage ref = data; // alias
ref.push(42); // also changes data
}</code>Hurtig kontrol
Test din forståelse af referencetyper.
Opsummering
Du har udforsket Soliditys referencetyper:
- Arrays (faste og dynamiske) samt
bytesogstring - Structs til gruppering af relaterede felter
- Mappings og indlejrede mappings til lagring af nøgler og værdier
- Effektive kombinationer som mapping-til-struct og arrays-af-structs
Referencetyper deler placeringer, så vær altid bevidst om forskellen mellem storage og memory.
Lær Grundlæggende udvikling af Web3- og DApp-programmer med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 29
- Lektioner
- 105
Ofte stillede spørgsmål
Er lektionen “Referencetyper” gratis?
Ja — alle 3 lektioner i læringssporet Grundlæggende udvikling af Web3- og DApp-programmer, inklusive “Referencetyper”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Grundlæggende udvikling af Web3- og DApp-programmer-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Referencetyper”?
arrays, structs, mappings Du øver dig i Grundlæggende udvikling af Web3- og DApp-programmer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Grundlæggende udvikling af Web3- og DApp-programmer?
Der kræves ingen tidligere erfaring. Grundlæggende udvikling af Web3- og DApp-programmer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Referencetyper”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Grundlæggende udvikling af Web3- og DApp-programmer-lektion?
Ja. Alle Grundlæggende udvikling af Web3- og DApp-programmer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Værdityper
- Referencetyper
- Storage kontra memory
- Konstanter og immutables