Konstanter og immutables
Gas-effektive værdier
Konstanter og immutables er en gratis Grundlæggende udvikling af Web3- og DApp-programmer-lektion på CoddyKit. Dette er lektion 4 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.
Faste værdier sparer gas
Nogle værdier ændres aldrig, efter at en kontrakt er deployet. Til disse værdier tilbyder Solidity nøgleordene constant og immutable, som gemmer værdien i kontraktens bytekode i stedet for i dyre storage-slots.
Brug af dem reducerer gasforbruget og tydeliggør hensigten for læserne.
Deklaration af konstanter
En constant skal tildeles på deklarationstidspunktet og være kendt ved kompilering. Dens værdi kan aldrig ændres.
Efter konvention bruger konstanter navne med STORE_BOGSTAVER.
<code>uint256 public constant MAX_SUPPLY = 1000000;
string public constant NAME = 'MyToken';</code>Sådan fungerer konstanter
En constant optager ikke en storage-slot. Compileren indsætter dens værdi alle de steder, hvor den bruges, så det næsten ikke koster noget at læse den.
Det gør konstanter ideelle til konfiguration som antal decimaler, grænser og faste gebyrer.
<code>uint8 public constant DECIMALS = 18;
function unit() public pure returns (uint256) {
return 10 ** DECIMALS; // inlined at compile time
}</code>Deklaration af immutable-værdier
En immutable-variabel sættes én gang, enten ved deklarationen eller i konstruktøren, og kan derefter aldrig ændres.
I modsætning til konstanter kan dens værdi afhænge af runtime-data som deployeringsargumenter.
<code>address public immutable owner;
constructor() {
owner = msg.sender; // set at deploy time
}</code>Constant kontra immutable
Den afgørende forskel er hvornår værdien fastlægges:
constant– fastlægges på kompileringstidspunktet og skal være et bogstaveligt udtrykimmutable– fastlægges på implementeringstidspunktet og kan bruge input fra konstruktøren
Begge gemmes i bytekoden og ikke i lagerpladser.
Immutable med konstruktørargumenter
Immutables er særligt nyttige, når hver implementering har brug for forskellige faste parametre, f.eks. et tokens samlede udbud eller adressen på en tilknyttet kontrakt.
<code>uint256 public immutable cap;
constructor(uint256 _cap) {
cap = _cap; // unique per deployment
}</code>Gasbesparelser
Hvis du læser en almindelig tilstandsvariabel, kræver det en SLOAD (læsning fra lageret), hvilket er dyrt. Konstanter og immutables læses direkte fra bytekoden, hvilket er langt billigere.
At konvertere fast konfiguration, der læses ofte, til constant/immutable er en nem optimering.
<code>// Expensive: storage read each call
uint256 public feeStorage = 100;
// Cheap: read from bytecode
uint256 public constant FEE = 100;</code>Hvad kan ikke være constant
En constant må ikke afhænge af noget, der beregnes under kørsel. Værdier som block.timestamp, msg.sender eller læsninger fra lageret er ikke tilladt for konstanter.
Brug i stedet immutable til disse værdier.
<code>// ERROR: not compile-time known
// uint256 constant T = block.timestamp;
// OK as immutable
uint256 immutable deployedAt;
constructor() { deployedAt = block.timestamp; }</code>Immutables er skrivebeskyttede
Når konstruktøren er færdig, kan en immutable aldrig tildeles en ny værdi. Ethvert forsøg på at skrive til den uden for konstruktøren giver en kompileringsfejl.
<code>address public immutable factory;
constructor(address f) { factory = f; }
function change(address x) public {
// factory = x; // ERROR: cannot assign
}</code>Almindelige anvendelser
Typiske mønstre:
constanttil tokens decimaler, grænser for maksimalt udbud og faste gebyrsatserimmutabletil ejeren, implementeringstidspunktet og adresser på tilknyttede kontrakter
Begge forbedrer tydeligheden og reducerer gasforbruget sammenlignet med foranderlig tilstand.
<code>uint8 public constant DECIMALS = 18;
address public immutable deployer;
constructor() { deployer = msg.sender; }</code>Navngivningskonvention
Efter en udbredt konvention skrives navne på constant med UPPER_SNAKE_CASE, mens navne på immutable ofte bruger almindelig camelCase eller en indledende understregning for konstruktørparametre.
Konsekvent navngivning gør audits hurtigere.
<code>uint256 public constant MAX_HOLDERS = 500;
address public immutable treasury;</code>Hurtig kontrol
Test din forståelse af konstanter og immutables.
Opsummering
Du har lært om gasbesparende faste værdier:
constant– bogstavelig værdi på kompileringstidspunktet, indsat direkte i bytekoden, UPPER_CASEimmutable– angives én gang på implementeringstidspunktet (ofte i konstruktøren) og er derefter skrivebeskyttet- Begge undgår dyre læsninger fra lageret (SLOAD)
Brug konstanter til kendte bogstavelige værdier og immutables til konfiguration, der varierer fra implementering til implementering.
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 “Konstanter og immutables” gratis?
Ja — alle 3 lektioner i læringssporet Grundlæggende udvikling af Web3- og DApp-programmer, inklusive “Konstanter og immutables”, 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 “Konstanter og immutables”?
Gas-effektive værdier 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 4 af 4.
Hvor lang tid tager lektionen “Konstanter og immutables”?
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
- Værdityper
- Referencetyper
- Storage kontra memory
- Konstanter og immutables