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.