2. Solidity:函數類型

2.1 函數形式

    function <function name>(<parameter types>) {internal|external|public|private} [pure|view|payable] [returns (<return types>)]

1. function:聲明函數時的固定用法图仓,想寫函數雅潭,就要以function關鍵字開頭揭厚。
2. <function name>:函數名。
3. (<parameter types>):圓括號里寫函數的參數扶供,也就是要輸入到函數的變量類型和名字筛圆。
4. {internal|external|public|private}:函數可見性說明符,一共4種椿浓。沒標明函數類型的太援,默認public

  • public: 內部外部均可見扳碍。
  • private: 只能從本合約內部訪問提岔,繼承的合約也不能用。
  • external: 只能從合約外部訪問(但是可以用this.f()來調用笋敞,f是函數名)碱蒙。
  • internal: 只能從合約內部訪問,繼承的合約可以用液样。
    Note 1: 沒有標明可見性類型的函數振亮,默認為public。
    Note 2:public|private|internal 也可用于修飾狀態(tài)變量鞭莽。 public變量會自動生成同名的getter函數坊秸,用于查詢數值。
    Note 3:沒有標明可見性類型的狀態(tài)變量澎怒,默認為internal褒搔。

5. [pure|view|payable]:決定函數權限/功能的關鍵字。payable(可支付的)很好理解喷面,帶著它的函數星瘾,運行的時候可以給合約轉入ETH。pure和view的介紹見下一節(jié)惧辈。

6. [returns ()]:函數返回的變量類型和名稱琳状。

  • 代碼示例:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract FunctionIntro {
    function add(uint a, uint b) pure external returns (uint) {
        return a + b;
    }

    function sub(uint a, uint b) pure external returns (uint c) {
        return a - b;
    }
}

2.2 pure和view

  • pure: 不能讀取也不能寫入存儲在鏈上的狀態(tài)變量
  • view: 能讀取但也不能寫入狀態(tài)變量
  • 不包含view和pure: 既可以讀取也可以寫入狀態(tài)變量

狀態(tài)變量存儲在鏈上,更改鏈上狀態(tài)會消耗gas fee盒齿。對于不更改鏈上狀態(tài)的函數念逞,需要使用pure或者view標識困食,這類函數不會消耗gas fee。

在以太坊中翎承,以下語句被視為修改鏈上狀態(tài):

  1. 寫入狀態(tài)變量硕盹。
  2. 釋放事件。
  3. 創(chuàng)建其他合約叨咖。
  4. 使用selfdestruct.
  5. 通過調用發(fā)送以太幣瘩例。
  6. 調用任何未標記view或pure的函數。
  7. 使用低級調用(low-level calls)甸各。
  8. 使用包含某些操作碼的內聯匯編垛贤。
  • 代碼示例:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract PureView {
    uint public x = 100;

    // pure函數:不更改也不讀取狀態(tài)變量
    function pureFunc(uint _x) external pure returns (uint) {
        return _x + 1;
    }

    // view函數:讀取狀態(tài)變量,但不更改
    function viewFunc() external view returns (uint) {
        return x;
    }

    // 不包含view和pure的函數:會更改狀態(tài)變量
    function nFunc() external returns (uint) {
        x += 1;
        return x;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末痴晦,一起剝皮案震驚了整個濱河市南吮,隨后出現的幾起案子,更是在濱河造成了極大的恐慌誊酌,老刑警劉巖部凑,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異碧浊,居然都是意外死亡涂邀,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門箱锐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來比勉,“玉大人,你說我怎么就攤上這事驹止『屏” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵臊恋,是天一觀的道長衣洁。 經常有香客問我,道長抖仅,這世上最難降的妖魔是什么坊夫? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮撤卢,結果婚禮上环凿,老公的妹妹穿的比我還像新娘。我一直安慰自己放吩,他們只是感情好智听,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般瞭稼。 火紅的嫁衣襯著肌膚如雪忽洛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天环肘,我揣著相機與錄音,去河邊找鬼集灌。 笑死悔雹,一個胖子當著我的面吹牛,可吹牛的內容都是我干的欣喧。 我是一名探鬼主播腌零,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唆阿!你這毒婦竟也來了益涧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤驯鳖,失蹤者是張志新(化名)和其女友劉穎闲询,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體浅辙,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡扭弧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了记舆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸽捻。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖泽腮,靈堂內的尸體忽然破棺而出御蒲,到底是詐尸還是另有隱情,我是刑警寧澤诊赊,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布厚满,位于F島的核電站,受9級特大地震影響豪筝,放射性物質發(fā)生泄漏痰滋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一续崖、第九天 我趴在偏房一處隱蔽的房頂上張望敲街。 院中可真熱鬧,春花似錦严望、人聲如沸多艇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峻黍。三九已至复隆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姆涩,已是汗流浹背挽拂。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骨饿,地道東北人亏栈。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像宏赘,于是被迫代替她去往敵國和親绒北。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容