Viitetyypit
arrays, structs, mappings.
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ä
bytesjastring - 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.
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.