什麼是constant variables?

更新於 2024/06/03閱讀時間約 2 分鐘

在 Solidity 中,constant 變量用於定義不可變的常數值。這些常數在合約的生命週期內不會改變,並且它們的值必須在宣告時設定。使用 constant 關鍵字可以節省 gas,因為它們在編譯時就已經被嵌入到字節碼中,不需要在運行時讀取存儲。

用法

  1. 定義常數
    • 常數變量必須在宣告時初始化,並且一旦設置,就不能再修改。
    • 常數變量名稱通常使用大寫,以便與普通變量區分。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract Constants {
// 定義一個常數變量
uint256 public constant MY_CONSTANT = 123;
string public constant MY_STRING = "Hello, Solidity!";

// 該函數將返回常數變量的值
function getConstant() public pure returns (uint256) {
return MY_CONSTANT;
}

function getStringConstant() public pure returns (string memory) {
return MY_STRING;
}
}


  1. 使用常數
    • 常數變量可以在合約的任何地方使用,就像普通變量一樣。
    • 由於常數變量的值在編譯時就已確定,因此在使用時不會產生額外的存儲或讀取成本。

範例解釋

在上面的範例中:

  • MY_CONSTANT 是一個 uint256 類型的常數,其值為 123
  • MY_STRING 是一個 string 類型的常數,其值為 "Hello, Solidity!"
  • getConstant 函數返回 MY_CONSTANT 的值,getStringConstant 函數返回 MY_STRING 的值。

優點

使用 constant 變量有以下幾個優點:

  1. 節省 gas:由於常數變量在編譯時就已經確定,使用它們不需要在運行時讀取存儲中的數據,因此可以節省 gas。
  2. 提高可讀性:常數變量名稱通常有助於提高代碼的可讀性和可維護性,讓開發者更容易理解代碼的意圖。
  3. 減少錯誤:常數變量的不可變性可以防止意外修改,減少潛在的錯誤。

注意事項

  • 常數變量必須在聲明時初始化,且初始化後不能更改。
  • 常數變量的名稱通常使用大寫,以便與普通變量區分。

總結來說,在 Solidity 中使用 constant 變量是一種很好的編碼習慣,有助於提高合約的效率和安全性。

[Reference]

