在 JavaSscript 中使用 Guard Clauses 让代码更清爽更优雅

348 阅读3分钟

导读

Guard Clauses 是编程中用于简化代码、提高可读性和减少嵌套的一种模式。通过提前处理不符合条件的情况来避免深层嵌套和复杂的控制结构。在 JavaSscript 中使用 Guard Clauses 模式,让你的代码摆脱丑陋的 if else 嵌套,让你的代码看起来更清爽和优雅。

核心原理

针对深层的 if else 嵌套代码,我看到的更多的是介绍使用策略模式作为解决方案。今天介绍的是另一种优秀的解决方案叫做 Guard Clauses 模式。下面先来看看 Guard Clauses 的基本原理。

Guard Clauses 的核心思想是:

  1. 提前返回:在方法或函数的开头检查某些条件,如果条件不满足,则立即返回,避免后续代码执行。
  2. 减少嵌套:通过提前处理异常情况,避免嵌套的 if 语句,从而使代码更加平坦和易读。
  3. 提高可读性:使得代码逻辑更加清晰,直接处理特殊情况,而不是在主逻辑中夹杂大量的条件检查。

使用嵌套的 if 语句

假设有一个函数,需要对多个条件进行检查,并在所有条件都满足的情况下执行一些操作。

function process(data) {
    if (data) {
        if (data.isValid) {
            if (data.hasPermission) {
                // 执行主要逻辑
                console.log('Processing data...');
            } else {
                console.log('No permission');
            }
        } else {
            console.log('Invalid data');
        }
    } else {
        console.log('No data provided');
    }
}

相信有同学有过编写或者看到过类似代码的经历(我自己是写过的),这种嵌套结构会随着条件的增加变得难以维护和阅读,看上去十分的膈应。

使用 Guard Clauses

下面是采用 Guard Clauses 模式对进行简化后的代码:

function process(data) {
    // 首先检测 data 对象是否存在
    // 避免使用 if 包裹大段代码
    if (!data) {
        console.log('No data provided');
        return;
    }

    // 然后检测 data 数据合法性
    // 如果非法,进行非法数据路基的处理
    if (!data.isValid) {
        console.log('Invalid data');
        return;
    }

    // 进一步检测权限的合法性,不合法就处理权限不合法的逻辑
    if (!data.hasPermission) {
        console.log('No permission');
        return;
    }

    // 执行主要逻辑
    console.log('Processing data...');
}

Guard Clause 模式的核心步骤是将复杂的嵌套逻辑分解成单一的规则校验,然后对再逐条处理单一规则的执行逻辑,从而避免了不必要的嵌套。可以看到通过使用 Guard Clauses,修改后的代码变得更加平坦和易读。

Guard Clauses 适用场景

Guard Clauses 特别适用于以下场景:

  1. 输入验证:在函数开始时验证输入参数,提前返回错误信息。
  2. 错误处理:处理特殊情况或异常情况,提前返回错误。
  3. 权限检查:检查用户权限,提前拒绝不允许的操作。

这里贴一个油管的博主介绍 Guard Clauses 的视频链接:GUARD CLAUSES in JavaScript, Simplified

总结

最后再总结一下,Guard Clauses 是一种有效的编程技巧,可以提高代码的可读性和可维护性。通过在函数或方法的开头处理异常情况,可以避免深层嵌套复杂的控制结构,使得代码更加简洁和直观,更加优雅。

大家在平时的开发中,可以试着用 Guard Clauses 模式的编码思想去优化自己的代码。