代码整洁部分学习

本文介绍了编写整洁代码的六个法则,包括变量命名规范、避免重复代码、简化函数参数、确保函数功能单一、清晰函数命名以及合理设置默认对象等,旨在帮助开发者提高代码质量和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整洁代码法则:

大法一:变量的名称及方法的注意

1、使用const定义常量,切勿使用var,那不是常量会变的。

2、功能类似的变量名采用统一的命名风格。

//反例:请求数据信息:
getUserInfo();
getClientData();
getCustomerRecord();
//都是请求数据,有的用info有的用data,最后使用下方命名
getUser();
getClient();
getCustomer();

3、使用易于检索的名称

我们阅读的代码要远远多于我们写的代码,变量名变得晦涩难懂真的是一种糟糕透顶的体验。

//反例
// 525600 是什么?
for (var i = 0; i < 525600; i++) {
  runCronJob();
}
//正例
var MINUTES_IN_A_YEAR = 525600;
for (var i = 0; i < MINUTES_IN_A_YEAR; i++) {
  runCronJob();
}

4、不要绕弯子,显示优于隐式。

//反例
var locations = ['Austin', 'New York', 'San Francisco'];
locations.forEach((l) => {
  doStuff();
  doSomeOtherStuff();
  ...
  ...
  ...
  // l是什么?
  dispatch(l);
})
//正例
var locations = ['Austin', 'New York', 'San Francisco'];
locations.forEach((location) => {
  doStuff();
  doSomeOtherStuff();
  ...
  ...
  ...
  //location 相对于 l 来说更加的清晰明了
  dispatch(location);
});

5、避免重复描述。当类/对象名有意义时,对其变量名就不要再次重复。

//反例
var Car = {
  carMake: 'Honda',
  carModel: 'Accord',
  carColor: 'Blue'
};
//正例
var Car = {
   Make: 'Honda',
  Model: 'Accord',
  Color: 'Blue'
};

6、避免无意义的判断

//反例
function createMicrobrewery(name) {
  var breweryName;
  if (name) {
    breweryName = name;
  } else {
    breweryName = 'Hipster Brew Co.';
  }
}
//正例
function createMicrobrewery(name) {
  var brewerName = name || 'Hipster Brew Co.';
}

大法二:函数

1、函数参数最好保持在理想状态(不超过两个)

限制函数参数的数量将非常有助于我们在测试函数时的方便,我们的测试将会更加的有效。

对于JavaScript来说,定义一个对象非常方便,我们可以使用一个对象将变量进行一个封装,当参数过多时不妨试试对象。

//反例
function createMenu(title, body, buttonText, cancellable) {
  ...
}
//正例
var menuConfig = {
  title: 'Foo',
  body: 'Bar',
  buttonText: 'Baz',
  cancellable: true
}

function createMenu(menuConfig) {
  ...
}

2、函数功能单一性

为啥要单一性,因为功能不单一的函数很难重构、测试和理解。功能单一的函数叫代码看起来更加的干净。

//反例
function emailClients(clients) {
  clients.forEach(client => {
    let clientRecord = database.lookup(client);
    if (clientRecord.isActive()) {
      email(client);
    }
  });
}
//正例
//可能你觉得这样很繁琐,明明一个函数可以解决的问题,最终却变成了三个,
//但是当你的函数出了问题之后,比较一下是不是相对上边集成高的代码下边的更加清晰。
function emailClients(clients) {
  clients.forEach(client => {
    emailClientIfNeeded(client);
  });
}

function emailClientIfNeeded(client) {
  if (isClientActive(client)) {
    email(client);
  }
}

function isClientActive(client) {
  let clientRecord = database.lookup(client);
  return clientRecord.isActive();
}

3、函数名应该明确他的功能

//反例
function dateAdd(date, month) {
  // ...
}

let date = new Date();

// 很难理解dateAdd(date, 1)是什么意思
dateAdd(date, 1);
//正例
//这个名字你是不是就知道你增加的是月份了!
function dateAddMonth(date, month) {
  // ...
}

let date = new Date();
dateAddMonth(date, 1);

4、一定要移除重复的代码

永远、永远、永远不要在任何循环下有重复的代码。

重复代码的存在毫无意义,且潜在风险极大。重复的代码意味着逻辑变化时需要对不止一处进行修改。JS 弱类型的特点使得函数拥有更强的普适性。好好利用这一优点吧。

//反例
function showDeveloperList(developers) {
  developers.forEach(developer => {
    var expectedSalary = developer.calculateExpectedSalary();
    var experience = developer.getExperience();
    var githubLink = developer.getGithubLink();
    var data = {
      expectedSalary: expectedSalary,
      experience: experience,
      githubLink: githubLink
    };

    render(data);
  });
}

function showManagerList(managers) {
  managers.forEach(manager => {
    var expectedSalary = manager.calculateExpectedSalary();
    var experience = manager.getExperience();
    var portfolio = manager.getMBAProjects();
    var data = {
      expectedSalary: expectedSalary,
      experience: experience,
      portfolio: portfolio
    };

    render(data);
  });
}
//正例
function showList(employees) {
  employees.forEach(employee => {
    var expectedSalary = employee.calculateExpectedSalary();
    var experience = employee.getExperience();
    var portfolio;

    if (employee.type === 'manager') {
      portfolio = employee.getMBAProjects();
    } else {
      portfolio = employee.getGithubLink();
    }

    var data = {
      expectedSalary: expectedSalary,
      experience: experience,
      portfolio: portfolio
    };

    render(data);
  });
}

5、使用Object.assign设置默认对象

//反例
var menuConfig = {
  title: null,
  body: 'Bar',
  buttonText: null,
  cancellable: true
}

function createMenu(config) {
  config.title = config.title || 'Foo'
  config.body = config.body || 'Bar'
  config.buttonText = config.buttonText || 'Baz'
  config.cancellable = config.cancellable === undefined ? config.cancellable : true;

}

createMenu(menuConfig);
//正例
var menuConfig = {
  title: 'Order',
  // User did not include 'body' key
  buttonText: 'Send',
  cancellable: true
}

function createMenu(config) {
  config = Object.assign({
    title: 'Foo',
    body: 'Bar',
    buttonText: 'Baz',
    cancellable: true
  }, config);

  // config now equals: {title: "Order", body: "Bar", buttonText: "Send", cancellable: true}
  // ...
}

createMenu(menuConfig);

6、不要使用标记(Flag)作为参数

使用Flag的话一般意味着函数的单一性已经被破坏。此时应该考虑对函数进行再次划分。

//反例
function createFile(name, temp) {
  if (temp) {
    fs.create('./temp/' + name);
  } else {
    fs.create(name);
  }
}
//正例
function createTempFile(name) {
  fs.create('./temp/' + name);
}

----------------------------

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

以上内容只是一小部分。学习大佬翻译得来,详细可链接github
代码整洁之道
没写过几篇,还请多多指教!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plumink

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值