Нараян Прасти



Download 9,22 Mb.
Pdf ko'rish
bet24/47
Sana26.02.2022
Hajmi9,22 Mb.
#472912
1   ...   20   21   22   23   24   25   26   27   ...   47
Bog'liq
Прасти Н. - Блокчейн. Разработка приложений - 2018


Глава 3 
____________________________________ 
[ 68 ] 
___________________________________ 
ры) — это 
memory
, по умолчанию для локальных переменных — это 
storage
. Для 
статических переменных обычно также назначается расположение 
storage
.
Расположение данных имеет значение, поскольку от него зависит поведение опера-
торов присваивания: 
присваивание между переменными в хранилище (
storage
) и переменными в па-
мяти (
memory
) всегда создает независимую копию данных. Но операция присваи-
вания между сложными типами данных, если они оба расположены в памяти, не 
приводит к созданию копии; 
присваивание статической переменной (даже если источником является другая 
статическая переменная) всегда создает независимую копию данных; 
вы не можете присвоить данные сложного типа, находящиеся в памяти, статиче-
ской переменной, находящейся в локальном хранилище; 
в случае, когда статическая переменная присваивается локальной переменной, 
локальная переменная получает указатель на статическую переменную. Это зна-
чит, что локальная переменная становится указателем. 
Что такое типы данных? 
Solidity — это язык со статической типизацией, то есть типы переменных должны 
быть заранее определены. По умолчанию все биты переменных сброшены 
в ноль. Если переменная объявлена внутри функции, областью видимости пере-
менной является вся функция, независимо от места объявления. 
Рассмотрим различные типы данных в языке Solidity: 
самый простой тип данных — 
bool
. Он может хранить только булевы значения 
true
или 
false

типы 
uint8

uint16

uint24
… 
uint256
применяются для хранения беззнаковых
целых чисел длиной 8 битов, 16 битов, 24 бита … 256 битов соответственно. 
Аналогично, 
int8

int16
… 
int256
хранят целые числа со знаком длиной 8 битов, 
16 битов … 256 битов соответственно. Служебные слова 
uint
и 
int
являются 
псевдонимами для 
uint256
и 
int256
. Служебные слова 
ufixed
и 
fixed
обозначают 
дробные числа. Типы 
ufixed0x8

ufixed0x16
… 
ufixed0x256
— это беззнаковые 
дробные числа длиной 8 битов, 16 битов … 256 битов соответственно. Если тре-
буется сохранить число с разрядностью большей, чем 256, то используется
256-битовый тип, и в этом случае хранится приближенное (усеченное) значение; 
тип 
address
применяется для хранения шестнадцатеричного литерала длиной до 
20 байтов, используемого для адресов Ethereum. Тип 
address
расширяется свой-
ствами 
balance
и 
send
: свойство 
balance
применяется при проверке баланса опре-
деленного адреса Ethereum, а свойство 
send
— при переводе эфира на указанный 
адрес. Метод 
send
получает сумму в Wei, которую надо перевести, и возвращает 
значение 
true
или 
false
в зависимости от того, был ли перевод успешно выпол-


Разработка 
смарт-контрактов 
____________________________________ 
[ 69 ] 
___________________________________ 
нен. Сумма в Wei вычитается из контракта, который вызвал метод 
send
. Вы мо-
жете использовать в коде Solidity префикс 
0x
для обозначения шестнадцатерич-
ного представления значений переменных. 
Массивы 
Solidity поддерживает обычные и байтовые массивы. Размер массива может быть 
постоянным или динамически изменяемым. Также поддерживаются многомерные 
массивы.
bytes1

bytes2

bytes3
, ..., 
bytes32
— это типы байтовых массивов. 
byte
является 
псевдонимом типа 
bytes1
.
Рассмотрим пример использования обычных массивов (листинг 3.2). 
Листинг 3.2. Пример использования массивов 
contract sample{ 
//массив с динамическим размером 
//везде, где виден литерал массива, создается новый массив
//здесь myArray хранит массив с размером [0, 0].
//тип массива определяется типом его значений, 
//следовательно, вы не можете назначить пустой литерал массива 
int[] myArray = [0, 0]; 
function sample(uint index, int value){ 
//индекс массива должен иметь тип uint256 
myArray[index] 

value; 
//myArray2 хранит указатель на myArray 
int[] 
myArray2 

myArray; 
//массив постоянного размера в памяти 
//здесь мы вынуждены применить uint24, потому что 
//максимальное значение 99999, 
//и требуется 24 бита для хранения 
//данное ограничение действует для литералов в памяти, 
//потому что стоимость памяти высока. 
//так как [1, 2, 99999] - это тип uint24, следовательно 
//myArray3 тоже 
//должен иметь такой же тип, чтобы хранить указатель 
uint24[3] memory myArray3 = [1, 2, 99999]; 


Download 9,22 Mb.

Do'stlaringiz bilan baham:
1   ...   20   21   22   23   24   25   26   27   ...   47




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish