代码规范

12003

代码规范的重要性

代码规范是一套约定俗成的编码规则和标准,对于初级软件工程师来说尤其重要。代码规范可以帮助团队成员编写一致的代码,提高代码的可读性、可维护性和可扩展性。规范化的代码可以减少代码错误、降低调试和维护的难度,并且有助于团队协作,使不同人员的代码更易于理解和集成。

想要代码整洁干净 ,函数、变量、模块最关键的是命名,命名要有意义,是可读和准确的。

如何提高代码可读性

  • 良好的命名规范:变量、函数、类等命名应该具有描述性,并且符合团队或项目的命名规范。命名应该清晰、简洁、具有意义,使其他人能够轻松地理解其含义和用途。
  • 清晰的代码结构:代码应该具有良好的结构,包括合理的缩进、适当的空格、明确的代码块和逻辑流程等。良好的代码结构可以使代码更加清晰、易于理解和维护。
  • 注释和文档:代码应该包含充足的注释和文档,以便其他人能够理解代码的设计、功能和使用方法。注释应该清晰、简明,并且与代码保持一致,帮助其他人理解代码的逻辑和实现。
  • 避免过于复杂的逻辑:复杂的逻辑结构会降低代码的可读性,因此应该尽量避免过于复杂的条件语句、嵌套和循环结构。可以考虑使用函数、类等方式来提取和封装复杂的逻辑,使代码更加简洁和易于理解。
  • 一致的代码风格:团队或项目应该遵循一致的代码风格和规范,包括缩进、命名、注释等方面。一致的代码风格可以提高代码的可读性,减少团队成员之间的理解障碍。

规则

变量

  • 变量名:
    • 变量名,最关键的是可读性
    • 使用过程变量(复杂判断,正则逻辑... )
    • 使用全名与可读的缩写

函数

  • 函数名:
    • (副词)+动词+名词
    • 语态(不用时态)和形容词
    • 增删改查,照着数据库的关键字,唯一区别就是把select替换为 get
  • 函数:
    • 一个函数,干一件事
    • 鼓励使用"ctx&中间件"的模式
    • 鼓励使用函数式,进行数据操作(数组函数,lodash)
    • 使用Async/Await
    • 使用对象作为函数参数
    • 使用Object.assign设置默认对象
    • 使用三元表达式,避免逻辑表达式直接返回变量

模块

  • 模块:
    • 优先使用组合模式而非继承
    • 相关的数据和函数放在一起 =》 对象 =》 封装,继承,多态
    • 使用 ES6 的 classes
    • 一次干一件事
    • 易于扩展,难于修改
      • 私有属性,封装了后,大家在一起用的时候,不会搞乱了
      • 提供默认构造方法
      • 对象属性执行额外操作,getters 和 setters
      • 序列化,对象与文件的相互转化
    • 子类对象应该能够替换其超类对象被使用
    • 控制反转:将对象的控制权交给IoC容器
      • 每次用车都现创建一辆车,代价很大
      • 依赖注入,注解,加一些代码
    • 接口隔离
      • recourse相关的设置

示例

例如,在处理大量数据时,可以选择使用 Set 或 Map 数据结构来替代数组,从而提高查找和删除的效率。以下是一个示例代码,演示了使用 Set 来优化数组操作的优化:

  1. // 未优化的数组操作
  2. function arrayOperation(arr, target) {
  3. if (arr.includes(target)) {
  4. arr.splice(arr.indexOf(target), 1);
  5. }
  6. return arr;
  7. }
  8. // 优化后使用 Set 的操作
  9. function setOperation(arr, target) {
  10. const set = new Set(arr);
  11. set.delete(target);
  12. return Array.from(set);
  13. }
  1. 减少不必要的计算和内存使用 例如,在处理大量数据时,可以使用异步操作和流(Stream)的方式来减少内存占用,提高性能。以下是一个示例代码,演示了使用流来处理大文件的优化:
    1. javascriptCopy code
    2. // 未优化的一次性读取大文件
    3. const fs = require('fs');
    4. function readLargeFile(file) {
    5. const data = fs.readFileSync(file, 'utf8');
    6. // 对 data 进行处理
    7. return processedData;
    8. }
    9. // 优化后使用流的方式
    10. const fs = require('fs');
    11. const readline = require('readline');
    12. function readLargeFileWithStream(file) {
    13. const rl = readline.createInterface({
    14. input: fs.createReadStream(file),
    15. output: process.stdout,
    16. terminal: false
    17. });
    18. rl.on('line', (line) => {
    19. // 对每一行的数据进行处理
    20. });
    21. rl.on('close', () => {
    22. // 处理完所有数据后的回调
    23. });
    24. }
  2. 简化复杂的逻辑 例如,在处理多层嵌套的回调函数时,可以考虑使用 Promise 或 async/await 的方式来简化逻辑,提高代码的可读性。以下是一个示例代码,演示了使用 async/await 来简化复杂逻辑的优化:
    1. // 未优化的复杂回调函数
    2. function complexCallback(cb1) {
    3. asyncFunc1((result1) => {
    4. asyncFunc2(result1, (result2) => {
    5. asyncFunc3(result2, (result3) => {
    6. // 处理 result3
    7. cb1();
    8. });
    9. });
    10. });
    11. }
    12. // 优化后使用 async/await 的方式
    13. async function simplifiedAsyncFunc() {
    14. const result1 = await asyncFunc1();
    15. const result2 = await asyncFunc2(result1);
    16. const result3 = await asyncFunc3(result2);
    17. // 处理 result3
    18. }

这些只是优化 Node.js 代码的一些简单示例,实际优化的方式和方法会根据具体的项目和需求而异。在优化代码时,应该根据实际情况进行分析和选择,确保优化后的代码在性能、内存和可读性上都能有所提升。