Web3:n ja DApp-sovellusten kehityksen perusteet · Oppitunti

Vakiot ja muuttumattomat arvot

Gas-tehokkaat arvot.

Oppitunti 4/413 vaihetta

Vakiot ja muuttumattomat arvot on ilmainen Web3:n ja DApp-sovellusten kehityksen perusteet-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.

Kiinteät arvot säästävät gasia

Jotkin arvot eivät muutu koskaan sopimuksen käyttöönoton jälkeen. Solidity tarjoaa tällaisia arvoja varten avainsanat constant ja immutable, jotka tallentavat arvon sopimuksen tavukoodiin kalliiden storage-slottien sijaan.

Niiden käyttö vähentää gas-kustannuksia ja ilmaisee tarkoituksen selkeästi lukijalle.

Vakioiden määrittely

constant-muuttujalle on annettava arvo määrittelyn yhteydessä, ja arvon on oltava tiedossa käännösaikana. Sen arvo ei voi koskaan muuttua.

Vakioiden nimissä käytetään yleensä SUURAAKKOSIA.

<code>uint256 public constant MAX_SUPPLY = 1000000;
string public constant NAME = 'MyToken';</code>

Miten vakiot toimivat

constant ei käytä storage-slottia. Kääntäjä sijoittaa sen arvon suoraan kaikkialle, missä sitä käytetään, joten sen lukeminen maksaa lähes olemattoman määrän gasia.

Tämän vuoksi vakiot sopivat erinomaisesti esimerkiksi desimaalien, ylärajojen ja kiinteiden maksujen määritykseen.

<code>uint8 public constant DECIMALS = 18;

function unit() public pure returns (uint256) {
    return 10 ** DECIMALS; // inlined at compile time
}</code>

Immutable-muuttujien määrittely

immutable-muuttujalle annetaan arvo kerran, joko määrittelyn yhteydessä tai konstruktorissa, minkä jälkeen sitä ei voi enää muuttaa.

Toisin kuin vakioiden kohdalla, sen arvo voi riippua suoritusajan datasta, kuten käyttöönoton argumenteista.

<code>address public immutable owner;

constructor() {
    owner = msg.sender; // set at deploy time
}</code>

Constant ja immutable

Keskeinen ero on siinä, milloin arvo määritetään:

  • constant – määritetään käännösaikana, ja sen on oltava literaalilauseke
  • immutable – määritetään käyttöönoton yhteydessä, ja sen alustamiseen voidaan käyttää konstruktorin syötteitä

Molemmat tallennetaan tavukoodiin, eivät tallennuspaikkoihin.

Immutable konstruktorin argumenteilla

Immutable-muuttujat ovat hyödyllisiä, kun jokaisessa käyttöönotossa tarvitaan erilaiset kiinteät parametrit, kuten tokenin kokonaismäärä tai siihen liittyvän sopimuksen osoite.

<code>uint256 public immutable cap;

constructor(uint256 _cap) {
    cap = _cap; // unique per deployment
}</code>

Kaasun säästäminen

Tavallisen tilamuuttujan lukeminen edellyttää SLOAD-operaatiota (lukua tallennuksesta), joka on kallis. Vakiot ja immutable-muuttujat luetaan suoraan tavukoodista, mikä on huomattavasti edullisempaa.

Usein luettavan kiinteän määrityksen muuttaminen muotoon constant/immutable on helppo optimointi.

<code>// Expensive: storage read each call
uint256 public feeStorage = 100;

// Cheap: read from bytecode
uint256 public constant FEE = 100;</code>

Mitä ei voi määrittää constant-muuttujaksi

constant ei voi riippua mistään ajonaikana lasketusta. Arvot, kuten block.timestamp, msg.sender tai tallennuksesta tehtävät luvut, eivät ole sallittuja constant-muuttujille.

Käyttäkää näissä tapauksissa sen sijaan immutable-muuttujaa.

<code>// ERROR: not compile-time known
// uint256 constant T = block.timestamp;

// OK as immutable
uint256 immutable deployedAt;
constructor() { deployedAt = block.timestamp; }</code>

Immutable-muuttujat ovat vain luku -muuttujia

Kun konstruktori on suoritettu, immutable-muuttujaa ei voi enää määrittää uudelleen. Kaikki yritykset kirjoittaa siihen konstruktorin ulkopuolella aiheuttavat käännösvirheen.

<code>address public immutable factory;
constructor(address f) { factory = f; }

function change(address x) public {
    // factory = x; // ERROR: cannot assign
}</code>

Yleiset käyttötapaukset

Tyypillisiä käyttötapoja:

  • constant tokenin desimaaleille, enimmäismäärille ja kiinteille palkkioprosenteille
  • immutable omistajalle, käyttöönoton aikaleimalle ja linkitettyjen sopimusten osoitteille

Molemmat parantavat selkeyttä ja vähentävät kaasunkulutusta muuttuviin tilamuuttujiin verrattuna.

<code>uint8 public constant DECIMALS = 18;
address public immutable deployer;
constructor() { deployer = msg.sender; }</code>

Nimeämiskäytäntö

Yleisen käytännön mukaan constant-muuttujien nimet kirjoitetaan muodossa UPPER_SNAKE_CASE, kun taas immutable-muuttujien nimissä käytetään usein tavallista camelCase-muotoa tai konstruktoriparametreissa alussa olevaa alaviivaa.

Johdonmukainen nimeäminen nopeuttaa auditointeja.

<code>uint256 public constant MAX_HOLDERS = 500;
address public immutable treasury;</code>

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte vakiot ja immutable-muuttujat.

Kertaus

Opitte kaasutehokkaista kiinteistä arvoista:

  • constant – käännösaikainen literaali, joka upotetaan tavukoodiin ja kirjoitetaan muodossa UPPER_CASE
  • immutable – asetetaan kerran käyttöönoton yhteydessä (usein konstruktorissa), minkä jälkeen se on vain luku -muuttuja
  • Molemmat välttävät kalliit tallennuksesta lukemiset (SLOAD)

Käyttäkää vakioita tunnetuille literaaleille ja immutable-muuttujia käyttöönotto-kohtaisille määrityksille.

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 ”Vakiot ja muuttumattomat arvot” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolun 3 oppituntia, myös oppitunnin “Vakiot ja muuttumattomat arvot”. 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 ”Vakiot ja muuttumattomat arvot”?

Gas-tehokkaat arvot. 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 4/4.

Kuinka kauan ”Vakiot ja muuttumattomat arvot”-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