Sağlamlık - Stil Rehberi

Stil Kılavuzu, kod düzeninin tutarlı olmasına ve kodu daha okunaklı hale getirmeye yardımcı olur. Solidity ile sözleşme yazarken aşağıdaki en iyi uygulamaları takip edin.

Kod Düzeni

  • Indentation- Girinti seviyesini korumak için sekme yerine 4 boşluk kullanın. Boşlukları sekmelerle karıştırmaktan kaçının.

  • Two Blank Lines Rule - İki sözleşme tanımı arasında 2 Boş satır kullanın.

pragma solidity ^0.5.0;

contract LedgerBalance {
   //...
}
contract Updater {
   //...
}
  • One Blank Line Rule- İki işlev arasında 1 Boş satır kullanın. Sadece beyanname olması durumunda satır boş bırakılmasına gerek yoktur.

pragma solidity ^0.5.0;

contract A {
   function balance() public pure;
   function account() public pure;
}
contract B is A {
   function balance() public pure {
      // ...
   }
   function account() public pure {
      // ...
   }
}
  • Maximum Line Length - Okuyucuların kodu kolayca ayrıştırabilmesi için tek bir satır 79 karakteri geçmemelidir.

  • Wrapping rules- İlk argüman parantez açmadan yeni satırda olmalıdır. Bağımsız değişken başına tek girinti kullanın. Sonlandırma öğesi); sonuncusu olmalı.

function_with_a_long_name(
   longArgument1,
   longArgument2,
   longArgument3
);
variable = function_with_a_long_name(
   longArgument1,
   longArgument2,
   longArgument3
);
event multipleArguments(
   address sender,
   address recipient,
   uint256 publicKey,
   uint256 amount,
   bytes32[] options
);
MultipleArguments(
   sender,
   recipient,
   publicKey,
   amount,
   options
);
  • Source Code Encoding - UTF-8 veya ASCII kodlaması tercihen kullanılacaktır.

  • Imports - Import ifadeleri pragma bildiriminden hemen sonra dosyanın en üstüne yerleştirilmelidir.

  • Order of Functions - Fonksiyonlar, görünürlüklerine göre gruplandırılmalıdır.

pragma solidity ^0.5.0;

contract A {
   constructor() public {
      // ...
   }
   function() external {
      // ...
   }

   // External functions
   // ...

   // External view functions
   // ...

   // External pure functions 
   // ...

   // Public functions
   // ...

   // Internal functions
   // ...

   // Private functions
   // ...
}
  • Avoid extra whitespaces - Parantez, köşeli parantez veya parantez içinde boşluk bırakmayın.

  • Control structures- Kaşlı ayraçlar beyannameyle aynı satırda açılmalıdır. Aynı girintiyi koruyarak kendi satırlarını kapatın. Açma parantezli bir boşluk kullanın.

pragma solidity ^0.5.0;

contract Coin {
   struct Bank {
      address owner;
      uint balance;
   }
}
if (x < 3) {
   x += 1;
} else if (x > 7) {
   x -= 1;
} else {
   x = 5;
}
if (x < 3)
   x += 1;
else
   x -= 1;
  • Function Declaration- Diş telleri için yukarıdaki kuralı kullanın. Her zaman bir görünürlük etiketi ekleyin. Görünürlük etiketi, herhangi bir özel değiştiriciden önce gelmelidir.

function kill() public onlyowner {
   selfdestruct(owner);
}
  • Mappings - Eşleme değişkenlerini bildirirken beyaz boşluklardan kaçının.

mapping(uint => uint) map;
mapping(address => bool) registeredAddresses;
mapping(uint => mapping(bool => Data[])) public data;
mapping(uint => mapping(uint => s)) data;
  • Variable declaration - Dizi değişkenlerini bildirirken boşluklardan kaçının.

uint[] x;  // not unit [] x;
  • String declaration - Tek tırnak yerine bir dizeyi bildirmek için çift tırnak kullanın.

str = "foo";
str = "Hamlet says, 'To be or not to be...'";

Düzen Sırası

Öğeler aşağıdaki sırayla düzenlenmelidir.

  • Pragma ifadeleri

  • İçe aktarma beyanları

  • Interfaces

  • Libraries

  • Contracts

Arayüzler, kitaplıklar veya sözleşmelerde sıra şu şekilde olmalıdır:

  • Tip bildirimleri

  • Durum değişkenleri

  • Events

  • Functions

Adlandırma kuralları

  • Sözleşme ve Kitaplık, CapWords Stili kullanılarak adlandırılmalıdır. Örneğin, SmartContract, Owner vb.

  • Sözleşme ve Kitaplık adı, dosya adlarıyla eşleşmelidir.

  • Bir dosyada birden fazla sözleşme / kitaplık olması durumunda, ana sözleşme / kitaplık adını kullanın.

Owned.sol

pragma solidity ^0.5.0;

// Owned.sol
contract Owned {
   address public owner;
   constructor() public {
      owner = msg.sender;
   }
   modifier onlyOwner {
      //....
   }
   function transferOwnership(address newOwner) public onlyOwner {
      //...
   }
}

Congress.sol

pragma solidity ^0.5.0;

// Congress.sol
import "./Owned.sol";

contract Congress is Owned, TokenRecipient {
   //...
}
  • Struct İsimleri

    - SmartCoin gibi CapWords Stilini kullanın.

  • Etkinlik İsimleri

    - Deposit, AfterTransfer gibi CapWords Stillerini kullanın.

  • İşlev Adları

    - initialSupply gibi mixedCase Stilini kullanın.

  • Yerel ve Eyalet değişkenleri

    - creatorAddress, supply gibi mixedCase Style kullanın.

  • Sabitler

    - MAX_BLOCKS gibi kelimeleri ayırmak için tüm büyük harfleri alt çizgi ile kullanın.

  • Değiştirici Adları

    - mixCase Stilini onlyAfter gibi kullanın.

  • Enum Adları

    - TokenGroup gibi CapWords Stilini kullanın.