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: avoidget_前缀被视为冗余:它没有携带任何额外语义信息——"返回最大值"这件事已经由函数名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_value或get_map_value;StorageVec、Vec的取值方法同样以get命名;call_frames.sw、hash.sw、bytes.sw等模块中也大量出现不带get_前缀的取值函数。
这种"动词即名称"的风格(Rust 生态称其为field()/method()风格)带来三重收益:
- 更简洁:去掉了冗余前缀,函数名即文档;
- 便于链接与 trait 设计:当在 trait 中定义接口时,
maximum_deposit()这样的签名更自然,也与标准库StorageMap::get这类已有接口保持气质一致; - 生态一致性:遵循与标准库相同的命名心理模型,减少新手在"到底该不该加
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::get、StorageVec::get等真实 API 中得到验证。对于任何编写 Sway 合约或库的开发者而言,遵循这一约定既能写出更简洁的代码,也能与整个 Sway 生态保持一致的命名心智模型。
【免费下载链接】sway🌴 Empowering everyone to build reliable and efficient smart contracts.项目地址: https://gitcode.com/GitHub_Trending/sw/sway
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考