区别 Indentation 和 Alignment

Indentation 缩进有逻辑上的层级嵌套关系;而 Alignment 对齐逻辑上属于同一层级,存在只是出于美观需要。在如下代码中用 >>>> 代表 Indentation,.... 代表 Alignment。

1
2
3
4
5
6
int main()
{
>>>>int a = 1 + 
>>>>........2 + 3;
>>>>return 0;
}

Tab 和 Space 都可用于 Indentation 和 Alignment,根据用法分为多种不同的方案。

Indentation, Alignment 方案

各种语言有自己的推荐的代码风格。

Indentation/sizeAlignment/sizeExample
Tab/8Tab/8Linux C coding style
Tab/8Space/4OpenBSD C style
Space/4Space/4PEP8 - Style Guide for Python Code
TabTab/SpaceEffective Go

注意上表中的 size 长度都是单位长度,实践中可以根据缩进层级或对齐美观需要使用多个单位。

使用 Tab 和 Space 各有优劣:

  • 使用 Tab 比使用 Space 的文件字节数更少
  • Tab 更灵活。Tab 长度是由用户定义的,你想要多长都可以直接修改编辑器的配置,而不需要修改源文件。这是一把双刃剑,如果多人在一个项目上协同工作,每个人的 tabsize 不同,就不能一致地遵循 80 字符限制。

最佳实践

  1. 优先遵循官方的标准规范,如 Python、Golang、Makefile。
  2. 简单起见,C、ASM 使用 Tab/8 Indentation + Tab/8 Alignment。
  3. 依赖代码格式化工具。Golang 可以完全依赖 gofmt;C 可以借助 Linux kernel 中的 scripts/checkpatch.pl 检测代码风格,scripts/Lindent 修改代码风格(依赖 indent)。