2024 年如何学习 Solidity
credit: https://soliditylang.org/
我想你现在应该知道,Solidity 这种编程语言)是什么了。
以防你不知道,别担心,我马上就会解释。
简而言之,Solidity 是一种用于构建智能合约的编程语言。
智能合约是在去中心化方式下执行的自主计算机程序 —— 无需中心化或第三方实体。它们基本上是一组控制在区块链上执行协议/交易的计算机代码。
为了让你第一手了解智能合约是如何在 Solidity 中编写的,下面是一些 Solidity 智能合约代码。该代码展示了如何在 Solidity 中使用变量、结构体(一种数据类型)、函数等等。
正如可以轻松推断的那样,该智能合约创建了一个新用户(programmaticPerson),提供了为该用户分配某些数据(通过 person 结构)的功能,然后还提供了获取有关该用户添加的个人数据的功能。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract PracticeContract {
uint private myNumber;
struct PersonStruct {
string name;
uint favouriteNumber;
bool isMale;
}
PersonStruct private programmaticPerson;
function setPerson(
string memory _name,
uint _favouriteNumber,
bool _isMale
) public {
programmaticPerson = PersonStruct({
name: _name,
favouriteNumber: _favouriteNumber,
isMale: _isMale
});
}
function getProgrammaticPerson() public view returns (PersonStruct memory) {
return programmaticPerson;
}
// Function to get the name of the programmatic person
function getProgrammaticPersonName() public view returns (string memory) {
return programmaticPerson.name;
}
// Function to get the favorite number of the programmatic person
function getProgrammaticPersonFavouriteNumber() public view returns (uint) {
return programmaticPerson.favouriteNumber;
}
// Function to get the gender of the programmatic person
function getProgrammaticPersonGender() public view returns (bool) {
return programmaticPerson.isMale;
}
}
在本文中,我将分享关于 Solidity 的一些重要细节,并为你提供如何最好地学习 Solidity 的专业指导 —— 尤其是如果你打算在 2024 年成为区块链/智能合约开发人员。
在本文中,我将更多地使用上述代码片段,以帮助你理解并更好地传达信息。
根据 Solidity 网站的说法,
Solidity 是“一种为在 Ethereum 上运行的智能合约设计的静态类型花括号编程语言”。
尽管 Solidity 也可以像这篇文章中所解释的那样在 Solana 上使用,但 Solidity 最初是为在 Ethereum 上编程智能合约而创建的。
现在你已经对 Solidity 是什么有了一个很好的介绍,让我们继续解释你应该如何在 2024 年学习 Solidity —— 尤其是如果你打算成为智能合约开发人员。
本文最适合那些完全不懂编程的人 —— 尤其是那些刚刚开始软件工程/开发职业生涯的人 —— 以 Solidity 作为他们的第一种编程语言。对于那些有一些编程经验但以前没有学习或使用过 Javascript 的人来说,这也是一个完美的资源。
还要注意,本文的灵感来自于我的个人经验。我希望我的经验能帮助你发现一种更好的学习 Solidity 的方法,这将更有益。
以下是一些关于 2024 年学习智能合约开发 Solidity 的关键注意事项。
我推荐这样做的主要原因是:
- 作为 Solidity 开发人员,当与你的智能合约一起工作时,你很可能需要 Javascript。
无论你是有经验的程序员,擅长使用不同的编程语言,还是刚刚开始涉足技术领域。只要你打算成为智能合约开发人员,学习 Javascript 都是一个难以逃避的任务。
一个实际的例子是在使用 Hardhat 时。Hardhat 是一个基于 Javascript 的智能合约开发框架/套件,为区块链开发人员提供了必要的工具堆栈,以便处理智能合约。它是一个全能工具,用于开发、测试、部署甚至与智能合约交互。
在使用 Hardhat 时,即使你的智能合约是用 Solidity 编写的,你仍然需要 Javascript 来编写测试和脚本,比如你的部署脚本,或者与智能合约提供的功能进行交互的脚本。
此外,在部署智能合约后与其交互(尤其是在前端应用程序中)时,你仍然需要类似 Ethers js 和Web3 js或更强大的工具如 Moralis 和Wagmi — 它们都是基于 Javascript 的。
这一切都归结为一个事实 —— 作为区块链开发人员,你肯定会在职业生涯的某个时候需要 Javascript。
你可能仍然在想为什么需要“首先学习 Javascript” — 下一个观点解决了这个问题。
- Javascript 是一种更简单和松散的编程语言 —— 因此比 Solidity 更容易学习。
Javascript 是一种简单的编程语言。更重要的是,它是一种动态类型的(你无需声明类型)和松散类型的(它能够做“超级傻”的事情,比如将一个字符串添加/连接到/与一个数字)编程语言,与 Solidity 这种静态类型的编程语言不同。
所有这些使用 Javascript 的缺点对于第一次学习它的人来说都是潜在的优势。Javascript 的松散和动态类型的特性使你免受“好奇的发脾气的编译器”的困扰,直到你把代码写对。这些抱怨可能令人沮丧 —— 尤其对于新手来说。
学习 Solidity 之前学习 Javascript 是个好主意的第三个原因与语法相似性有关。
- 从语法上看,Solidity 与 Javascript 非常相似。
下面的两个代码片段展示了如何在 Solidity 和 Javascript 中编写上述智能合约中选择的两个函数。
// solidity code
// SPDX-License-Identifier: MIT
...
function setPerson(
string memory _name,
uint _favouriteNumber,
bool _isMale
) public {
programmaticPerson = PersonStruct({
name: _name,
favouriteNumber: _favouriteNumber,
isMale: _isMale
});
}
function getProgrammaticPerson() public view returns (PersonStruct memory) {
return programmaticPerson;
}
...
对比一下 javascript
// javascript code
...
function setPerson(
_name,
_favouriteNumber,
_isMale
) {
programmaticPerson = {
name: _name,
favouriteNumber: _favouriteNumber,
isMale: _isMale
};
/* do something with programmaticPerson like
using it to update a database, then 'returning' to end the function*/
}
function getProgrammaticPerson() {
return programmaticPerson;
}
...
上面的代码片段非常实际地展示了 Javascript 和 Solidity 之间语法的相似性。
两种语法非常相似 —— 除了两种语言中一些额外的外来/独特概念,比如它们如何不同地声明变量、类型和返回类型、可见性和存储 —— 这些都在 Solidity 中,以及更多其他差异。
结合关于语法相似性的上述因素和之前的因素 —— 尤其是关于 Javascript 更容易学习的因素,学习 Javascript 然后再学习 Solidity 就是理所当然的选择。
在学习 Javascript 之后,我建议你在继续学习 Solidity 之前还要跨越另一个障碍。那就是 Typescript。
如果你不是软件开发新手,我敢打赌你现在已经听说过 Typescript 了。但以防万一你还没有听说过;
Typescript 是 Javascript 的超集。不完全是一种“编程语言”。而更像是一个为 Javascript 提供类型检查的工具/编译器。
术语Javascript 的超集简单地意味着每个 Javascript 都是
有效的 Typescript。Typescript 通过引入类型简单地改进了 Javascript,因此它是 Javascript 的静态类型版本,弥补了它的缺点。
以下是三个代码片段,展示了如何在 Javascript、Typescript 和 Solidity 中以类似的方式编写相同的代码。
// javascript code
...
let programmaticPerson
function setPerson(
_name,
_favouriteNumber,
_isMale
) {
programmaticPerson = {
name: _name,
favouriteNumber: _favouriteNumber,
isMale: _isMale
};
/* do something with programmaticPerson like
using it to update a database, then 'returning' to end the function */
}
...
// typescript code
...
type Person = {
name: string;
favouriteNumber: number;
isMale: boolean;
}
let programmaticPerson: Person;
function setPerson(
_name: string,
_favouriteNumber: number,
_isMale: boolean
): void {
programmaticPerson = {
name: _name,
favouriteNumber: _favouriteNumber,
isMale: _isMale
};
/* do something with programmaticPerson like
using it to update a database, then 'returning' to end the function */
}
...
// solidity code
...
struct Person {
string name;
uint favouriteNumber;
bool isMale;
}
Person private programmaticPerson;
function setPerson(
string memory _name,
uint _favouriteNumber,
bool _isMale
) public {
programmaticPerson = Person({
name: _name,
favouriteNumber: _favouriteNumber,
isMale: _isMale
});
}
...
经过仔细观察上面的三个代码片段,很明显可以推断出 Typescript 代码更像 Solidity。
这是非常有道理的。
尽管在学习 Solidity 之前学习 Typescript 非常重要(特别是在当今的 JS/TS 生态系统中,Typescript 更受青睐于 Javascript,因为它有助于编写更健壮和可靠的代码),但仍不强制建议你在学习 Solidity 之前学习 Typescript — 只要你已经了解或可以使用另一种静态类型的编程语言。
如果你没有以前使用过任何静态类型的编程语言的经验,那么我建议你抽出一些时间学习 Typescript,然后再学习 Solidity。一两周的努力应该足够了。
如果你只了解 Javascript(或其他动态类型的编程语言),那么学习 Solidity 会显得更加困难和复杂。这主要是因为 Solidity 中的静态类型。
第一次使用类型可能会有挑战性。我真的不建议你用 Solidity 这样的编程语言来学习如何处理类型。
这里的总结非常简单:首先学习 Javascript,然后学习 Typescript,因为从 Javascript 过渡到 Typescript 的过程会更容易一些。
现在你已经准备好学习 Solidity 了。
但根据我多年学习编程语言和/或工具、库和框架的经验,我仍然不建议你立刻“全面投入”。
我建议你先从速成课程开始。
寻找一些(至少 3 个)Solidity 速成内容或课程(视频、文章、PDF 或其他,— 视频不应超过 2 小时),然后学习它们。
通过参加速成课程,你将轻松掌握基本概念。这也将帮助你更快地进行编码和构建真实项目 — 从而提高满足感和使学习过程更有成就感。
这个来自 Dapp University Youtube 频道的在 20 分钟内学会 Solidity!视频是我向任何正在使用或打算使用 Solidity 的人推荐的资源 — 无论是完全新手还是经验丰富的区块链专家。
一定要看一下。
如果你从头开始按照本文的蓝图操作,在这一点上(在遵循第 1、2 和 3 点之后),你将对智能合约有一定程度的了解。
现在你可以全面投入并参加任何 Solidity 开发者课程 — 无论课程有多庞大。
就推荐课程而言,这些是很棒的课程。
[中文课程] - OpenSpace 的线下集训营, 二个月的系统学习,大量的实践,让你快熟成为世界一流的区块链开发者。
[英文课程] - 由 Patrick Collins 提供的 使用 JavaScript 学习区块链、Solidity 和全栈 Web3 开发 — 32 小时课程 。
朋友们,这就是我在这篇文章中尽力分享的内容:“我认为 2024 年学习 Solidity 的最佳方式”。
希望对你有所帮助。
干杯!
本文最初发布在 Web3 Mastery 网站上。探索 Web3 Mastery 获取更多类似本文的精彩内容。
本文由 AI 翻译,欢迎小伙伴们来校对。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!