Sway 智能合约命名规范:Getter 函数应省略 `get_` 前缀
2026/9/12 9:30:29 网站建设 项目流程

Sway 智能合约命名规范:Getter 函数应省略get_前缀

【免费下载链接】sway🌴 Empowering everyone to build reliable and efficient smart contracts.项目地址: https://gitcode.com/GitHub_Trending/sw/sway

本文基于 Sway 官方 Style Guide 中 getters.md 的规范,讲解在 Sway 语言中如何为返回值函数命名:鼓励省略get_前缀,直接以语义化动词命名(如maximum_deposit()),并剖析该规范在 Sway 标准库(sway-lib-std)中的实际落地证据。读完本文,你将掌握 Sway 中 Getter 函数的推荐命名风格、规避反模式,并理解这一约定背后的生态一致性考量,可直接应用于智能合约与库的开发实践。

背景:返回值函数的两类命名风格

在编程实践中,返回某个值的函数(通常称为 Getter)主要有两种命名风格:

  • 带前缀式:在函数名开头加上get_,例如get_maximum_deposit()
  • 省略前缀式:直接以表达含义的动词或名词命名,例如maximum_deposit()

这两种风格在主流语言中各有拥趸(例如 Java 传统上偏好getXxx(),而 Rust 生态则普遍省略前缀)。而在 Sway 中,官方 Style Guide 给出了明确且唯一的推荐。

Encouraged:省略get_前缀

Sway 官方规范明确鼓励省略get_前缀,直接使用语义化名称。完整可编译的示例来自仓库中的 style-guide 代码包 getters/src/lib.sw:

library; // ANCHOR: use fn maximum_deposit() -> u64 { 100 } // ANCHOR_END: use

其中library;声明这是一个 Sway 库文件,maximum_deposit()是一个无参、返回u64的 Getter 函数。函数名直接描述"它能返回什么",而不是机械地强调"获取"这一动作。

该规范与 Sway 的 命名规范(Name Convention) 保持一致:函数一律使用snake_case命名,即每个单词小写并用下划线分隔,例如maximum_deposit

Discouraged:避免get_前缀

相反地,以下写法被明确列为反模式(Discouraged):

// ANCHOR: avoid fn get_maximum_deposit() -> u64 { 100 } // ANCHOR_END: avoid

get_前缀被视为冗余:它没有携带任何额外语义信息——"返回最大值"这件事已经由函数名maximum_deposit完整表达。这也是官方文档将get_前缀版代码通过avoidanchor 标记、将省略版通过useanchor 标记的根本原因。

注:上述两个示例同属于 getters 示例包,其声明为name = "getters"entry = "lib.sw",并依赖仓库内的sway-lib-std标准库,可直接在本地用forc build编译验证。

源码佐证:标准库中的命名实践

该规范不仅是文档层面的建议,更在 Sway 标准库(sway-lib-std)中得到了一致贯彻。例如:

  • StorageMap的取值方法直接命名为get(见 storage_map.sw 中pub fn get(self, key: K) -> StorageKey<V>),而不是get_valueget_map_value
  • StorageVecVec的取值方法同样以get命名;
  • call_frames.swhash.swbytes.sw等模块中也大量出现不带get_前缀的取值函数。

这种"动词即名称"的风格(Rust 生态称其为field()/method()风格)带来三重收益:

  1. 更简洁:去掉了冗余前缀,函数名即文档;
  2. 便于链接与 trait 设计:当在 trait 中定义接口时,maximum_deposit()这样的签名更自然,也与标准库StorageMap::get这类已有接口保持气质一致;
  3. 生态一致性:遵循与标准库相同的命名心理模型,减少新手在"到底该不该加get_"上的决策成本。

适用边界与实践建议

在将这一规范付诸实践时,可参考以下原则:

  • 以返回值为主的函数(Getter)推荐省略前缀,直接用名词性/语义化动词命名;
  • 当函数带有明显副作用或语义动词时,如store()transfer()mint(),同样不额外加get_,保持命名统一;
  • 公开 API 与 trait 接口尤其应遵循该规范,因为它们是跨合约、跨库的公共契约,命名风格影响面最广;
  • 若历史代码中已存在get_前缀的函数,可在不破坏 ABI 的前提下逐步迁移(注意:合约 ABI 中的函数名变更会影响已部署合约的调用方,迁移前需评估兼容性)。

小结

Sway 官方 Style Guide 对 Getter 函数的结论清晰而简单:省略get_前缀。推荐写法maximum_deposit()而非get_maximum_deposit(),并且这一约定已在sway-lib-std标准库的StorageMap::getStorageVec::get等真实 API 中得到验证。对于任何编写 Sway 合约或库的开发者而言,遵循这一约定既能写出更简洁的代码,也能与整个 Sway 生态保持一致的命名心智模型。

【免费下载链接】sway🌴 Empowering everyone to build reliable and efficient smart contracts.项目地址: https://gitcode.com/GitHub_Trending/sw/sway

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询