name: control-flow description: 用于重构复杂条件逻辑的可读性控制流模式。在重构嵌套条件、提高代码可读性或重构决策逻辑时使用。
可读性控制流
重构复杂控制流时,模仿自然的人类推理模式:
- 首先问人类问题:“我能用我已有的东西吗?” -> 早期返回以处理顺利路径
- 评估情况:“我当前的状态是什么,我需要做什么?” -> 清晰、互斥的条件
- 采取行动:“获取我需要的东西” -> 在末尾整合逻辑
- 使用自然语言变量:
isUsingNavigator,isUsingLocalTranscription,needsOldFileCleanup:名称像思考一样读取 - 避免人为构造:不使用不符合人类实际思考方式的嵌套条件
将这种:带有重复逻辑的嵌套条件 转化为:模仿人类决策的线性流程
示例:早期返回与自然语言变量
// From apps/whispering/src/routes/(app)/_layout-utils/check-ffmpeg.ts
export async function checkFfmpegRecordingMethodCompatibility() {
if (!window.__TAURI_INTERNALS__) return;
// 仅当选择FFmpeg录制方法时检查
if (settings.value['recording.method'] !== 'ffmpeg') return;
const { data: ffmpegInstalled } = await rpc.ffmpeg.checkFfmpegInstalled.ensure();
if (ffmpegInstalled) return; // FFmpeg已安装,一切良好
// FFmpeg录制方法已选择但未安装
toast.warning('FFmpeg录制方法需要FFmpeg', {
// ... toast内容
});
}
示例:自然语言布尔值
// From apps/whispering/src/routes/(app)/_layout-utils/check-ffmpeg.ts
const isUsingNavigator = settings.value['recording.method'] === 'navigator';
const isUsingLocalTranscription =
settings.value['transcription.selectedTranscriptionService'] === 'whispercpp' ||
settings.value['transcription.selectedTranscriptionService'] === 'parakeet';
return isUsingNavigator && isUsingLocalTranscription && !isFFmpegInstalled;
示例:带有注释的清理检查
// From packages/epicenter/src/indexes/markdown/markdown-index.ts
/**
* 这检查是否有一个旧文件名,并且它是否与新的不同。
* 本质上是在检查:"文件名是否改变了?"和"我们需要清理旧文件吗?"
*/
const needsOldFileCleanup = oldFilename && oldFilename !== filename;
if (needsOldFileCleanup) {
const oldFilePath = path.join(tableConfig.directory, oldFilename);
await deleteMarkdownFile({ filePath: oldFilePath });
tracking[table.name]!.deleteByFilename({ filename: oldFilename });
}