Grundlæggende udvikling af Web3- og DApp-programmer · Lektion

Referencetyper

arrays, structs, mappings

Lektion 2 af 413 trin

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 bytes og string
  • 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.

Gratis at komme i gang

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

  1. Værdityper
  2. Referencetyper
  3. Storage kontra memory
  4. Konstanter og immutables
← Tilbage til Grundlæggende udvikling af Web3- og DApp-programmer