типы данных - demonoved/A-trial-run-in-solidity GitHub Wiki

// SPDX-License-Identifier: MIT
// compiler version must be greater than or equal to 0.8.20 and less than 0.9.0
pragma solidity ^0.8.23;
contract Primitives{
    bool public boo = true;
    /* uint означает целое число без остатка, не отрицательные числа
    uint8   до 0 to 2 ** 8 - 1
        uint16  до 0 to 2 ** 16 - 1
        ...
        uint256 до 0 to 2 ** 256 - 1
        */
    uint8 public u8 = 1;
    uint public u256 = 456;
    uint public u = 123; //uint = uint256
    /* int тоже самое что и uint только отрицательное
    int256 до -2 ** 255 to 2 ** 255 - 1
    int128 до -2 ** 127 to 2 ** 127 - 1 */
    int8 public i8 = -1;
    int public i256 = 456;
    int public i = -123;//int = int256
    //минимальный и максимальный int
    int public minInt = type(int).min;
    int public maxInt = type(int).max;
    address public addr = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c;
    /* тип данных byte это последовательность байтов 
    фиксированный массив байтов
    динамический массив байтов */
    bytes1 a = 0xb5; //[10110101]
    bytes1 b = 0x56; //[01010110]
    //значения по умолчанию 
    // неназначеным переменным будут присвоены значения по умолчанию 
    bool public defaultboo;  // false
    uint public defaultuint; // 0
    int public defaultint;   // 0 
    address public  defaultaddr; // 0x0000000000000000000000000000000000000000
}
  1. В начале кода объявляется лицензия SPDX-License-Identifier, которая сообщает о том, что код распространяется под MIT лицензией.

  2. Далее указывается версия компилятора Solidity, использование которого является обязательным для компиляции данного контракта pragma solidity ^0.8.23;. Контракт совместим с версиями компилятора Solidity начиная с версии 0.8.23 до версии 0.9.0 (не включительно).

  3. Объявляется контракт Primitives, внутри которого идет демонстрация использования простых типов данных (примитивов) в Solidity, таких как булевый тип (bool), целые числа со знаком (int) и без знака (uint), адреса (address) и байтовые массивы (bytes).

  4. Определяются переменные разных типов с указанием их видимости как public, что автоматически создает getter функции для этих переменных:

    • boo — булевая переменная, инициализируется значением true.
    • u8, u256, и u — беззнаковые целочисленные переменные (uint) различных размеров (8 бит, 256 бит и снова 256 бит соответственно). u является синонимом uint256.
    • i8, i256, и i — целочисленные переменные со знаком (int) снова различных размеров (8 бит, 256 бит и 256 бит). Аналогично i равно int256.
    • minInt и maxInt — переменные, представляющие минимально и максимально возможные значения для типа int соответственно.
    • addr — переменная типа address, инициализирована конкретным адресом.
  5. Объявляются две байтовые переменные (bytes1) a и b, каждая инициализирована своим значением в шестнадцатеричном представлении: 0xb5 и 0x56 соответственно.

  6. Дальше идут переменные, инициализированные значениями по умолчанию defaultboo, defaultuint, defaultint, defaultaddr. В Solidity переменные, если они не инициализированы, автоматически получают значение по умолчанию: для булевого типа — false, для целочисленных типов — 0, для адресов — 0x0000000000000000000000000000000000000000, что означает адрес без указанного значения (пустой адрес).

Весь этот код представляет демонстрацию того, как в Solidity создаются и инициализируются различные примитивные типы данных, а также как они ведут себя по умолчанию, если не инициализированы явно. Это полезно для новичков при изучении основных концепций языка и особенностей типов данных в контексте блокчейна Ethereum.