Глава 3
____________________________________
[ 74 ]
___________________________________
function
reset(){
//теперь длина myArray равна нулю
delete
myArray;
//myNumber теперь будет обнулен,
//но
myMap
не
изменится
delete
myStruct;
}
function deleteKey(int key){
//здесь
мы
удаляем
ключ
delete
myStruct.myMap[key];
}
}
Преобразование элементарных типов
Все сущности языка Solidity, которые не являются массивами, строками, структу-
рами, перечислениями и сопоставлениями, относятся к элементарным типам.
Если в операторе встречаются два разных элементарных типа, то компилятор пыта-
ется выполнить неявное преобразование типа одного из операндов к типу другого
операнда. В общем случае неявное преобразование возможно, если оно имеет се-
мантический смысл и не приводит к потере информации. Например,
uint8
можно
преобразовать в
uint16
, а
uint128
можно преобразовать в
uint256
. Но
int8
нельзя
преобразовать в
uint256
, потому что
uint256
не может хранить отрицательные чис-
ла. Кроме того, целые числа без знака могут быть преобразованы в байты того же
или большего размера, но не наоборот. Любой тип, который может быть преобра-
зован в
uint160
, также может быть преобразован в тип
address
.
Solidity поддерживает и явное преобразование типов. Если компилятор не допуска-
ет неявное преобразование типов, вы можете попробовать применить явное преоб-
разование. Тем не менее, настоятельно рекомендуется избегать явного преобразо-
вания, потому что оно может дать неожиданные результаты.
Давайте рассмотрим пример явного преобразования:
uint32 a = 0x12345678;
uint16 b = uint16(a); // теперь b = 0x5678
Здесь мы преобразовываем
uint32
в
uint16
в явном виде, то есть превращаем боль-
ший тип в меньший. Следовательно, старшие разряды числа отбрасываются.
Ключевое слово
var
В Solidity есть ключевое слово
var
, служащее для объявления переменных. В этом
случае тип переменной определяется автоматически, в зависимости от типа первого
значения, которое будет присвоено переменной. Как только первое значение при-
Разработка
смарт-контрактов
____________________________________
[ 75 ]
___________________________________
своено, тип переменной фиксируется. Если вы захотите присвоить этой переменной
значение другого типа, это вызовет преобразование типа.
Вот простой пример, который демонстрирует применение
var
:
int256 x = 12;
//тип переменной y будет тоже int256
var y = x;
uint256 z= 9;
//здесь возникнет исключение, потому что
//неявное преобразование типа int в uint невозможно
y = z;
Помните, что ключевое слово
var
нельзя использовать при объявлении массивов
и сопоставлений, а также при объявлении параметров функции и статических
переменных.
Управляющие структуры
Solidity поддерживает управляющие структуры
if
,
else
,
while
,
for
,
break
,
continue
,
return
и конструкцию
? :
3
.
В листинге 3.8 приведены примеры использования управляющих структур.
Листинг 3.8. Примеры управляющих структур
contract sample{
int a = 12;
int[]
b;
function
sample()
{
//оператор "==" вызовет исключение для сложных типов данных
if(a
==
12)
{
}
else if(a == 34)
{
}
else
{
}
var temp = 10;
3
Тернарный оператор условия.
Do'stlaringiz bilan baham: |