Vakiot ja muuttumattomat arvot
Gas-tehokkaat arvot.
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 literaalilausekeimmutable– 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:
constanttokenin desimaaleille, enimmäismäärille ja kiinteille palkkioprosenteilleimmutableomistajalle, 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_CASEimmutable– 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.
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
- Arvotyypit
- Viitetyypit
- Tallennus ja muisti
- Vakiot ja muuttumattomat arvot