Web3 & DApp Development Fundamentals · บทเรียน

ค่าคงที่และค่าที่เปลี่ยนแปลงไม่ได้

ค่าที่ประหยัดแก๊ส

บทเรียน 4 จาก 413 ขั้นตอน

ค่าคงที่และค่าที่เปลี่ยนแปลงไม่ได้ เป็นบทเรียน Web3 & DApp Development Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Web3 & DApp Development Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Web3 & DApp Development Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

Fixed Values Save Gas

Some values never change after a contract is deployed. For these, Solidity offers constant and immutable keywords that store the value in the contract bytecode instead of expensive storage slots.

Using them reduces gas and signals intent to readers.

Declaring Constants

A constant must be assigned at the point of declaration and known at compile time. Its value can never change.

By convention constants use UPPER_CASE names.

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

How Constants Work

A constant does not occupy a storage slot. The compiler inlines its value everywhere it is used, so reading it costs almost nothing.

This makes constants ideal for configuration like decimals, caps, and fixed fees.

<code>uint8 public constant DECIMALS = 18;

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

Declaring Immutables

An immutable variable is set once, either at declaration or in the constructor, and then can never change.

Unlike constants, its value can depend on runtime data such as deployment arguments.

<code>address public immutable owner;

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

Constant vs Immutable

The key difference is when the value is fixed:

  • constant - fixed at compile time, must be a literal expression
  • immutable - fixed at deploy time, can use constructor inputs

Both are stored in bytecode, not in storage slots.

Immutable with Constructor Args

Immutables shine when each deployment needs different fixed parameters, like a token's total supply or an associated contract address.

<code>uint256 public immutable cap;

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

Gas Savings

Reading a regular state variable requires an SLOAD (storage read), which is costly. Constants and immutables are read directly from bytecode, which is far cheaper.

Converting frequently-read fixed config to constant/immutable is an easy optimization.

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

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

What Cannot Be Constant

A constant cannot depend on anything computed at runtime. Values like block.timestamp, msg.sender, or storage reads are forbidden for constants.

For those, use immutable instead.

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

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

Immutables Are Read-Only

After the constructor finishes, an immutable can never be reassigned. Any attempt to write to it outside the constructor is a compile error.

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

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

Common Use Cases

Typical patterns:

  • constant for token decimals, max supply caps, and fixed fee rates
  • immutable for the owner, deployment timestamp, and linked contract addresses

Both improve clarity and reduce gas compared to mutable state.

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

Naming Convention

By widespread convention, constant names are written in UPPER_SNAKE_CASE, while immutable names often use normal camelCase or a leading underscore for constructor params.

Consistent naming makes audits faster.

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

Quick Check

Test your understanding of constants and immutables.

Recap

You learned about gas-efficient fixed values:

  • constant - compile-time literal, inlined into bytecode, UPPER_CASE
  • immutable - set once at deploy time (often in the constructor), then read-only
  • Both avoid expensive storage reads (SLOAD)

Use constants for known literals and immutables for per-deployment configuration.

เริ่มต้นได้ฟรี

เรียนรู้ Web3 & DApp Development Fundamentals ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
29
บทเรียน
105

คำถามที่พบบ่อย

บทเรียน “ค่าคงที่และค่าที่เปลี่ยนแปลงไม่ได้” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ค่าคงที่และค่าที่เปลี่ยนแปลงไม่ได้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Web3 & DApp Development Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Web3 & DApp Development Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ค่าคงที่และค่าที่เปลี่ยนแปลงไม่ได้”

ค่าที่ประหยัดแก๊ส คุณปฏิบัติ Web3 & DApp Development Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Web3 & DApp Development Fundamentals หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Web3 & DApp Development Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ค่าคงที่และค่าที่เปลี่ยนแปลงไม่ได้” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Web3 & DApp Development Fundamentals นี้ได้ไหม

ได้ บทเรียน Web3 & DApp Development Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ชนิดข้อมูลค่า
  2. ชนิดข้อมูลอ้างอิง
  3. พื้นที่จัดเก็บเทียบกับหน่วยความจำ
  4. ค่าคงที่และค่าที่เปลี่ยนแปลงไม่ได้
← กลับไปที่ Web3 & DApp Development Fundamentals