You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化嵌套if-else语句?多按钮音频播放代码优化咨询

代码简化方案

你的核心问题是重复逻辑冗余,8个按钮要写几乎一样的嵌套判断,我们可以通过「提取通用函数」+「条件组合生成音频标识」的方式解决,同时完全保留所有条件:

1. 抽离通用播放逻辑

所有按钮的播放逻辑本质上只有一个区别:对应音名不同(比如G、A、B等)。所以我们可以写一个通用的播放函数,把音名和各个条件作为参数传入,8个按钮直接调用这个函数即可。

2. 用条件组合替代嵌套if

把八度、升调、颤音这些条件拼成唯一的音频标识(比如high_sharp_vibrato_G),直接通过这个标识匹配对应的音频播放,不用一层层嵌套判断。

伪代码示例

第一步:编写通用播放函数

// 通用播放函数,参数为当前按钮的音名+所有控制条件
playNote(noteName, highOctave, midOctave, move, sharp, vibrato) {
    // 确定八度标识
    let octave;
    if (highOctave) octave = "high";
    else if (midOctave) octave = "mid";
    else octave = "low";

    // 确定播放模式:手机移动时循环,否则单次播放
    let playMode = move ? "loop" : "once";

    // 拼接音频后缀:仅移动状态下考虑颤音,非移动状态忽略颤音
    let suffix = sharp ? "_sharp" : "";
    if (move) {
        suffix += vibrato ? "_vibrato" : "_normal";
    }

    // 拼出完整的音频唯一标识
    let audioKey = `${octave}${suffix}_${noteName}`;

    // 播放对应音频
    return AudioPlayer.play(audioKey, playMode);
}

第二步:简化按钮监听代码

每个按钮的逻辑瞬间简洁,仅需传入对应的音名:

btn_G.onTouchListener(){
    Case Motion.Action_Down:
        Gstream = playNote("G", high_octave, mid_oct, move, sharp, vibrato);
    Case Motion.Action_Up:
        Gstream.stop();
}

btn_A.onTouchListener(){
    Case Motion.Action_Down:
        Astream = playNote("A", high_octave, mid_oct, move, sharp, vibrato);
    Case Motion.Action_Up:
        Astream.stop();
}
// 剩余6个按钮依此类推,仅修改noteName参数即可

3. 进阶优化:用哈希表存储音频资源

你之前考虑的哈希表可以这样落地:提前把所有音频资源按「音频标识」存入哈希表,播放时直接取值,效率更高:

// 提前初始化所有音频的映射表,仅需执行一次
const audioMap = {
    "high_sharp_vibrato_G": 高音升调颤音G音频,
    "high_sharp_normal_G": 高音升调普通G音频,
    "high_normal_vibrato_G": 高音普通颤音G音频,
    // ... 列出所有可能的音频组合
};

// 修改通用函数的播放逻辑
let targetAudio = audioMap[audioKey];
return targetAudio.play(playMode);

这种方式虽然初始化时需要列全所有音频组合,但后续维护仅需修改通用函数,无需改动8个按钮的代码,彻底解决重复问题,且时间复杂度仍为O(1),和原嵌套if效率一致甚至更高。

内容的提问来源于stack exchange,提问作者motty_here

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:40:44