Carbon布尔类型与逻辑运算 #
一、布尔类型概述 #
布尔类型 bool 表示逻辑值,只有两个可能的值:true(真)和 false(假)。布尔类型是条件判断和逻辑运算的基础。
二、布尔值 #
2.1 布尔字面量 #
carbon
var is_true: bool = true;
var is_false: bool = false;
let Enabled: bool = true;
let Disabled: bool = false;
2.2 布尔变量 #
carbon
var is_active: bool = true;
var has_permission: bool = false;
var is_valid: bool = true;
// 修改布尔值
is_active = false;
has_permission = true;
2.3 默认值 #
carbon
var flag: bool; // 使用前必须初始化
flag = false;
三、比较运算 #
3.1 相等比较 #
carbon
var a: i32 = 10;
var b: i32 = 10;
var c: i32 = 20;
var eq: bool = a == b; // true
var ne: bool = a != c; // true
3.2 大小比较 #
carbon
var x: i32 = 10;
var y: i32 = 20;
var lt: bool = x < y; // true (小于)
var gt: bool = x > y; // false (大于)
var le: bool = x <= y; // true (小于等于)
var ge: bool = x >= y; // false (大于等于)
3.3 字符串比较 #
carbon
var s1: String = "Hello";
var s2: String = "World";
var eq: bool = s1 == s2; // false
var lt: bool = s1 < s2; // true (字典序)
3.4 浮点数比较 #
carbon
var a: f64 = 0.1 + 0.2;
var b: f64 = 0.3;
// 直接比较可能不准确
// var eq: bool = a == b; // 可能为false
// 推荐使用近似比较
var epsilon: f64 = 1e-9;
var approx_eq: bool = (a - b).Abs() < epsilon; // true
四、逻辑运算 #
4.1 逻辑与 (and) #
carbon
var a: bool = true;
var b: bool = false;
var result: bool = a and b; // false
// 短路求值:如果第一个为false,不计算第二个
var x: i32 = 0;
var check: bool = (x != 0) and (10 / x > 1); // 安全,不会除以零
4.2 逻辑或 (or) #
carbon
var a: bool = true;
var b: bool = false;
var result: bool = a or b; // true
// 短路求值:如果第一个为true,不计算第二个
var y: i32 = 5;
var check: bool = (y > 0) or (ComputeExpensiveValue()); // 不调用函数
4.3 逻辑非 (not) #
carbon
var a: bool = true;
var b: bool = false;
var not_a: bool = not a; // false
var not_b: bool = not b; // true
// 常用于条件取反
var is_empty: bool = s.Length() == 0;
var not_empty: bool = not is_empty;
4.4 逻辑运算优先级 #
carbon
// not > and > or
var result: bool = not a and b or c;
// 等价于: ((not a) and b) or c
// 使用括号明确优先级
var result2: bool = not (a and b) or c;
五、条件表达式 #
5.1 if表达式 #
carbon
var age: i32 = 20;
var is_adult: bool = age >= 18;
if (is_adult) {
Print("成年人");
}
5.2 if-else表达式 #
carbon
var score: i32 = 75;
var passed: bool = score >= 60;
if (passed) {
Print("通过");
} else {
Print("未通过");
}
5.3 三元运算符 #
carbon
var age: i32 = 20;
var status: String = if age >= 18 then "成年" else "未成年";
// 更复杂的表达式
var score: i32 = 85;
var grade: String =
if score >= 90 then "A"
else if score >= 80 then "B"
else if score >= 70 then "C"
else if score >= 60 then "D"
else "F";
六、布尔函数 #
6.1 返回布尔值的函数 #
carbon
fn IsEven(n: i32) -> bool {
return n % 2 == 0;
}
fn IsPositive(n: i32) -> bool {
return n > 0;
}
// 使用
if (IsEven(4)) {
Print("偶数");
}
6.2 布尔参数 #
carbon
fn Process(data: [i32], verbose: bool) -> i32 {
if (verbose) {
Print("处理 {0} 个元素", data.Length());
}
return data.Length();
}
Process(items, true); // 详细输出
Process(items, false); // 静默处理
6.3 谓词函数 #
carbon
// 谓词函数通常以Is、Has、Can等开头
fn IsEmpty(s: String) -> bool {
return s.Length() == 0;
}
fn HasPermission(user: User, perm: String) -> bool {
// 检查权限
return true;
}
fn CanAccess(user: User, resource: Resource) -> bool {
// 检查访问权限
return true;
}
七、布尔转换 #
7.1 从其他类型转换 #
carbon
// 整数转布尔
var n: i32 = 42;
var b1: bool = bool(n); // true (非零为true)
var zero: i32 = 0;
var b2: bool = bool(zero); // false
// 字符串转布尔
var s1: String = "true";
var b3: bool = bool(s1); // true
var s2: String = "false";
var b4: bool = bool(s2); // false
7.2 转换为字符串 #
carbon
var b: bool = true;
var s: String = String(b); // "true"
var b2: bool = false;
var s2: String = String(b2); // "false"
八、布尔与位运算 #
8.1 位与运算 #
carbon
var a: bool = true;
var b: bool = false;
var bit_and: bool = a & b; // false
8.2 位或运算 #
carbon
var a: bool = true;
var b: bool = false;
var bit_or: bool = a | b; // true
8.3 位异或运算 #
carbon
var a: bool = true;
var b: bool = true;
var bit_xor: bool = a ^ b; // false
8.4 逻辑运算 vs 位运算 #
carbon
// 逻辑运算:短路求值
var result1: bool = a and b; // 如果a为false,不计算b
// 位运算:不短路
var result2: bool = a & b; // 总是计算两个操作数
九、布尔数组 #
9.1 创建布尔数组 #
carbon
var flags: [bool; 3] = (true, false, true);
var all_true: [bool; 5] = (true, true, true, true, true);
9.2 布尔数组操作 #
carbon
var flags: [bool; 4] = (true, false, true, false);
// 检查是否全为true
var all: bool = flags.All(); // false
// 检查是否有true
var any: bool = flags.Any(); // true
// 统计true的数量
var count: i32 = flags.Count(true); // 2
十、实际应用 #
10.1 输入验证 #
carbon
fn ValidateUser(name: String, age: i32) -> bool {
var name_valid: bool = name.Length() >= 2;
var age_valid: bool = age >= 0 and age <= 150;
return name_valid and age_valid;
}
if (ValidateUser("Alice", 25)) {
Print("验证通过");
}
10.2 状态检查 #
carbon
class User {
var is_active_: bool;
var is_verified_: bool;
var is_premium_: bool;
fn CanAccessPremiumContent(me) -> bool {
return me.is_active_ and me.is_verified_ and me.is_premium_;
}
fn IsEligibleForTrial(me) -> bool {
return me.is_active_ and not me.is_premium_;
}
}
10.3 特性开关 #
carbon
let FeatureAEnabled: bool = true;
let FeatureBEnabled: bool = false;
fn ProcessWithFeatures() {
if (FeatureAEnabled) {
// 执行特性A
}
if (FeatureBEnabled) {
// 执行特性B
}
}
十一、最佳实践 #
11.1 使用有意义的命名 #
carbon
// 好的命名
var is_valid: bool = true;
var has_permission: bool = false;
var can_edit: bool = true;
// 避免的命名
var flag: bool = true;
var f: bool = false;
var status: bool = true;
11.2 直接使用布尔值 #
carbon
// 好的做法
if (is_valid) {
// ...
}
// 避免
if (is_valid == true) {
// ...
}
// 避免
if (is_valid == false) {
// ...
}
// 使用not
if (not is_valid) {
// ...
}
11.3 简化条件表达式 #
carbon
// 复杂的条件
var is_valid: bool = (age >= 18) and (age <= 65) and (not is_blocked) and (has_permission);
// 分解为多个变量
var age_valid: bool = age >= 18 and age <= 65;
var access_valid: bool = not is_blocked and has_permission;
var is_valid: bool = age_valid and access_valid;
十二、常见错误 #
12.1 赋值与比较混淆 #
carbon
var x: i32 = 10;
// 正确:比较
if (x == 10) {
Print("等于10");
}
// 错误:赋值(编译错误)
// if (x = 10) { ... }
12.2 浮点数直接比较 #
carbon
var a: f64 = 0.1 + 0.2;
var b: f64 = 0.3;
// 可能出错
// if (a == b) { ... }
// 正确做法
var epsilon: f64 = 1e-9;
if ((a - b).Abs() < epsilon) {
Print("近似相等");
}
12.3 逻辑运算符混淆 #
carbon
// 正确:逻辑运算
var result: bool = a and b or c;
// 错误:位运算(语义不同)
// var result: bool = a & b | c;
十三、总结 #
本章我们学习了:
- 布尔类型:true和false
- 比较运算:==、!=、<、>、<=、>=
- 逻辑运算:and、or、not
- 条件表达式:if-else、三元运算符
- 布尔函数:返回布尔值的函数
- 布尔转换:与其他类型的转换
- 最佳实践:命名、简化条件
接下来让我们学习Carbon的控制流!
最后更新:2026-03-27