Blockchain

Solidity 簡介:讓 Swift 開發者快速掌握 Solidity 的語言結構和函式

Solidity 是一種物件導向語言,用來撰寫適用於區塊鏈的智能合約,比如說 Ethereum。Solidity 的語法與 Javascript 類似,但語義就比較接近 C++。在這篇文章中,Kristaps 會帶大家從 Swift 開發者的角度,深入探究 Solidity 的語言結構和功能。
Solidity 簡介:讓 Swift 開發者快速掌握 Solidity 的語言結構和函式
Solidity 簡介:讓 Swift 開發者快速掌握 Solidity 的語言結構和函式
In: Blockchain, Swift 程式語言

本篇原文(標題:Solidity for Swift Developers: File Structure and Functions)刊登於作者 Medium,由 Kristaps Grinbergs 所著,並授權翻譯及轉載。

Solidity 是一種物件導向語言,用來撰寫適用於區塊鏈 (blockchain) 的智能合約 (smart contracts),比如說 Ethereum。Solidity 的語法與 Javascript 類似,但語義就比較接近 C++。在這篇文章中,我們會從 Swift 開發者的角度深入探究 Solidity 的語言結構和函式。

Pragma 和 sfile 副檔名

在了解 Solidity 的語言結構之前,我們首先要知道 pragma keyword 的用處和意思。

與 Objective-C 的 #pragma 和 Swift 的 MARK 不同,Solidity 的 pragma keyword 是用來描述使用哪個版本的編譯器。pragma keyword 會指示編譯器檢查版本是否匹配,但不會打開或關閉任何語言功能。

舉個例子,如果我們想告訴 Solidity 編譯器使用 0.8x 版本,就可以如此編寫第一行程式碼:

pragma solidity ^0.8.0;

我們也可以使用大於或小於的操作,來描述版本的範圍,非常方便。

雖然 pragma keyword 還有其他用法,但我們不會在這篇文章研究。

Solidity 源文件的副檔名是 .sol

一切都從 Contract 開始

Solidity 語言中的 Contract 就類似 Swift 的 Class。Contract 包括狀態變數 (state variable)、函式 (function)、函式修飾符 (function modifier)、事件 (event)、錯誤 (error)、結構 (struct) 和列舉 (enum)。這次我們只會研究函式結構。

和 Class 一樣,我們需要為 Contract 命名,並以大括號開始和結束。

contract HelloSwiftFromSolidity {

}

狀態變數

狀態變數是在 contract 內宣告的變數。請注意,我們部署了這個信息之後,它就會儲存在區塊鏈的 contract storage 中。Solidity 編譯器會幫我們創建 getter 和 setter,所以我們不用費心這個部分。

contract HelloSwiftFromSolidity {  
	string hello;
}

現在,你應該注意到 Solidity 的每行語句都是以分號 ; 作結,這一點與 Swift 語言不同。

函式

像 Swift 一樣,我們在 contract 裡面或外面都可以宣告函式。函式可以執行一段程式碼。

contract HelloSwiftFromSolidity {  
	// visibility = public because access from outside  
    string public hello = "Hello Swift";  
    
    // visibility = public because access from outside  
    // view = just view the data  
    function helloSwift() public view returns(string memory) {
    	return hello;  
    }
 }

讓我們逐句拆解以上的程式碼。如果我們想從外面存取狀態變數,我們就需要將 visibility 型別設置為 public,而函式也要執行相同的操作。在這個範例中,如果函式回傳一些東西,我們可以將它標記為 view。它回傳一個字串,字串就會被儲存在記憶體中,並在完成執行後被移除。

可以儲存函式變數及回傳資料的地方包括:

  • memory:變數的生命週期僅限於函式範圍,而不會保存於任何地方。
  • storage:資料會被儲存在區塊鏈的智能合約 storage 中。
  • calldata:資料會被儲存在呼叫函數的外面,我們之後會再深入討論如何使用它。

函式型別

Solidity 中的函數可以執行指令及查看資料。當我們查看資料時,它可以是 viewpureviewpure 的不同之處,在於 pure 不會修改或讀取狀態變數。

function helloWorld() public pure returns(string memory) {  
	return "Hello World";
}

在以上的程式碼中,我們沒有讀取或修改區塊鏈的任何東西,只是回傳了一些資料。

總結

Solidity 語言可以用來撰寫適用於區塊鏈的智能合約,目前最流行的區塊鏈是 Ethereum。從 Swift 開發者的角度來看,兩者的語法非常相似,但語義卻非常不同。Solidity 每行語句都要以分號結尾。Solidity 的 Contract 與 Swift 的 Class 相似,兩者都可以包含狀態變數、函式和其他結構。

參考資料

本篇原文(標題:Solidity for Swift Developers: File Structure and Functions)刊登於作者 Medium,由 Kristaps Grinbergs 所著,並授權翻譯及轉載。
作者簡介:Kristaps Grinbergs,Apple 技術軟件工程師。Qminder 的共同創立者。swiftlybrief 的共同策展人。喜歡踏單車和貓。願意包容不同的人。純素主義者。
譯者簡介:Kelly Chan-AppCoda 編輯小姐。
作者
AppCoda 編輯團隊
此文章為客座或轉載文章,由作者授權刊登,AppCoda編輯團隊編輯。有關文章詳情,請參考文首或文末的簡介。
評論
很好! 你已成功註冊。
歡迎回來! 你已成功登入。
你已成功訂閱 AppCoda 中文版 電子報。
你的連結已失效。
成功! 請檢查你的電子郵件以獲取用於登入的連結。
好! 你的付費資料已更新。
你的付費方式並未更新。