Solidity - Panduan Gaya
Style Guide membantu menjaga konsistensi tata letak kode dan membuat kode lebih mudah dibaca. Berikut adalah praktik terbaik berikut saat menulis kontrak dengan Solidity.
Tata Letak Kode
Indentation- Gunakan 4 spasi sebagai ganti tab untuk mempertahankan tingkat indentasi. Hindari mencampur spasi dengan tab.
Two Blank Lines Rule - Gunakan 2 baris kosong antara dua definisi kontrak.
pragma solidity ^0.5.0;
contract LedgerBalance {
//...
}
contract Updater {
//...
}
One Blank Line Rule- Gunakan 1 baris kosong antara dua fungsi. Dalam kasus hanya deklarasi, tidak perlu memiliki baris kosong.
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 - Satu baris tidak boleh melewati 79 karakter sehingga pembaca dapat dengan mudah mengurai kode.
Wrapping rules- Argumen pertama berada di baris baru tanpa membuka tanda kurung. Gunakan inden tunggal per argumen. Elemen pemutusan); harus menjadi yang terakhir.
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 - Pengkodean UTF-8 atau ASCII sebaiknya digunakan.
Imports - Pernyataan impor harus ditempatkan di bagian atas file tepat setelah deklarasi pragma.
Order of Functions - Fungsi harus dikelompokkan sesuai visibilitasnya.
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 - Hindari spasi langsung di dalam tanda kurung, tanda kurung, atau tanda kurung.
Control structures- Braces harus terbuka pada baris yang sama dengan deklarasi. Tutup baris mereka sendiri dengan mempertahankan lekukan yang sama. Gunakan spasi dengan kurung kurawal buka.
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- Gunakan aturan di atas untuk kawat gigi. Selalu tambahkan label visibilitas. Label visibilitas harus diutamakan sebelum pengubah kustom apa pun.
function kill() public onlyowner {
selfdestruct(owner);
}
Mappings - Hindari spasi putih saat mendeklarasikan variabel pemetaan.
mapping(uint => uint) map;
mapping(address => bool) registeredAddresses;
mapping(uint => mapping(bool => Data[])) public data;
mapping(uint => mapping(uint => s)) data;
Variable declaration - Hindari spasi saat mendeklarasikan variabel array.
uint[] x; // not unit [] x;
String declaration - Gunakan tanda kutip ganda untuk mendeklarasikan string, bukan tanda kutip tunggal.
str = "foo";
str = "Hamlet says, 'To be or not to be...'";
Urutan Tata Letak
Elemen harus diatur dalam urutan berikut.
Pernyataan Pragma
Pernyataan impor
Interfaces
Libraries
Contracts
Di dalam Interfaces, library atau kontrak pesanan harus seperti -
Ketik deklarasi
Variabel status
Events
Functions
Konvensi penamaan
Kontrak dan Perpustakaan harus diberi nama menggunakan CapWords Style. Misalnya, SmartContract, Owner dll.
Nama kontrak dan Perpustakaan harus sesuai dengan nama file mereka.
Jika ada beberapa kontrak / pustaka dalam satu file, gunakan nama kontrak / pustaka inti.
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 {
//...
}
Nama Struct
- Gunakan CapWords Style seperti SmartCoin.Nama Acara
- Gunakan CapWords Style seperti Deposit, AfterTransfer.Nama Fungsi
- Gunakan gaya mixedCase seperti inisiateSupply.Variabel Lokal dan Negara Bagian
- Gunakan MixedCase Style seperti creatorAddress, supply.Konstanta
- Gunakan semua huruf kapital dengan garis bawah untuk memisahkan kata-kata seperti MAX_BLOCKS.Nama Pengubah
- Gunakan Style mixCase seperti onlyAfter.Nama Enum
- Gunakan CapWords Style seperti TokenGroup.