Solidity

Solidity 修飾符:好還是壞?

  • September 28, 2021

我聽說過支持和反對 Solidity 修飾符的爭論。

一方面,它們使程式碼非常易讀,呼叫背後的意圖非常清晰。另一方面,它們增加了整體合約的大小,因為函式程式碼實際上是內聯插入來代替_關鍵字的(而不是僅僅呼叫函式程式碼)。Stack Too Deep此外,由於程式碼是內聯的,因此函式和修飾符共享相同的受限變數堆棧,如果使用的變數總數超過 16 個,則會導致錯誤。

你們有什麼感想?你贊成還是反對在你的程式碼中使用修飾符?

我經常發現我希望軟體客戶端能夠進行檢查,但我也想要一個修飾符以提高可讀性,所以它通常以這樣的方式結束:

modifier onlyIfAllowed() {
 require(isItOkay(args));
 _;
}

function isAllowed() public view returns(bool allowed) {
 allowed = ...
}

function safer() public onlyIfAllowed ... 

當然,也可以線上進行。

function inline() public {
 require(isAllowed());
 // carry on

歸根結底,這是個人喜好問題。我發現這樣寫更易讀:

function tricky() public onlyOwner onlyIfAllowed onlySomethingElse { ...

…因此該功能的實際目的不會與重複步驟混淆。在我看來,它更乾燥。並非所有人都同意。例如,Vyper 團隊認為修飾符是一種反特徵,它掩蓋了他們認為應該符合的重要邏輯。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/67502