Web3:n ja DApp-sovellusten kehityksen perusteet · Oppitunti

Viitetyypit

arrays, structs, mappings.

Oppitunti 2/413 vaihetta

Viitetyypit on ilmainen Web3:n ja DApp-sovellusten kehityksen perusteet-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Web3:n ja DApp-sovellusten kehityksen perusteet-kurssilla on yhteensä 4 oppituntia.

Mitä viitetyypit ovat?

Viitetyypit kuvaavat dataa, joka on liian suurta mahtuakseen yhteen slottiin. Siksi muuttujat viittaavat sijaintiin sen sijaan, että ne sisältäisivät datan suoraan.

Kolme viitetyyppiä ovat taulukot, struct-rakenteet ja mapping-rakenteet. Niitä käytettäessä on huomioitava datan sijainti: storage, memory tai calldata.

Kiinteän kokoiset taulukot

Kiinteän kokoisen taulukon pituus asetetaan käännösaikana, eikä taulukko voi kasvaa. Tyyppi uint[3] sisältää aina täsmälleen kolme arvoa.

Lukekaa koko käyttämällä .length-ominaisuutta. Rajojen ulkopuolinen käyttö kumoutuu.

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

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

Dynaamiset taulukot

Dynaaminen taulukko voi kasvaa ja pienentyä. Ilmoittakaa se muodossa uint[]. Storagessa voitte lisätä alkion käyttämällä push-operaatiota ja poistaa viimeisen alkion käyttämällä pop-operaatiota.

<code>uint[] public nums;

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

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

Bytes ja string

bytes on dynaamisen kokoinen tavutaulukko, ja string on sen UTF-8-tekstiä käsittelevä vastine. Molemmat ovat viitetyyppejä.

Huomaa: string-tyypillä ei ole .length-ominaisuutta eikä indeksointia. Raakadatun tarkastelemiseksi muunna se ensin bytes-tyypiksi.

<code>string public name = 'Alice';

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

Struct-rakenteiden määrittely

struct kokoaa toisiinsa liittyvät muuttujat yhdeksi mukautetuksi tyypiksi. Se sopii erinomaisesti entiteettien, kuten käyttäjien, tilausten tai tokenien, mallintamiseen.

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

Struct-rakenteiden käyttäminen

Voitte luoda struct-rakenteen sijaintiin perustuvilla tai nimetyillä argumenteilla ja tallentaa sen. Struct-rakenteen lukeminen storagesta antaa viitteen, jota voitte muokata.

<code>User public owner;

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

Mapping-rakenteet

mapping on avain–arvo-tietorakenne hash-taulukon tapaan. Se on yksi älysopimusten käytetyimmistä rakenteista, esimerkiksi saldojen seuraamiseen osoitteittain.

Avaimia ei tallenneta, joten mapping-rakennetta ei voi iteroida eikä sen pituutta voi selvittää.

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

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

Sisäkkäiset mapping-rakenteet

Mapping-rakenteita voidaan sisäkkäistää suhteiden mallintamiseksi, esimerkiksi tilanteissa, joissa yksi omistaja sallii useiden käyttäjien käyttää varoja.

Tämä rakenne on ERC-20 allowance-järjestelmän ydin.

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

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

Struct- ja mapping-rakenteiden yhdistäminen

Tehokas rakenne on yhdistää avaimet struct-rakenteisiin mapping-rakenteella. Näin voitte tallentaa monipuolisia tietueita tunnisteen tai osoitteen perusteella.

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

Struct-rakenteiden taulukot

Voitte käyttää struct-rakenteiden dynaamista taulukkoa, kun tarvitsette järjestettyjä ja iteroitavia tietueita. Yhdistämällä sen mapping-rakenteeseen saatte nopeat haut.

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

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

Viitteiden semantiikka

Kun sijoitatte storage-viitetyypin paikalliseen storage-muuttujaan, molemmat osoittavat samaan dataan. Toisen kautta tehdyt muutokset näkyvät myös toisessa.

memory-kopio on sen sijaan itsenäinen.

<code>uint[] public data;

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

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte viitetyypit.

Kertaus

Tutustuitte Solidityn viitetyyppeihin:

  • Taulukot (kiinteän kokoiset ja dynaamiset) sekä bytes ja string
  • Struct-rakenteet toisiinsa liittyvien kenttien kokoamiseen
  • Mapping-rakenteet ja sisäkkäiset mapping-rakenteet avain–arvo-tallennukseen
  • Tehokkaat yhdistelmät, kuten mapping-rakenteet, joiden arvona on struct, sekä struct-rakenteiden taulukot

Viitetyypit jakavat sijainteja, joten valitkaa aina harkiten storage ja memory.

Aloita maksutta

Opi Web3:n ja DApp-sovellusten kehityksen perusteet tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
29
Oppitunnit
105

Usein kysytyt kysymykset

Onko oppitunti ”Viitetyypit” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolun 3 oppituntia, myös oppitunnin “Viitetyypit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Web3:n ja DApp-sovellusten kehityksen perusteet-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Viitetyypit”?

arrays, structs, mappings. Harjoittelet Web3:n ja DApp-sovellusten kehityksen perusteet-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Web3:n ja DApp-sovellusten kehityksen perusteet-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Viitetyypit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Web3:n ja DApp-sovellusten kehityksen perusteet-oppitunnilla?

Kyllä. Jokainen Web3:n ja DApp-sovellusten kehityksen perusteet-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Arvotyypit
  2. Viitetyypit
  3. Tallennus ja muisti
  4. Vakiot ja muuttumattomat arvot
← Takaisin: Web3:n ja DApp-sovellusten kehityksen perusteet