鸿蒙 ArkTS 实战|用判断函数封装复分解反应:沉淀气体水三条件
·


一、设计思路
复分解反应的判断有一套严格的三步法:①反应物可溶(酸除外)→ ②交换成分 → ③生成物有沉淀/气体/水之一。这套流程逻辑分明,适合固化成代码:溶解性表用 Record 存储,三条件判定封装成函数,最后用 canDoubleDecompose() 串联成完整判断器,UI 层做可视化分步演示。
二、溶解性表与判断函数(DoubleDecomposeRules.ets)
/**
* 复分解反应三步判断器
* 口诀:钾钠铵硝皆可溶,盐酸盐除银,硫酸盐除钡,碳酸盐只溶钾钠铵
*/
// 常见物质的溶解性表(true = 可溶)
const SOLUBILITY: Record<string, boolean> = {
'NaCl': true, 'KNO₃': true, 'NaNO₃': true, 'AgNO₃': true,
'KCl': true, 'BaCl₂': true, 'Na₂SO₄': true, 'Ba(NO₃)₂': true,
'NaOH': true, 'KOH': true, 'Ca(OH)₂': true,
'Na₂CO₃': true, 'K₂CO₃': true, '(NH₄)₂CO₃': true,
'AgCl': false, 'BaSO₄': false, 'CaCO₃': false, 'BaCO₃': false,
'Mg(OH)₂': false, 'Cu(OH)₂': false, 'Fe(OH)₃': false
};
// 沉淀颜色表(用于现象提示)
const PRECIPITATE_COLOR: Record<string, string> = {
'AgCl': '白色沉淀(不溶于稀硝酸)',
'BaSO₄': '白色沉淀(不溶于稀硝酸)',
'CaCO₃': '白色沉淀(溶于稀盐酸放气泡)',
'BaCO₃': '白色沉淀(溶于稀盐酸放气泡)',
'Mg(OH)₂': '白色沉淀',
'Cu(OH)₂': '蓝色沉淀',
'Fe(OH)₃': '红褐色沉淀'
};
// 步骤①:检查反应物是否可溶(酸除外;查不到默认按可溶)
function reactantsSoluble(a: string, b: string): boolean {
const aS = SOLUBILITY[a] ?? true;
const bS = SOLUBILITY[b] ?? true;
return aS || bS; // 两种都不溶则失败;酸(默认可溶)可放宽
}
// 步骤③:检查生成物是否有沉淀 / 气体 / 水
function hasProductCondition(products: string[]): string {
for (const p of products) {
if (PRECIPITATE_COLOR[p] !== undefined) {
return `生成${PRECIPITATE_COLOR[p]} → 反应能发生`;
}
if (p === 'H₂O') {
return '生成水 → 反应能发生';
}
if (p === 'CO₂↑' || p === 'CO₂') {
return '生成气体 CO₂ → 反应能发生';
}
}
return '无沉淀、无气体、无水 → 反应不能发生';
}
// 三步法主函数:传入两种反应物与生成的产物
export function canDoubleDecompose(a: string, b: string,
products: string[]): string {
// 步骤①
if (!reactantsSoluble(a, b)) {
return '反应物都不溶于水 → 反应不能发生';
}
// 步骤② 交换成分(由调用方给出产物)步骤③
return hasProductCondition(products);
}
// 单元测试式验证
console.info(canDoubleDecompose('NaCl', 'AgNO₃', ['AgCl', 'NaNO₃']));
// 生成白色沉淀(不溶于稀硝酸) → 反应能发生
console.info(canDoubleDecompose('NaCl', 'KNO₃', ['NaCl', 'KNO₃']));
// 无沉淀、无气体、无水 → 反应不能发生
console.info(canDoubleDecompose('HCl', 'NaOH', ['NaCl', 'H₂O']));
// 生成水 → 反应能发生(中和反应)
三、三步判断器页面(DoubleDecomposeChecker.ets)
import { canDoubleDecompose } from '../common/DoubleDecomposeRules';
/**
* 复分解反应三步判断器(可视化分步演示)
* ①查溶解性 → ②交换成分 → ③查三条件
*/
@Entry
@Component
struct DoubleDecomposeChecker {
@State step: number = 0; // 当前演示步骤 0/1/2
@State result: string = '';
// 示例:NaCl + AgNO₃
private reactantA: string = 'NaCl';
private reactantB: string = 'AgNO₃';
private products: string[] = ['AgCl', 'NaNO₃'];
private stepTexts: string[] = [
'① 检查反应物溶解性:NaCl 可溶 ✓,AgNO₃ 可溶 ✓',
'② 交换成分:NaCl + AgNO₃ → AgCl + NaNO₃',
'③ 检查生成物三条件(沉淀/气体/水)'
];
build() {
Column({ space: 14 }) {
Text('🧪 复分解三步判断器')
.fontSize(20).fontWeight(FontWeight.Bold)
// 方程式展示
Text('NaCl + AgNO₃ → AgCl↓ + NaNO₃')
.fontSize(16).fontWeight(FontWeight.Bold).fontColor('#111827')
.padding(12).borderRadius(10).backgroundColor('#EAF0FF')
.width('90%').textAlign(TextAlign.Center)
// 分步文本
Text(this.stepTexts[this.step])
.fontSize(14).fontColor('#4B5563').lineHeight(22)
.width('90%').textAlign(TextAlign.Center)
// 分步推进按钮
Button(this.step < 2 ? '下一步 →' : '重新演示 ↺')
.width('80%').height(44).backgroundColor('#4C7DFF')
.onClick(() => {
if (this.step < 2) {
this.step++;
} else {
this.step = 0;
this.result = '';
}
})
// 步骤③后执行完整判断
if (this.step === 2) {
Button('执行完整判断').width('80%').height(40)
.backgroundColor('#0F766E')
.onClick(() => {
this.result = canDoubleDecompose(this.reactantA, this.reactantB,
this.products);
})
}
// 结论卡片
if (this.result.length > 0) {
Text(this.result).fontSize(14).fontColor('#0F766E')
.lineHeight(22).textAlign(TextAlign.Center).width('90%')
.padding(14).borderRadius(12).backgroundColor('#E6FFF9')
}
}
.padding(20)
}
}
四、代码要点
- 查表驱动:
Record<string, boolean>类型的SOLUBILITY表就是"溶解性口诀"的数字化,查表代替死记。 - 函数流水线:
reactantsSoluble→hasProductCondition→canDoubleDecompose,三步法逐级串联,逻辑清晰可测。 - 分步教学:
@State step控制演示进度,先分步展示三步法,最后"执行完整判断"验证结果。
五、复分解反应核心知识点
| 要点 | 内容 |
|---|---|
| 定义 | 两种化合物交换成分(AB + CD → AD + CB),化合价不变 |
| 发生条件 | 反应物可溶(酸除外)+ 生成物有沉淀 / 气体 / 水之一 |
| 溶解性口诀 | 钾钠铵硝皆可溶,盐酸盐除银,硫酸盐除钡,碳酸盐只溶钾钠铵 |
| 常见沉淀 | AgCl、BaSO₄(白,不溶稀硝酸);CaCO₃、BaCO₃(白,溶于酸放气泡);Cu(OH)₂(蓝);Fe(OH)₃(红褐) |
| 离子检验 | Cl⁻ 加 AgNO₃ 白沉淀不溶硝酸;SO₄²⁻ 加 BaCl₂ 白沉淀;CO₃²⁻ 加稀盐酸冒气泡 |
| 中和反应 | 酸 + 碱 → 盐 + 水,是复分解反应的特例 |
| 典型易错 | NaOH 与 CO₂ 不属复分解(不交换成分);AgCl 不溶故 AgCl 与 NaNO₃ 不反应 |
更多推荐



所有评论(0)