Asas Pembangunan Web3 & DApp · Pelajaran

Pemalar dan Tidak Berubah

Nilai cekap gas

Pelajaran 4 daripada 413 langkah

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 literal
  • immutable - 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:

  • constant untuk decimals token, had bekalan maksimum dan kadar yuran tetap
  • immutable untuk 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_CASE
  • immutable - 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.

Percuma untuk bermula

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

  1. Jenis Nilai
  2. Jenis Rujukan
  3. Storan berbanding Memori
  4. Pemalar dan Tidak Berubah
← Kembali ke Asas Pembangunan Web3 & DApp