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

5.1 KiB
Raw Blame History

title, createTime, permalink
title createTime permalink
Solidity 基础语法与数据类型 2025/09/22 10:30:00 /programming/solidity/basic-syntax/

Solidity 基础语法与数据类型~(≧∇≦)ノ

嗨~欢迎来到 Solidity 基础语法的学习时间!今天我们要一起探索 Solidity 这门神奇语言的基本结构和数据类型哦准备好了吗Let's go(๑>◡<๑)

智能合约的基本结构 🏗️

让我们先来看一个最简单的 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 合约的最开始,我们需要添加两行重要的声明:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
  • 许可证声明:告诉别人你的代码使用什么许可证,可以自由使用吗?
  • 版本声明:指定合约使用的 Solidity 编译器版本,^0.8.0 表示可以使用 0.8.0 及以上的版本哦~

数据类型 🌈

Solidity 有很多有趣的数据类型,让我们来认识一下它们吧~

值类型

这些类型在赋值时会直接复制值哦~

布尔型 (Boolean)

bool public isActive = true;
bool public isPaused = false;

布尔型只有两个值:truefalse,就像开关一样简单!(๑˘ᴗ˘๑)

整型 (Integer)

int public negativeNumber = -42;
uint public positiveNumber = 42;

// 你还可以指定位数哦~
uint8 public smallNumber = 255;  // 0-255
uint256 public bigNumber = 1000000000000000000;  // 这是 1 以太币的 wei 值哦~

整型分为有符号(int)和无符号(uint)两种,可以存储正数和负数呢~

地址型 (Address)

address public owner = 0x71C7656EC7ab88b098defB751B7401B5f6d8976F;

// 可以转账的地址类型
address payable public recipient = payable(0x71C7656EC7ab88b098defB751B7401B5f6d8976F);

地址类型非常特别,它用于存储以太坊账户的地址,就像是账户的身份证号码一样~address payable 还可以接收以太币转账呢!

引用类型

这些类型在赋值时只会传递引用,而不是复制整个值哦~

字符串 (String)

string public message = "Hello, Solidity!";
string public name = "祀梦";

字符串用于存储文本数据,就像你平时写的便签一样~

数组 (Array)

// 固定大小的数组
uint[5] public fixedArray = [1, 2, 3, 4, 5];

// 动态大小的数组
uint[] public dynamicArray;

// 你还可以在函数中这样使用哦~
function addNumber(uint _number) public {
    dynamicArray.push(_number);
}

数组就像是一个收纳盒,可以按顺序存放多个相同类型的数据呢~

映射 (Mapping)

// 映射:地址 => 余额
mapping(address => uint) public balances;

// 使用方式
function deposit() public payable {
    balances[msg.sender] += msg.value;
}

映射是 Solidity 中非常强大的数据结构,就像是一个魔法字典,可以通过键快速找到对应的值~

变量作用域 🔍

在 Solidity 中,变量有不同的作用域哦:

状态变量

contract MyContract {
    // 状态变量:存储在区块链上的
    uint public myStateVariable = 42;
}

状态变量是存储在区块链上的,所有合约函数都可以访问它们,就像是合约的公共记忆一样~

局部变量

function myFunction() public {
    // 局部变量:只在函数内部可见
    uint myLocalVariable = 100;
}

局部变量只在定义它们的函数内部可见,函数执行结束后就会消失哦~

全局变量

function getSender() public view returns (address) {
    // msg.sender 是一个全局变量,包含当前调用者的地址
    return msg.sender;
}

全局变量是 Solidity 内置的特殊变量,可以在任何地方使用,它们提供了关于区块链和交易的重要信息呢~

小练习 🏋️‍♀️

现在让我们来做一个小练习吧!试着编写一个简单的计数器合约,包含以下功能:

  1. 一个状态变量来存储计数值
  2. 一个函数来增加计数
  3. 一个函数来减少计数
  4. 一个函数来获取当前计数值

你可以做到吗?相信自己,你一定可以的!(๑•̀ㅂ•́)و✧

写在最后~💌

今天我们学习了 Solidity 的基础语法和数据类型,这些都是构建智能合约的基石哦~虽然一开始可能会觉得有点复杂,但只要多练习,你一定会越来越熟练的!下节课我们将学习 Solidity 的函数和修饰器,敬请期待吧~

如果有任何问题,欢迎随时提问哦~让我们一起在区块链的世界里快乐地探索吧!(づ ̄ 3 ̄)づ