📜  Solidity – 类型

📅  最后修改于: 2022-05-13 01:55:06.817000             🧑  作者: Mango

Solidity – 类型

Solidity 是一种静态类型语言,这意味着应该指定每个变量的类型。数据类型允许编译器检查变量的正确使用。声明的类型有一些称为Zero-State的默认值,例如对于 bool,默认值为 False。同样,其他静态类型语言 Solidity 具有值类型和引用类型,定义如下:

值类型

值类型变量存储自己的数据。这些是solidity提供的基本数据类型。这些类型的变量总是按值传递。变量在函数参数或赋值中使用的任何地方都被复制。 solidity 中的值类型数据类型如下:

  • Boolean:此数据类型仅接受两个值 True 或 False。
  • Integer:此数据类型用于存储整数值, intuint分别用于声明有符号无符号整数
  • 定点数:根据 Solidity 文档,solidity 尚不完全支持这些数据类型。对于不同大小的有符号和无符号定点数,它们可以分别声明为固定不固定
  • 地址:地址包含一个 20 字节的值,代表以太坊地址的大小。地址可用于获取余额或通过余额转账方式分别转账。
  • 字节和字符串:字节用于存储固定大小的字符集,而字符串用于存储等于或大于一个字节的字符集。字节长度从 1 到 32,而字符串具有动态长度。 Byte 的一个优点是它使用的 gas 更少,因此在我们知道数据长度的情况下使用起来会更好。
  • 枚举:用于创建用户定义的数据类型,用于为整数常量分配名称,使合约更具可读性、可维护性且不易出错。枚举的选项可以用从 0 开始的无符号整数值表示。

示例:在下面的示例中,合约类型初始化了不同类型的值类型的值。

Solidity
// Solidity program to demonstrate
// value types
pragma solidity ^ 0.5.0;   
   
// Creating a contract
contract Types {   
 
    // Initializing Bool variable
    bool public boolean = false;
    
    // Initializing Integer variable
    int32 public int_var = -60313;
 
    //  Initializing String variable
    string public str = "GeeksforGeeks";
 
    // Initializing Byte variable
    bytes1 public b = "a";
     
    // Defining an enumerator
    enum my_enum { geeks_, _for, _geeks } 
 
    // Defining a function to return
    // values stored in an enumerator
    function Enum() public pure returns(
      my_enum) {   
        return my_enum._geeks;   
    }   
}


Solidity
// Solidity program to demonstrate
// Reference Types
pragma solidity ^0.4.18;
  
// Creating a contract
contract mapping_example {
 
    // Defining an array   
    uint[5] public array
      = [uint(1), 2, 3, 4, 5] ;
     
    // Defining a Structure
    struct student {
        string name;
        string subject;
        uint8 marks;
    }
 
    // Creating a structure object
    student public std1;
 
    // Defining a function to return
    // values of the elements of the structure
    function structure() public view returns(
      string memory, string memory, uint){
        std1.name = "John";
        std1.subject = "Chemistry";
        std1.marks = 88;
        return (
          std1.name, std1.subject, std1.marks);
    }
     
    // Creating a mapping
    mapping (address => student) result;
    address[] student_result;
}


输出 :

值类型输出

参考类型

引用类型变量存储数据的位置。他们不直接共享数据。在引用类型的帮助下,两个不同的变量可以引用同一个位置,其中一个变量的任何变化都会影响另一个变量。下面列出了solidity中的参考类型:

  • 数组:数组是一组相同数据类型的变量,其中变量具有称为索引的特定位置。通过使用索引位置,可以访问所需的变量。数组大小可以是固定的或动态的。
  • Struct: Solidity 允许用户以结构的形式创建和定义自己的类型。该结构是一组不同的类型,即使它不可能包含其自身类型的成员。结构体是一个引用类型变量,可以同时包含值类型和引用类型
  • 映射:映射是最常用的引用类型,它将数据存储在键值对中,其中键可以是任何值类型。它就像任何其他编程语言中的哈希表或字典一样,可以通过键检索数据。

示例:在下面的示例中,合约类型初始化了各种引用类型的值。

坚固性

// Solidity program to demonstrate
// Reference Types
pragma solidity ^0.4.18;
  
// Creating a contract
contract mapping_example {
 
    // Defining an array   
    uint[5] public array
      = [uint(1), 2, 3, 4, 5] ;
     
    // Defining a Structure
    struct student {
        string name;
        string subject;
        uint8 marks;
    }
 
    // Creating a structure object
    student public std1;
 
    // Defining a function to return
    // values of the elements of the structure
    function structure() public view returns(
      string memory, string memory, uint){
        std1.name = "John";
        std1.subject = "Chemistry";
        std1.marks = 88;
        return (
          std1.name, std1.subject, std1.marks);
    }
     
    // Creating a mapping
    mapping (address => student) result;
    address[] student_result;
}


输出 :

引用类型输出