Sway Boolean 类型(bool)完全指南:true/false 语义、取反运算符与标准库实践

Sway Boolean 类型(bool)完全指南:true/false 语义、取反运算符与标准库实践 Sway Boolean 类型bool完全指南true/false 语义、取反运算符与标准库实践【免费下载链接】sway Empowering everyone to build reliable and efficient smart contracts.项目地址: https://gitcode.com/GitHub_Trending/sw/swaySway 是一门为 FuelVM 设计的静态类型智能合约语言其内建built-in原始类型bool用于表示真/假二元状态是条件逻辑、权限校验与结果验证的基石。本文基于 Sway 语言参考文档docs/reference/src/documentation/language/built-ins/boolean.md结合仓库内标准库源码与官方代码示例系统讲解 Sway 中布尔值的定义、运算、取反语义及其底层实现帮助你写出严谨、可验证的合约条件逻辑。什么是 Boolean 类型在 Sway 中Boolean布尔是一种只有两种可能取值的类型true真或false假。从底层表示看布尔值由数值1或0表达语言为其提供了true与false两个具名值使代码可读性更高。Sway 是一门静态类型语言所有值的类型在编译期必须已知详见 Built-in Types 概览。bool是 Sway 提供的原始primitive类型之一与u8/u16/u32/u64/u256、str/str[n]、b256等类型并列其他复合类型数组、元组、结构体、枚举均由这些原始类型构造而来。从语法解析层面看true与false属于字面量literal的一种sway-ast中的Literal::Bool携带LitBool节点sway-ast/src/literal.rs其中LitBoolType明确区分True与False两种枚举变体并可无缝转换为 Rust 的boolLitBoolType::True trueLitBoolType::False false这印证了 Sway 布尔字面量与底层二值语义的一一对应关系。声明布尔变量声明布尔变量与声明其他类型的变量并无二致通过let关键字绑定编译器通常能自动推断类型let is_true true; // 推断为 bool let is_false false; // 推断为 bool也可以显式标注类型let is_enabled: bool true;官方文档中给出的完整示例位于 docs/reference/src/code/language/built-ins/booleans/src/lib.sw该示例以library;声明为一个库项目其清单文件 Forc.toml 中entry lib.sw并依赖标准库stdlibrary; fn returns_true() - bool { let is_true true; let is_false false; // implicitly returns the Boolean value of true is_true !is_false }该函数依次声明了一个true与一个false布尔变量对is_false施加取反运算符!得到true再与is_true做相等比较最终隐式返回比较结果Sway 中函数最后一个表达式的值即返回值无需显式return参见 函数返回值。由于true true成立该函数总是返回true。布尔表达式与条件逻辑布尔值最常见的用途是条件判断与验证。Sway 中if、else if、else表达式的分支条件必须求值为bool参见 if 表达式let number 5u64; if number % 3 0 { // 条件为 true 时执行 } else if number % 4 0 { // 上一条件为 false、本条件为 true 时执行 } else { // 以上所有条件均为 false 时的兜底分支 }条件按定义顺序依次求值一旦某个条件为true即进入对应分支并跳过其余条件所有条件均为false时进入else兜底分支。此外if在 Sway 中是表达式可以与let组合if let形式例如对枚举变体进行模式匹配——无论哪种用法其判断结果都是true/false布尔值。除if之外比较运算符、!、、等的求值结果同样是bool。在标准库中相等比较由PartialEqtrait 提供impl PartialEq for bool通过__eq(self, other)内建指令实现并配套impl Eq for bool {}sway-lib-std/src/ops.sw而!则由默认方法neq定义为(self.eq(other)).not()即对相等结果取反sway-lib-std/src/ops.sw。一元取反运算符!Sway 提供一元unary取反运算符!用于翻转布尔值true→falsefalse→true这一运算符由标准库中的Nottrait 支撑。Not定义方法fn not(self) - Self其文档示例甚至用自定义结构体展示!可被重载到用户类型上sway-lib-std/src/ops.sw。对bool的内建实现如下sway-lib-std/src/ops.swimpl Not for bool { fn not(self) - Self { __eq(self, false) } }值得注意的是bool的取反并非单纯的位翻转而是通过内建指令__eq与false比较得出若self为truetrue false得false若self为falsefalse false得true从而精确完成语义取反。这也解释了为什么示例中!is_false求值为true。Nottrait 同时为u8/u16/u32/u64/u256/b256等类型实现了按位取反__not但布尔取反与整数按位取反语义不同使用时注意区分。标准库中的布尔实践标准库sway-lib-std/src大量以bool作为返回值或参数是学习布尔用法的绝佳参考断言assert(condition: bool)接收一个布尔条件条件为false时回滚交易sway-lib-std/src/assert.sw是合约验证的核心工具assert(returns_true());调用方身份校验auth模块的caller_is_external() - bool返回当前调用是否为外部调用sway-lib-std/src/auth.sw常配合require/assert实现访问控制。零值判断Address::is_zero(self) - bool、AssetId::is_zero(self) - bool等谓词方法用于校验地址/资产 ID 是否为零值见 sway-lib-std/src/address.sw 与 sway-lib-std/src/asset_id.sw。容器状态查询Bytes::is_empty(self) - bool判断字节数组是否为空sway-lib-std/src/bytes.sw。这类返回bool的谓词函数 assert/require消费布尔值的模式是 Sway 智能合约中可读且高效的验证范式。常见误区与要点!只作用于布尔值!对bool是逻辑取反若用于数值类型则触发Not的按位取反实现两者语义不同勿混用。比较运算结果必为bool、!、、的返回值类型是bool可直接作为if条件或传入assert。隐式返回函数体最后一个表达式即为返回值returns_true示例正是利用这一点省略了return关键字。编译期类型确定Sway 静态类型系统要求布尔值在编译期确定类型let x true;会由编译器推断为bool无需也可显式标注。总结Sway 的bool类型以true/false两个具名值承载二元状态底层对应数值1/0由sway-ast的LitBool字面量解析支撑。它在if表达式、比较运算、断言与权限校验中无处不在一元运算符!通过标准库Nottrait内部实现为__eq(self, false)完成逻辑取反。掌握布尔语义是编写安全、可验证的 Sway 智能合约的第一步。进一步阅读if 表达式、变量、内置类型总览。【免费下载链接】sway Empowering everyone to build reliable and efficient smart contracts.项目地址: https://gitcode.com/GitHub_Trending/sw/sway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考