Solidity: 从菜鸟到英雄 - 第 4 天

本文介绍了Solidity中的变量(包括状态变量、局部变量和全局变量)、数据类型(如uint、bool、address、string等)以及函数的概念和常用修饰符(public、private、view、pure等)。并通过一个简单的MyProfile合约示例,演示了如何存储和更新名称,以及如何返回当前名称。文章还提供了一个小挑战,鼓励读者创建一个新的智能合约。

Solidity: 从菜鸟到英雄 — 第 4 天 | 变量、数据类型和函数

👋 嘿,区块建造者们,

欢迎回到 30 天 Solidity 新兵训练营的第 4 天! 如果你一直在关注 — 真是太棒了! 到目前为止,你已经编写了你的第一个智能合约,探索了 Remix,并且已经熟悉了 Hardhat。 今天,我们将深入研究 Solidity 的核心构建块 — 变量、数据类型和函数。

无论你以前是否编写过代码,还是这是你第一次编写代码,你都会发现一旦掌握了这些基本要素,Solidity 就非常直观。

🧱 变量:基础

在 Solidity 中,变量是我们如何在合约中存储和管理数据的方式。 变量主要有三种类型:

1. 状态变量

  • 永久存储在区块链上。
  • 函数外部声明。
  • 修改需要消耗 gas
uint public age; // 这是一个状态变量
address public owner;

uint 是无符号整数(仅限整数),public 使其可以在合约外部访问。

2. 局部变量

  • 仅存在于函数内部
  • 临时存储在内存中。
  • 消耗 gas(除非返回或在交易中使用)。
function getAge() public view returns (uint) {
    uint tempAge = age; // 局部变量
    return tempAge;
}

3. 全局变量

  • 由 Solidity 提供,用于提供与区块链相关的信息
  • 示例:msg.senderblock.timestampblock.number
function getSender() public view returns (address) {
    return msg.sender; // 全局变量
}

🔢 数据类型:你可以存储什么

Solidity 支持多种数据类型,包括:

  • uint — 无符号整数(无负数)
  • int — 有符号整数(可以是负数)
  • booltruefalse
  • address — 存放以太坊地址
  • string — 文本值(存储在链上,因此请谨慎使用)
  • bytes — 底层字节数组

例子:

string public name = "Priya";
bool public isActive = true;

🧠 函数:你的合约的大脑

函数定义了合约的逻辑和操作。

function multiply(uint a, uint b) public pure returns (uint) {
    return a * b;
}

常见的函数修饰符:

  • public:任何人都可以访问
  • private:仅在此合约内可用
  • view:读取状态但不更改它
  • pure:不读取或修改状态
  • internal 在合约及其派生合约中
  • external 只能从外部访问

函数是奇迹发生的地方 — 从铸造 NFT 到转移代币。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract MyContract {
    uint public number; // 状态变量

    function setNumber(uint _num) public {
        number = _num; // 修改状态变量
    }

    function getBlockTime() public view returns (uint) {
        return block.timestamp; // 使用全局变量
    }
}

✍️ 今天的迷你挑战

在 Remix 上创建一个新的智能合约,执行以下操作:

✅ 存储你的名字

✅ 具有更新名称的函数

✅ 返回当前名称

这是一个好的开始:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyProfile {
    string public name;    function setName(string memory _name) public {
        name = _name;
    }    function getName() public view returns (string memory) {
        return name;
    }
}

尝试修改它以添加年龄或布尔值!

🚀 明天即将到来 — 第 5 天:

我们将探索条件语句、循环和事件 — 合约逻辑背后的控制流!

保持好奇心,保持一致。

  • 原文链接: coinsbench.com/solidity-...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
CoinsBench
CoinsBench
https://coinsbench.com/