ChatGPT 3.5

    尋大神腳印, 亦步亦趨。
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    msg.sender 定義:msg.sender 是 Solidity 中的一個全局變量,表示當前調用合約函數的外部地址。這個地址可以是普通用戶賬戶(EOA)或另一個智能合約。 用途:用於識別誰在調用當前函數。在每次函數調用期間,msg.sender 都會動態地更新為當前調用該函數的賬戶地址。
    以前覺得程式隔行如隔山, 一直都鴨子聽雷進入自我懷疑回圈, 特別感謝Paul老師, 願意花大量時間鉅細靡遺的介紹, 像解釋文言文一般, 悉心的一字一句清晰的解釋成白話文給我們大家, 終於找到了火山登山口的感覺, 繼續加油 🌳 1. mapping(address account => uint2
    Build a ERC-721A Smart Contract ERC721A Explained: Cheaper Gas and More Energy Efficient NFT Minting Contract ERC721A Azuki Smart Contract Tutorial
    Create an NFT Lootbox for blockchain games or NFT trading card platforms (NBA Topshot clone)
    Dapp Tutorial - ERC20 帶你發行自己的加密貨幣 🔥 Build Your Own ERC-20 Crypto Coin
    Merkle Tree Solidity Whitelist Using Merkle Trees for NFT Whitelists - Solidity Tutorial (ERC-721, NFT, Whitelist, Solidity)
    msg.sender 定義:msg.sender 是 Solidity 中的一個全局變量,表示當前調用合約函數的外部地址。這個地址可以是普通用戶賬戶(EOA)或另一個智能合約。 用途:用於識別誰在調用當前函數。在每次函數調用期間,msg.sender 都會動態地更新為當前調用該函數的賬戶地址。
    以前覺得程式隔行如隔山, 一直都鴨子聽雷進入自我懷疑回圈, 特別感謝Paul老師, 願意花大量時間鉅細靡遺的介紹, 像解釋文言文一般, 悉心的一字一句清晰的解釋成白話文給我們大家, 終於找到了火山登山口的感覺, 繼續加油 🌳 1. mapping(address account => uint2
    Build a ERC-721A Smart Contract ERC721A Explained: Cheaper Gas and More Energy Efficient NFT Minting Contract ERC721A Azuki Smart Contract Tutorial
    Create an NFT Lootbox for blockchain games or NFT trading card platforms (NBA Topshot clone)
    Dapp Tutorial - ERC20 帶你發行自己的加密貨幣 🔥 Build Your Own ERC-20 Crypto Coin
    Merkle Tree Solidity Whitelist Using Merkle Trees for NFT Whitelists - Solidity Tutorial (ERC-721, NFT, Whitelist, Solidity)
    你可能也想看
    Google News 追蹤
    Thumbnail
    本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
    Thumbnail
    近日有讀者問:「何為業障病?」 業障病是有形和無形的冤親債主,向凡夫討債的業報現象之一,可分三層次:生物、心理、靈性。 首先,生物的原因,如食物中毒或身體機能被某些物質汙染等。 又如遺傳、生理缺陷等,就佛法來說,是靈魂入胎時,冤親債主干擾基因設定,讓身體帶著障礙出生。
    Thumbnail
    交際應酬她要參加,老公說:「別人都帶年輕妹妹去,妳去能看嗎?」。 家長親子會找老公同行,老公說:「不應酬就沒收入,家裡開銷靠妳嗎?」 最近很多人在探討婚姻到底是什麼?婚內失戀又是什麼? 婚內失戀是隨著時間淡化感情,成了最熟悉的陌生人,並被對方刻版印象標籤化了人生,還要忍受莫須有的對待,這是婚內失戀。
    Thumbnail
    最近發現對文字有不一樣的感覺。 以前唸文學作品會因為讀不懂而感到焦慮,擔心自己是否理解力比不上別人,為何別人說的「經典」我卻讀不下去。昨天逛誠品,翻閱《湖濱散記》新譯本、海明威的散文、洛夫的詩集,突然發現這樣的焦慮消失了。
    Thumbnail
    延續上篇【什麼是追求人口趨勢的基金? [好好退休積極型基金2]】的內容 大綱 1.富達基金-全球主題機會基金 2.聯博-聚焦全球股票基金 3.紐約梅隆環球股票投資基金 4.九檔基金綜合評論 5.適合什麼人買? 6.網路上的看法 7.威利的看法 7.富達基金-全球主題機會基金累計美元 台灣官網 圖3
    Thumbnail
    要成為加州膜拜酒,通常需要滿足幾個條件:(1) 獲得評分滿分或接近滿分的分數 (2) 產量稀少 (3) 由著名的頂尖釀酒師或釀就顧問釀造。比如說飛行釀酒師米歇爾·侯隆 (Michel Rolland) (4) 主要通路是酒莊郵購會員或是星級餐廳 (5) 曾經在拍賣會上創下破紀錄的拍賣價格
    Thumbnail
    故事聽到這邊,你會不會覺得,這其實不用學過法律也可以作判斷了? 這就是我看到的「不確定性」。
    Thumbnail
    今天是印尼建國五原則 「Pancasila」誕生日 (Hari Lahir Pancasila),也是國定假日。「Pancasila」又稱作潘查希拉,由panca(五)及sila(原則)兩個梵文組成,源自於佛教的戒律。
    Thumbnail
    新零售是一種策略,不是一個新產業,零售業的本質還是相同的。新零售是不停的用數位工具的協助,降低消費者消費時消費熵增熵的曲線,去逼近增熵為零的絕對領域。也就是降低消費者的購物阻力,就會形成一個好生意。
    Thumbnail
    零售業的關鍵,是與消費者互動的那些瞬間,古老的市集裡,生產者直接銷售給消費者,每一次的交易都是有溫度的。而工業時代為生產者帶來了效率,卻失去了消費者的溫度,而數位時代帶來了新的契機。
    Thumbnail
    本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
    Thumbnail
    近日有讀者問:「何為業障病?」 業障病是有形和無形的冤親債主,向凡夫討債的業報現象之一,可分三層次:生物、心理、靈性。 首先,生物的原因,如食物中毒或身體機能被某些物質汙染等。 又如遺傳、生理缺陷等,就佛法來說,是靈魂入胎時,冤親債主干擾基因設定,讓身體帶著障礙出生。
    Thumbnail
    交際應酬她要參加,老公說:「別人都帶年輕妹妹去,妳去能看嗎?」。 家長親子會找老公同行,老公說:「不應酬就沒收入,家裡開銷靠妳嗎?」 最近很多人在探討婚姻到底是什麼?婚內失戀又是什麼? 婚內失戀是隨著時間淡化感情,成了最熟悉的陌生人,並被對方刻版印象標籤化了人生,還要忍受莫須有的對待,這是婚內失戀。
    Thumbnail
    最近發現對文字有不一樣的感覺。 以前唸文學作品會因為讀不懂而感到焦慮,擔心自己是否理解力比不上別人,為何別人說的「經典」我卻讀不下去。昨天逛誠品,翻閱《湖濱散記》新譯本、海明威的散文、洛夫的詩集,突然發現這樣的焦慮消失了。
    Thumbnail
    延續上篇【什麼是追求人口趨勢的基金? [好好退休積極型基金2]】的內容 大綱 1.富達基金-全球主題機會基金 2.聯博-聚焦全球股票基金 3.紐約梅隆環球股票投資基金 4.九檔基金綜合評論 5.適合什麼人買? 6.網路上的看法 7.威利的看法 7.富達基金-全球主題機會基金累計美元 台灣官網 圖3
    Thumbnail
    要成為加州膜拜酒,通常需要滿足幾個條件:(1) 獲得評分滿分或接近滿分的分數 (2) 產量稀少 (3) 由著名的頂尖釀酒師或釀就顧問釀造。比如說飛行釀酒師米歇爾·侯隆 (Michel Rolland) (4) 主要通路是酒莊郵購會員或是星級餐廳 (5) 曾經在拍賣會上創下破紀錄的拍賣價格
    Thumbnail
    故事聽到這邊,你會不會覺得,這其實不用學過法律也可以作判斷了? 這就是我看到的「不確定性」。
    Thumbnail
    今天是印尼建國五原則 「Pancasila」誕生日 (Hari Lahir Pancasila),也是國定假日。「Pancasila」又稱作潘查希拉,由panca(五)及sila(原則)兩個梵文組成,源自於佛教的戒律。
    Thumbnail
    新零售是一種策略,不是一個新產業,零售業的本質還是相同的。新零售是不停的用數位工具的協助,降低消費者消費時消費熵增熵的曲線,去逼近增熵為零的絕對領域。也就是降低消費者的購物阻力,就會形成一個好生意。
    Thumbnail
    零售業的關鍵,是與消費者互動的那些瞬間,古老的市集裡,生產者直接銷售給消費者,每一次的交易都是有溫度的。而工業時代為生產者帶來了效率,卻失去了消費者的溫度,而數位時代帶來了新的契機。