Files
SiMengWebSite_Notes/docs/notes/programming/solidity/basic-syntax.md

186 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Solidity 基础语法与数据类型
createTime: 2025/09/22 10:30:00
permalink: /programming/solidity/basic-syntax/
---
# Solidity 基础语法与数据类型~(≧∇≦)ノ
嗨~欢迎来到 Solidity 基础语法的学习时间!今天我们要一起探索 Solidity 这门神奇语言的基本结构和数据类型哦准备好了吗Let's go(๑>◡<)
## 智能合约的基本结构 🏗️
让我们先来看一个最简单的 Solidity 智能合约是什么样子的吧
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HelloWorld {
// 状态变量
string public greeting = "Hello, World!";
// 函数
function setGreeting(string memory _greeting) public {
greeting = _greeting;
}
function getGreeting() public view returns (string memory) {
return greeting;
}
}
```
是不是看起来有点像其他编程语言呀让我们来一点一点地了解它吧
## 版本声明和许可证 📜
Solidity 合约的最开始我们需要添加两行重要的声明
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
```
- **许可证声明**告诉别人你的代码使用什么许可证可以自由使用吗
- **版本声明**指定合约使用的 Solidity 编译器版本`^0.8.0` 表示可以使用 0.8.0 及以上的版本哦
## 数据类型 🌈
Solidity 有很多有趣的数据类型让我们来认识一下它们吧
### 值类型
这些类型在赋值时会直接复制值哦
#### 布尔型 (Boolean)
```solidity
bool public isActive = true;
bool public isPaused = false;
```
布尔型只有两个值`true` `false`就像开关一样简单(˘˘)
#### 整型 (Integer)
```solidity
int public negativeNumber = -42;
uint public positiveNumber = 42;
// 你还可以指定位数哦~
uint8 public smallNumber = 255; // 0-255
uint256 public bigNumber = 1000000000000000000; // 这是 1 以太币的 wei 值哦~
```
整型分为有符号`int`和无符号`uint`两种可以存储正数和负数呢
#### 地址型 (Address)
```solidity
address public owner = 0x71C7656EC7ab88b098defB751B7401B5f6d8976F;
// 可以转账的地址类型
address payable public recipient = payable(0x71C7656EC7ab88b098defB751B7401B5f6d8976F);
```
地址类型非常特别它用于存储以太坊账户的地址就像是账户的身份证号码一样`address payable` 还可以接收以太币转账呢
### 引用类型
这些类型在赋值时只会传递引用而不是复制整个值哦
#### 字符串 (String)
```solidity
string public message = "Hello, Solidity!";
string public name = "祀梦";
```
字符串用于存储文本数据就像你平时写的便签一样
#### 数组 (Array)
```solidity
// 固定大小的数组
uint[5] public fixedArray = [1, 2, 3, 4, 5];
// 动态大小的数组
uint[] public dynamicArray;
// 你还可以在函数中这样使用哦~
function addNumber(uint _number) public {
dynamicArray.push(_number);
}
```
数组就像是一个收纳盒可以按顺序存放多个相同类型的数据呢
#### 映射 (Mapping)
```solidity
// 映射:地址 => 余额
mapping(address => uint) public balances;
// 使用方式
function deposit() public payable {
balances[msg.sender] += msg.value;
}
```
映射是 Solidity 中非常强大的数据结构就像是一个魔法字典可以通过键快速找到对应的值
## 变量作用域 🔍
Solidity 变量有不同的作用域哦
### 状态变量
```solidity
contract MyContract {
// 状态变量:存储在区块链上的
uint public myStateVariable = 42;
}
```
状态变量是存储在区块链上的所有合约函数都可以访问它们就像是合约的公共记忆一样
### 局部变量
```solidity
function myFunction() public {
// 局部变量:只在函数内部可见
uint myLocalVariable = 100;
}
```
局部变量只在定义它们的函数内部可见函数执行结束后就会消失哦
### 全局变量
```solidity
function getSender() public view returns (address) {
// msg.sender 是一个全局变量,包含当前调用者的地址
return msg.sender;
}
```
全局变量是 Solidity 内置的特殊变量可以在任何地方使用它们提供了关于区块链和交易的重要信息呢
## 小练习 🏋️‍♀️
现在让我们来做一个小练习吧试着编写一个简单的计数器合约包含以下功能
1. 一个状态变量来存储计数值
2. 一个函数来增加计数
3. 一个函数来减少计数
4. 一个函数来获取当前计数值
你可以做到吗相信自己你一定可以的(̀ㅂ́)و
## 写在最后~💌
今天我们学习了 Solidity 的基础语法和数据类型这些都是构建智能合约的基石哦虽然一开始可能会觉得有点复杂但只要多练习你一定会越来越熟练的下节课我们将学习 Solidity 的函数和修饰器敬请期待吧
如果有任何问题欢迎随时提问哦让我们一起在区块链的世界里快乐地探索吧( 3 ̄)