Solidity – 类型
Solidity 是一种静态类型语言,这意味着应该指定每个变量的类型。数据类型允许编译器检查变量的正确使用。声明的类型有一些称为Zero-State的默认值,例如对于 bool,默认值为 False。同样,其他静态类型语言 Solidity 具有值类型和引用类型,定义如下:
值类型
值类型变量存储自己的数据。这些是solidity提供的基本数据类型。这些类型的变量总是按值传递。变量在函数参数或赋值中使用的任何地方都被复制。 solidity 中的值类型数据类型如下:
- Boolean:此数据类型仅接受两个值 True 或 False。
- Integer:此数据类型用于存储整数值, int和uint分别用于声明有符号和无符号整数。
- 定点数:根据 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;
}
输出 :