Pemalar dan Tidak Berubah
Nilai cekap gas
Pemalar dan Tidak Berubah ialah pelajaran Asas Pembangunan Web3 & DApp percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Asas Pembangunan Web3 & DApp, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.
Nilai Tetap Menjimatkan Gas
Sesetengah nilai tidak pernah berubah selepas kontrak digunakan. Untuk nilai ini, Solidity menyediakan kata kunci constant dan immutable yang menyimpan nilai tersebut dalam kod bait kontrak, bukannya dalam slot storage yang mahal.
Penggunaannya mengurangkan gas dan menjelaskan tujuan kepada pembaca.
Mengisytiharkan Pemalar
constant mesti diberikan nilai ketika diisytiharkan dan diketahui pada masa penyusunan. Nilainya tidak boleh berubah.
Mengikut kebiasaan, pemalar menggunakan nama HURUF_BESAR.
<code>uint256 public constant MAX_SUPPLY = 1000000;
string public constant NAME = 'MyToken';</code>Cara Pemalar Berfungsi
constant tidak menggunakan slot storage. Penyusun menyisipkan nilainya di setiap tempat ia digunakan, jadi pembacaannya hampir tidak memerlukan kos.
Ini menjadikan pemalar sesuai untuk konfigurasi seperti perpuluhan, had maksimum dan fi tetap.
<code>uint8 public constant DECIMALS = 18;
function unit() public pure returns (uint256) {
return 10 ** DECIMALS; // inlined at compile time
}</code>Mengisytiharkan Immutable
Pemboleh ubah immutable ditetapkan sekali, sama ada ketika diisytiharkan atau dalam pembina, kemudian tidak boleh berubah lagi.
Berbeza daripada pemalar, nilainya boleh bergantung pada data masa jalan seperti argumen penggunaan.
<code>address public immutable owner;
constructor() {
owner = msg.sender; // set at deploy time
}</code>Constant berbanding Immutable
Perbezaan utama ialah bila nilainya ditetapkan:
constant- ditetapkan pada masa kompilasi, mesti berupa ungkapan literalimmutable- ditetapkan pada masa penerapan, boleh menggunakan input pembina
Kedua-duanya disimpan dalam bytecode, bukan dalam slot storan.
Immutable dengan Argumen Pembina
Immutable amat berguna apabila setiap penerapan memerlukan parameter tetap yang berbeza, seperti jumlah bekalan keseluruhan token atau alamat kontrak berkaitan.
<code>uint256 public immutable cap;
constructor(uint256 _cap) {
cap = _cap; // unique per deployment
}</code>Penjimatan Gas
Membaca pemboleh ubah keadaan biasa memerlukan SLOAD (bacaan storan), yang mahal. Constants dan immutables dibaca terus daripada bytecode, yang jauh lebih murah.
Menukarkan konfigurasi tetap yang kerap dibaca kepada constant/immutable ialah pengoptimuman yang mudah.
<code>// Expensive: storage read each call
uint256 public feeStorage = 100;
// Cheap: read from bytecode
uint256 public constant FEE = 100;</code>Perkara yang Tidak Boleh Menjadi Constant
constant tidak boleh bergantung pada apa-apa yang dikira semasa masa jalan. Nilai seperti block.timestamp, msg.sender atau bacaan storan dilarang untuk constants.
Untuk keadaan tersebut, gunakan immutable.
<code>// ERROR: not compile-time known
// uint256 constant T = block.timestamp;
// OK as immutable
uint256 immutable deployedAt;
constructor() { deployedAt = block.timestamp; }</code>Immutables Bersifat Baca Sahaja
Selepas pembina selesai, immutable tidak boleh ditetapkan semula. Sebarang cubaan untuk menulis kepadanya di luar pembina akan menghasilkan ralat kompilasi.
<code>address public immutable factory;
constructor(address f) { factory = f; }
function change(address x) public {
// factory = x; // ERROR: cannot assign
}</code>Kes Penggunaan Biasa
Pola lazim:
constantuntuk decimals token, had bekalan maksimum dan kadar yuran tetapimmutableuntuk owner, cap masa penerapan dan alamat kontrak yang dipautkan
Kedua-duanya meningkatkan kejelasan dan mengurangkan gas berbanding keadaan yang boleh diubah.
<code>uint8 public constant DECIMALS = 18;
address public immutable deployer;
constructor() { deployer = msg.sender; }</code>Konvensyen Penamaan
Mengikut konvensyen yang digunakan secara meluas, nama constant ditulis dalam UPPER_SNAKE_CASE, manakala nama immutable biasanya menggunakan camelCase biasa atau garis bawah di hadapan untuk parameter pembina.
Penamaan yang konsisten mempercepatkan audit.
<code>uint256 public constant MAX_HOLDERS = 500;
address public immutable treasury;</code>Semakan Pantas
Uji pemahaman anda tentang constants dan immutables.
Ringkasan
Anda telah mempelajari nilai tetap yang menjimatkan gas:
constant- literal masa kompilasi, disisipkan terus ke dalam bytecode, UPPER_CASEimmutable- ditetapkan sekali pada masa penerapan (biasanya dalam pembina), kemudian baca sahaja- Kedua-duanya mengelakkan bacaan storan yang mahal (SLOAD)
Gunakan constants untuk literal yang telah diketahui dan immutables untuk konfigurasi khusus bagi setiap penerapan.
Pelajari Asas Pembangunan Web3 & DApp dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 29
- Pelajaran
- 105
Soalan Lazim
Adakah pelajaran “Pemalar dan Tidak Berubah” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Asas Pembangunan Web3 & DApp, termasuk “Pemalar dan Tidak Berubah”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pemalar dan Tidak Berubah”?
Nilai cekap gas Anda berlatih Asas Pembangunan Web3 & DApp menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Asas Pembangunan Web3 & DApp?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Asas Pembangunan Web3 & DApp di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Pemalar dan Tidak Berubah” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Asas Pembangunan Web3 & DApp ini?
Ya. Setiap pelajaran Asas Pembangunan Web3 & DApp menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Jenis Nilai
- Jenis Rujukan
- Storan berbanding Memori
- Pemalar dan Tidak Berubah