1.代码注释:

和c风格是一样的

2.数据类型:

  • 值类型:
    • 类型
      关键字
      取值
      布尔型
      有符号整型
      无符号整形
      有符号定长浮点型
      无符号定长浮点型
  • 地址类型:
    • 地址类型表示以太坊地址,长度为20字节。
      .balance方法获得余额,也可以使用.transfer方法将余额转到另一个地址。
  • 引用类型/复合数据类型:
    • 数组 (字符串与bytes是特殊的数组,所以也是引用类型)
    • struct (结构体)
    • map (映射)

3.变量:

Solidity 支持三种类型的变量:
  • 状态变量 – 变量值永久保存在合约存储空间中的变量。
  • 局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。
  • 全局变量 – 保存在全局命名空间,用于获取区块链相关信息的特殊变量。
attention:Solidity 是一种静态类型语言,这意味着需要在声明期间指定变量类型。每个变量声明时,都有一个基于其类型的默认值。没有undefinednull的概念。
状态变量和局部变量的区别:
全局变量说明:
这些是全局工作区中存在的特殊变量,提供有关区块链和交易属性的信息。
名称
返回
blockhash(uint blockNumber) returns (bytes32)
给定区块的哈希值 – 只适用于256最近区块, 不包含当前区块。
block.coinbase (address payable)
当前区块矿工的地址
block.difficulty (uint)
当前区块的难度
block.gaslimit (uint)
当前区块的gaslimit
block.number (uint)
当前区块的number
block.timestamp (uint)
当前区块的时间戳,为unix纪元以来的秒
gasleft() returns (uint256)
剩余 gas
msg.data (bytes calldata)
完成 calldata
msg.sender (address payable)
消息发送者 (当前 caller)
msg.sig (bytes4)
calldata的前四个字节 (function identifier)
msg.value (uint)
当前消息的wei值
now (uint)
当前块的时间戳
tx.gasprice (uint)
交易的gas价格
tx.origin (address payable)
交易的发送方

4.变量作用域:

局部变量的作用域仅限于定义它们的函数,但是状态变量可以有三种作用域类型。
  • Public – 公共状态变量可以在内部访问,也可以通过消息访问。对于公共状态变量,将生成一个自动getter函数。
  • Internal – 内部状态变量只能从当前合约或其派生合约内访问。
  • Private – 私有状态变量只能从当前合约内部访问,派生合约内不能访问。

5.运算符:

和c一毛一样
  1. 算术运算符:
    1. +、-、*、/、%、++、--。
  1. 比较运算符:
    1. ==、!=、>、<、>=、<=。
  1. 逻辑运算符:
    1. &&、||、!
  1. 位运算符:
    1. &、|、^、~、<<、>>
  1. 赋值运算符:
    1. =、-=.........
  1. 条件运算符:
    1. ? :

6.循环语句和条件判断:

和c也是一毛一样

7.字符串:

Solidity 中,字符串值使用双引号(“)和单引号(‘)包括,字符串类型用string表示。字符串是特殊的数组,是引用类型。
Solidity提供字节与字符串之间的内置转换,可以将字符串赋给byte32类型变量。
bytes到字符串的转换:
可以使用string()构造函数将bytes转换为字符串。
示例
bytes到字符串的转换。
输出:

8.转义字符:

序号
转义字符
1
\n开始新的一行
2
\\反斜杠
3
\’单引号
4
\”双引号
5
\b退格
6
\f换页
7
\r回车
8
\t制表符
9
\v垂直制表符
10
\xNN表示十六进制值并插入适当的字节。
11
\uNNNN表示Unicode值并插入UTF-8序列。

9.数组:

🤔
数组成员详解

10.枚举:

枚举将一个变量的取值限制为几个预定义值中的一个。精确使用枚举类型有助于减少代码中的bug。
For Example:
考虑一个鲜榨果汁商店的应用程序,将玻璃杯的容量大小限制为:小、中、大。这将确保任何人不能购买其他容量的果汁。
将其部署到测试链。
首先单击 setLarge 按钮将值设置为 LARGE,然后单击 getChoice 获取所选的选项。
输出
单击 getDefaultChoice 按钮获得默认选项。
输出

11.结构体:

结构体和c是一样的:
定义结构体:
For Example:
一本书的信息:
  • Title
  • Author
  • Subject
  • Book ID
定义结构体,使用结构体,访问结构体中的成员。

12.映射(mapping)类型:

与数组和结构体一样,映射也是引用类型。下面是声明映射类型的语法。
  • _KeyType – 可以是任何内置类型,或者bytes和字符串。不允许使用引用类型或复杂对象。
  • _ValueType – 可以是任何类型。
注意
  • 映射的数据位置(data location)只能是storage,通常用于状态变量。
  • 映射可以标记为public,Solidity 自动为它创建getter。
示例
放到测试链
首先单击updateBalance按钮将值设置为10,然后查看日志输出:
输出

13.类型转换:

Solidity允许类型之间进行隐式转换和显式转换。
隐式转换时必须符合一定条件,不能导致信息丢失。例如,uint8可以转换为uint16,但是int8不可以转换为uint256,因为int8可以包含uint256中不允许的负值。
🏪
类型转换分析

14.数据位置:

🪨
数据位置