前言

代码的换行是一个说小不小,说大不大的问题,换行换得好,能够让代码更清晰,今日整理一份比较基本的换行规矩,欢迎我们评论弥补。

Bad Code

以一个十分简单的下单逻辑来解释一下(比较极点,我一个换行都不加):

/**
 * @param userId    用户id
 * @param goods     商品信息
 * @param packages  包裹信息
 * @param couponIds 优惠券信息
 * @param os        终端
 */
public async genOrder(userId: number, goods: [], packages: [], couponIds: [], os: string) {
  const order = {
    userId,
    os
  };
  const user = await this.ctx.model.User.findByPk(userId);
  if (couponIds.length > 0) {
    const coupons = await this.getUserCoupons(couponIds);
    await this.useCoupons(coupons);
  }
  const packageInfo = await this.convertPackageInfo(packages);
  order.packageInfo = packageInfo;
  const goodsInfo = await this.checkGoodsInfo(goods);
  order.goodsInfo = goodsInfo;
  order.id = this.genUUid();
  order.code = this.genCode();
  order.totalAmount = this.calculateAmount(goodsInfo);
  await this.ctx.model.Order.save(order);
  await this.ctx.model.Payment.create({
    orderId: order.id,
    totalAmount: order.
  });
}

Good Code

再看看这个,随后会简单讲一下换行规矩。

/**
 * @param userId    用户id
 * @param goods     商品信息
 * @param packages  包裹信息
 * @param couponIds 优惠券信息
 * @param os        终端
 */
public async genOrder(userId: number, goods: [], packages: [], couponIds: [], os: string) {
  const order = {
    userId,
    os
  };
  const user = await this.ctx.model.User.findByPk(userId);
  const packageInfo = await this.convertPackageInfo(packages);
  const goodsInfo = await this.checkGoodsInfo(goods);
  if (couponIds.length > 0) {
    const coupons = await this.getUserCoupons(couponIds);
    await this.useCoupons(coupons);
  }
  order.packageInfo = packageInfo;
  order.goodsInfo = goodsInfo;
  order.id = this.genUUid();
  order.code = this.genCode();
  order.totalAmount = this.calculateAmount(goodsInfo);
  await this.ctx.model.Order.save(order);
  await this.ctx.model.Payment.create({
    orderId: order.id,
    totalAmount: order.
  });
}

规矩

  1. 变量声明与变量声明上下之间不需要换行(letconstvar
const order = {
  userId,
  os
};
const user = await this.ctx.model.User.findByPk(userId);
const packageInfo = await this.convertPackageInfo(packages);
const goodsInfo = await this.checkGoodsInfo(goods);
  1. 变量声明的上下必须换行。
const goodsInfo = await this.checkGoodsInfo(goods);
if (couponIds.length > 0) {
  const coupons = await this.getUserCoupons(couponIds);
  await this.useCoupons(coupons);
}
  1. 变量赋值与变量赋值上下之间不需要换行(letconstvar)。
order.packageInfo = packageInfo;
order.goodsInfo = goodsInfo;
order.id = this.genUUid();
order.code = this.genCode();
order.totalAmount = this.calculateAmount(goodsInfo);
  1. 变量赋值的上下必须换行。
order.totalAmount = this.calculateAmount(goodsInfo);
await this.ctx.model.Order.save(order);
  1. 块级的上下必须换行(ifelseelse ifswitchforfor offor intry catch…)
const goodsInfo = await this.checkGoodsInfo(goods);
if (couponIds.length > 0) {
  const coupons = await this.getUserCoupons(couponIds);
  await this.useCoupons(coupons);
}
order.packageInfo = packageInfo;
  1. 函数调用与函数调用上下不需要换行
await this.ctx.model.Order.save(order);
await this.ctx.model.Payment.create({
  orderId: order.id,
  totalAmount: order.
});
  1. 一个块级里的代码不超过3行的话,以上的规矩可选择性运用,不换行也行。
if (couponIds.length > 0) {
  const coupons = await this.getUserCoupons(couponIds);
  await this.useCoupons(coupons);
}

弥补说明

除非代码的履行次序有要求,否则我们尽量把函数内的用到的变量放到函数的开头,当然,假如变量只是在一个块级里运用,那就没必要放出来,相似上面的coupons

  if (couponIds.length > 0) {
    const coupons = await this.getUserCoupons(couponIds);
    await this.useCoupons(coupons);
  }

结束

后续会陆续更新此系列,欢迎我们评论留言。