此学习内容适用于有基本编程功底学习。
本人懒得编辑,你照着写代码,然后仔细看我的注释,注释就是教程
`<script>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
//这里开始是合约关键词 contract 是php 中的类名启动词 halo 是类名
contract halo{
// 定义字符串 公开参数hh
string public hh\="halo wrod";
//函数公开显示
//pure: 函数不会修改合约的存储状态,也不会读取任何存储变量。
//view: 函数可以读取存储变量,但不能修改它们。
//nonpure: 函数可以修改合约的存储状态,也可以读取存储变量。
//错误示范1。此代码报错 ParserError: Expected '{' but got 'return',意味预期之外的{ 原因是return 和 returns 在英语中复数的关系,因此return<returns
//故此处的错误修改应该为 public view returns()
//function errorTest1() public view return (string memory){
// return hh;
//}
//storage存储变量: 存储在区块链上,并永久存在。
//memory内存变量: 仅存在于函数执行期间,函数执行结束后消失。
function fu1() public view returns (string memory){
return hh;
}
//如果想直接返回字符串应该如何编写呢? 这里就用到了pure 意思为,一个公开的函数不修改,不存储,单纯一个函数功能,返回了一个集,集中包含一个内存变量执行后消失的字符串
function fu2() public pure returns (string memory){
return "test ";
}
}
<script>第二组<script>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
//模拟一个数据存储和取出数据
contract getAndVue{
//定义一个值用于存储捕获的数据
uint256 vue1;
//定义一个捕获函数
function put(uint256 renYiBianLiang) public {
vue1\=renYiBianLiang;
}
//定义一个获取函数
function getVue() public view returns(uint256) {
return vue1;
}
//说明,put方法是将一个未知的数据赋值,put是通过外界输入传递,函数内部赋值
//getVue是从vue1中取出数据,vue1是一个动态变量,来源与put函数获取的值。
//学习点:为什么这个合约没有使用到storage或者memory?
//因为,合约会自动推测,一般默认在函数外,合约内定义的变量都是storage,是一个存储变量,存储在区块上,但是
//需要特别注意,复杂数据类型,则需要声明变量,比如:
//function myFunction(uint256[] memory numbers) public {
// 使用内存数组 numbers
//}
/***
这里自我追问,那么是不是代表所有的结构体或者数组的复杂数据都只能用memory?什么是结构体,什么是数组?
回答,不是
结构体如下:
一个变量 Person {
string name;名字
uint256 age;年龄
}
数组结构如下:
storage uint256[] storage myNumbers;
基于数组和结构体的storage声明例子:
contract MyContract {
storage Person storage person; // 存储结构体 Person 这里声明了两个storage类型的变量
struct Person {
string name;
uint256 age;
}
function setPerson(string memory _name, uint256 _age) public {
person.name = _name;
person.age = _age;
}
function getPerson() public view returns (string memory, uint256) {
return (person.name, person.age);
}
}
数组的:
contract MyContract {
storage uint256[] storage myNumbers; // 存储数组 myNumbers
function setNumbers(uint256[] memory numbers) public {
myNumbers = numbers; // 将内存数组复制到存储数组中
}
function getNumbers() public view returns (uint256[] memory) {
return myNumbers; // 返回存储数组的副本
}
}
好了,学会了结构体和数组体,我们开始自己写两个类型的数据变动吧,学习如何使用结构体和数组进行数据的存储和取出
*/
}
`