A property decorated with the keyword static
is a static property, which must be initialized when the property is declared. In the function of the contract, it can be accessed through the contract name and the property name (with a dot in the middle). The contract prefix can be omitted if used in the same contract where it is defined.
contract Test { static int x = 12; public function unlock(int y) { Test.x = y; // using prefix int z = Test.x + y; // without prefix z = x; } }
A variable declared using the const
keyword cannot be changed once it is initialized, as shown below:
contract Test { const int x; constructor(int x) { // initialize a const property this.x = x; // good } public function equal(const int y) { y = 1; // <-- error const int a = 36; a = 11; // <-- error } }
A property can be declared using both. This is typically used to define constants.
contract Test { static const int PERCENT = 100; }
Add the following static
properties to the TicTacToe
contract and decorate it with const
.
N
, type is int
, value is 9
. Indicates the byte length of the storage state of the contract. Tic-tac-toe game has a total of 9 board positions.EMPTY
, the type is int
, and the value is 0
. Indicates that the board position has not yet been placedALICE
, the type is int
, and the value is 1
. Indicates that the board position was placed by the player alice
BOB
, the type is int
, and the value is 2
. Indicates that the board position was placed by the player bob