阅读 15

渣翻:顶级 S**T-CODE 原则

原文地址:github.com/trekhleb/st…

引语:这两天看到有人推荐这个项目,觉得挺有意思,就随手翻译了下,原文自然也是很易懂的,不喜欢翻译风格的自然可以移步原文。看了几遍之后,笑着笑着就哭了,发现自己有几条还是中了的。希望大家也是有则改之,无则加勉,不要成为自己讨厌的那种人!

原则如下

💩 命名变量,如果你觉得疑惑的时候那就对了!

键盘敲越少,时间跑不了。

Good 👍🏻

let a = 42;
复制代码

Bad 👎🏻

let age = 42;
复制代码

💩 混合式命名变量/方法

庆祝差异吧。

Good 👍🏻

let wWidth = 640;
let w_height = 480;
复制代码

Bad 👎🏻

let windowWidth = 640;
let windowHeight = 480;
复制代码

💩 绝不写注释

反正也没人读你的代码。

Good 👍🏻

const cdr = 700;
复制代码

Bad 👎🏻

通常注释需要包含一些 “why” 而非一些 “what”,如果代码并不能清晰地表明 “what” ,那这代码就太乱了。

// The number of 700ms has been calculated empirically based on UX A/B test results.
// @see: <link to experiment or to related JIRA task or to something that explains number 700 in details>
const callbackDebounceRate = 700;
复制代码

💩 一律使用母语注释

如您违反了“无注释”原则,则至少尝试使用与编写代码所使用的语言不同的语言编写注释。 如果您的母语是英语,则可能违反此原则。

Good 👍🏻

// Закриваємо модальне віконечко при виникненні помилки.
toggleModal(false);
复制代码

Bad 👎🏻

// Hide modal window on error.
toggleModal(false);
复制代码

译者注:这一点的话大部分是针对开源项目,公司内部项目用母语也没啥毛病。

💩 尽可能地去尝试不同的格式

庆祝差异吧。

Good 👍🏻

let i = ['tomato', 'onion', 'mushrooms'];
let d = [ "ketchup", "mayonnaise" ];
复制代码

Bad 👎🏻

let ingredients = ['tomato', 'onion', 'mushrooms'];
let dressings = ['ketchup', 'mayonnaise'];
复制代码

💩 尽可能养成代码一行流

Good 👍🏻

document.location.search.replace(/(^\?)/,'').split('&').reduce(function(o,n){n=n.split('=');o[n[0]]=n[1];return o},{})
复制代码

Bad 👎🏻

document.location.search
  .replace(/(^\?)/, '')
  .split('&')
  .reduce((searchParams, keyValuePair) => {
    keyValuePair = keyValuePair.split('=');
    searchParams[keyValuePair[0]] = keyValuePair[1];
    return searchParams;
  },
  {}
)
复制代码

💩 默默承受“失败”

无论何时捕获了异常,并不必让他人知晓。别打日志,别抛出错误模型,徒留一片清冷。

Good 👍🏻

try {
  // Something unpredictable.
} catch (error) {
  // tss... 🤫
}
复制代码

Bad 👎🏻

try {
  // Something unpredictable.
} catch (error) {
  setErrorMessage(error.message);
  // and/or
  logError(error);
}
复制代码

💩 广泛地使用全局变量

全球化原则。

Good 👍🏻

let x = 5;

function square() {
  x = x ** 2;
}

square(); // Now x is 25.
复制代码

Bad 👎🏻

let x = 5;

function square(num) {
  return num ** 2;
}

x = square(x); // Now x is 25.
复制代码

💩 创建一些你并不会用到的变量

以防万一嘛。

Good 👍🏻

function sum(a, b, c) {
  const timeout = 1300;
  const result = a + b;
  return a + b;
}
复制代码

Bad 👎🏻

function sum(a, b) {
  return a + b;
}
复制代码

💩 如果语言允许,请不要指定类型 和/或 不进行类型检查

Good 👍🏻

function sum(a, b) {
  return a + b;
}

// Having untyped fun here.
const guessWhat = sum([], {}); // -> "[object Object]"
const guessWhatAgain = sum({}, []); // -> 0
复制代码

Bad 👎🏻

function sum(a: number, b: number): ?number {
  // Covering the case when we don't do transpilation and/or Flow type checks in JS.
  if (typeof a !== 'number' && typeof b !== 'number') {
    return undefined;
  }
  return a + b;
}

// This one should fail during the transpilation/compilation.
const guessWhat = sum([], {}); // -> undefined
复制代码

💩 你需要一段永远都不会执行的代码

这是你的 “Plan B”。

Good 👍🏻

function square(num) {
  if (typeof num === 'undefined') {
    return undefined;
  }
  else {
    return num ** 2;
  }
  return null; // This is my "Plan B".
}
复制代码

Bad 👎🏻

function square(num) {
  if (typeof num === 'undefined') {
    return undefined;
  }
  return num ** 2;
}
复制代码

💩 三角形原则

像小鸟一样——筑巢,筑巢,筑巢。

Good 👍🏻

function someFunction() {
  if (condition1) {
    if (condition2) {
      asyncFunction(params, (result) => {
        if (result) {
          for (;;) {
            if (condition3) {
            }
          }
        }
      })
    }
  }
}
复制代码

Bad 👎🏻

async function someFunction() {
  if (!condition1 || !condition2) {
    return;
  }
  
  const result = await asyncFunction(params);
  if (!result) {
    return;
  }
  
  for (;;) {
    if (condition3) {
    }
  }
}
复制代码

💩 缩进混乱

避免缩进,因为缩进会使复杂的代码在编辑器中占用更多空间。如果你无法避免得有缩进,那就把它们弄乱。

Good 👍🏻

const fruits = ['apple',
  'orange', 'grape', 'pineapple'];
  const toppings = ['syrup', 'cream', 
                    'jam', 
                    'chocolate'];
const desserts = [];
fruits.forEach(fruit => {
toppings.forEach(topping => {
    desserts.push([
fruit,topping]);
    });})
复制代码

Bad 👎🏻

const fruits = ['apple', 'orange', 'grape', 'pineapple'];
const toppings = ['syrup', 'cream', 'jam', 'chocolate'];
const desserts = [];

fruits.forEach(fruit => {
  toppings.forEach(topping => {
    desserts.push([fruit, topping]); 
  });
})
复制代码

💩 不要锁定你的依赖项(即不要指定版本)

以不受控制的方式更新对每个新安装的依赖关系。为什么要坚持旧版呢,让我们使用最先进版本的库。

Good 👍🏻

$ ls -la

package.json
复制代码

Bad 👎🏻

$ ls -la

package.json
package-lock.json
复制代码

💩 长方法总比旧的好

不要拆分你的代码逻辑以致于清晰可读。万一 IDE 的搜索功能不能用了且无法找到所需的文件或方法怎么办?

  • 一个文件 10000 行代码是 OK 滴!
  • 一个方法主体 1000 行代码是 OK 滴!
  • 在一个 service.js 文件中处理许多服务(第三方以及内部的,还有一些帮助程序,数据库手写的 ORMjQuery 滑块)?也是 OK 滴!

💩 测试?测它干嘛?

这是重复且不必要的工作。

💩 尽可能强硬地拒绝各种代码 linter

你想怎么写就怎么写,特别是团队中不只一个开发者的时候。这是一条 “自由” 原则。

💩 开始你的项目时,不要有 README 文件

并这么保持下去。

💩 你需要有一些没必要的代码

不要删除那些你的 App 用不到的代码。最多,注释掉嘛!

关注下面的标签,发现更多相似文章
评论