Если - 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 IfElse {
    function foo(uint x) public  pure returns (uint){
        if (x < 10){
            return 0;
        } else if (x < 20){
            return 1;
        } else {
            return 2;
        }
    }
    function ternary(uint _x) public pure returns (uint){
        // if (_x < 10){
            // return 1;
            // }
            //return 2;
            //сокращеное написание if/else
            // ? троичный оператор
            return _x < 10 ? 1 : 2;
    
    }
}

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

Посмотрим на части кода:

  1. Лицензия и версия Solidity:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;
  • // SPDX-License-Identifier: MIT — это комментарий, указывающий, что код лицензирован под открытой лицензией MIT.
  • pragma solidity ^0.8.23; — эта строка говорит о том, что для компиляции данного контракта нужен компилятор Solidity версии 0.8.23 или выше, но ниже 0.9.0.
  1. Контракт и функции:
contract IfElse {
  • contract IfElse — объявление нового смарт-контракта с именем IfElse.
function foo(uint x) public pure returns (uint){
  • function foo(uint x) public pure returns (uint) — функция foo, принимающая один аргумент x типа uint (беззнаковое целое), доступна для всех (public), не взаимодействует с данными контракта (pure) и возвращает значение типа uint.

    Внутри этой функции используется конструкция if-else для ветвления:

    • Если x меньше 10 (if (x < 10)), функция возвращает 0.
    • Если x равно или больше 10, но меньше 20 (else if (x < 20)), возвращает 1.
    • В противном случае (else), возвращается 2.
function ternary(uint _x) public pure returns (uint){
    return _x < 10 ? 1 : 2;
}
  • function ternary(uint _x) public pure returns (uint) — функция с именем ternary, которая также принимает один аргумент _x, доступна для всех, не изменяет и не читает данные контракта и возвращает значение типа uint.

    В этой функции вместо if-else используется тернарный оператор (_x < 10 ? 1 : 2), который является сокращением для простой конструкции if-else:

    • Если условие _x < 10 верно, функция возвращает 1.
    • Если условие неверно, функция возвращает 2.

Тернарный оператор это как быстрое решение "если-иначе". Задаем вопрос, верно ли условие слева от знака вопроса? Если верно, то выбираем первое значение (слева от двоеточия), если нет — второе (правее двоеточия).

В общем и целом, этот контракт содержит две функции, предназначенные для осуществления простых математических операций сравнения числа, переданного в функцию, с фиксированными порогами (10 и 20) и возвращение соответствующих результатов в зависимости от того, какие условия выполняются.