首页 >web前端 >js教程 >干净的代码:为什么函数参数中的布尔标志是一种代码味道

干净的代码:为什么函数参数中的布尔标志是一种代码味道

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-12 18:56:17390浏览

Clean code: why boolean flags in function parameters are a code smell

函数参数中的布尔标志可能会使代码更难以阅读和维护。让我们看看为什么应该避免它们以及可以做什么。

布尔标志的问题

使用布尔参数通常意味着您的函数会执行两件不同的事情,从而违反了单一职责原则 (SRP)。这是一个典型的例子:

function createFile(name, isTemp) {
  if (isTemp) {
    fs.create(`./temp/${name}`);
  } else {
    fs.create(name);
  }
}

这可能看起来很简单,但它有几个问题:

  1. 函数调用不清楚:阅读代码,很难知道布尔值的含义:
   createFile("log.txt", true);  // What does 'true' mean here?
  1. 两个函数合而为一:布尔值就像一个开关,使函数做不同的事情

  2. 测试变得更加困难:您需要检查函数的两种工作方式

  3. 难以添加功能:如果您稍后需要第三个选项,您可能会添加另一个布尔值,使事情变得更糟

更好的写法

将函数拆分为两个单独的函数,每个函数执行一件事:

function createFile(name) {
  fs.create(name);
}

function createTempFile(name) {
  createFile(`./temp/${name}`);
}

这给你:

  1. 清晰的名称:createTempFile("log.txt") 准确地告诉您它的作用

  2. 简单逻辑:每个函数只做一件事

  3. 轻松测试:每个函数只需测试一件事

  4. 添加功能简单:需要新东西吗?在不改变旧功能的情况下添加新功能

更多示例

这个想法在很多情况下都有效。以下是一些案例:

登录系统

// ❌ Bad
function authenticate(user, isAdmin) {
  if (isAdmin) {
    // Admin login logic
  } else {
    // Regular user login logic
  }
}

// ✅ Good 
function authenticateUser(user) {
  // Regular user login logic
}

function authenticateAdmin(user) {
  // Admin login logic
}

电子邮件系统

// ❌ Bad
function sendEmail(user, isHtmlFormat) {
  if (isHtmlFormat) {
    // Send HTML email
  } else {
    // Send plain text email
  }
}

// ✅ Good
function sendPlainTextEmail(user) {
  // Send plain text email
}

function sendHtmlEmail(user) {
  // Send HTML email
}

总结

函数参数中的布尔标志通常表明函数尝试执行的操作过多。制作单独的、集中的函数会创建以下代码:

  • 易于阅读
  • 易于测试
  • 易于修复
  • 易于更改

下次您想要添加布尔参数时,请考虑创建两个函数。


您是否尝试过在代码中拆分这样的函数?有帮助吗?请在评论中告诉我!

以上是干净的代码:为什么函数参数中的布尔标志是一种代码味道的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn