V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lovecy
V2EX  ›  问与答

实在没想明白空格缩进优点在哪里

  •  
  •   lovecy · 2020-08-18 11:42:31 +08:00 · 7290 次点击
    这是一个创建于 1564 天前的主题,其中的信息可能已经有所发展或是发生改变。

    tab 缩进

    字符数少,而且显示的时候格式很好,不同设备展示差不多,而且能兼容一些宽度变化比较小的字体。

    空格缩进

    字符多,字体一变整个代码格式都变了,还有无法与代码中有用的空格区分

    其实我倒无所谓,只是我们部门也没规定这些,有些同事用空格,有些同事用 tab,搞得我强迫症犯了

    第 1 条附言  ·  2020-08-18 14:27:27 +08:00
    起因是有同事在旧代码都是 tab 的基础上一定要用空格缩进,搞得我看着不舒服所以吐槽了一下

    行首缩进感觉 tab 要更好一些,因为遵循用户设定的 tab 宽度展示,编辑者查看者的体验很好,行内缩进用空格更好,不过如果代码内有中文(字符串或者注释或者别的什么,我搞不懂我一说代码里有中文就嘲讽我用易语言是干嘛?),修改字体的时候缩进格式会有变化(比如非中英文等宽改成中英文等宽)

    然后一堆 yygq 的毫无营养的就别发了吧?有不同意见您就说,搁着膈应人呢
    第 2 条附言  ·  2020-08-18 14:39:19 +08:00

    上面的一堆,改成一些

    BrettD
        1
    BrettD  
       2020-08-18 11:45:35 +08:00 via iPhone   ❤️ 3
    字体变了代码格式怎么可能会变呢?难道你用的不是等宽字体?
    ayase252
        2
    ayase252  
       2020-08-18 11:46:59 +08:00 via iPhone
    tab 的显示宽度是不一致的
    lovecy
        3
    lovecy  
    OP
       2020-08-18 11:47:49 +08:00
    @BrettD 现在各编辑器默认用的字体有几个是等宽字体的。。。
    lovecy
        4
    lovecy  
    OP
       2020-08-18 11:49:47 +08:00
    @ayase252 tab 会在字符数量内尽量给你保持对齐,这个字符数量看你编辑器的设定
    also24
        5
    also24  
       2020-08-18 11:54:35 +08:00
    @lovecy #3
    不妨说一下你正在用的编辑器和字体是啥……
    passerbytiny
        6
    passerbytiny  
       2020-08-18 11:57:07 +08:00 via Android
    请楼主先说一下你用的什么神仙编辑器,竟然还能(在同一个编辑器内)让 tab“尽量”对齐。
    whenov
        7
    whenov  
       2020-08-18 11:57:16 +08:00   ❤️ 19
    @lovecy 有几个不是等宽字体的...
    levn
        8
    levn  
       2020-08-18 11:59:02 +08:00
    不混用的话其实用哪个都行
    如果说有点区别的话,用空格更灵活,可以在不同地方使用不同的缩进数
    cmdOptionKana
        9
    cmdOptionKana  
       2020-08-18 11:59:36 +08:00   ❤️ 1
    @lovecy 编程就用等宽字体,这是行业标准。
    ysoserious
        10
    ysoserious  
       2020-08-18 11:59:58 +08:00   ❤️ 1
    现在的编辑器不是都可以自动把 tab 转换为空格么, 又不需要你手动去一下下敲空格, 都能对齐有啥好纠结的, 保持团队统一不好么.
    ripperdev
        11
    ripperdev  
       2020-08-18 12:03:46 +08:00
    @passerbytiny Vim 就可以,JetBrains 家的设置下应该也可以
    si
        12
    si  
       2020-08-18 12:06:35 +08:00   ❤️ 4
    空格的宽度是固定的,输入 N 个空格就是 1 个空格的 N 倍宽度。
    但 tab 在不同的编辑器显示的时候宽度是不同的,有些按一个字符宽度显示,有的按 8 个字符显示,差别太大了。
    而且还会根据内容缩减宽度。和内容混合的时候,tab 的宽度会在 1 至 N 之间变化。
    我如果要固定宽度的时候,用空格,如果要多行对齐就用 tab 。
    所以我一般开头用空格对齐,中间用要对齐就用 tab,如果只是为了分隔就用空格。
    lovecy
        13
    lovecy  
    OP
       2020-08-18 12:10:00 +08:00
    @passerbytiny 我惊了,`\t 空格\t`和`\t\t`难道不是同一个宽度?
    @whenov sublime3 默认字体,不是等宽(具体默认是啥我没找到。),vscode 默认字体`Consolas, 'Courier New', monospace`,也不是等宽,我目前用的是`Casadia Code`,也不是等宽,等宽字体用过几个,感觉美观性确实差点
    @also24 如上
    icyalala
        14
    icyalala  
       2020-08-18 12:12:42 +08:00
    写代码有哪个编辑器默认不是等宽字体的,难不成你是用记事本或者 word 来写代码?
    用空格缩进在哪里看都不会变,反而是 tab 显示空间会不一致。
    ispinfx
        15
    ispinfx  
       2020-08-18 12:15:37 +08:00 via iPhone   ❤️ 1
    `Consolas, 'Courier New', monospace`不是等宽???
    icyalala
        16
    icyalala  
       2020-08-18 12:16:20 +08:00   ❤️ 1
    @lovecy Sublime 默认字体 Linux 是 Monospace,Windows 是 Consolas,macOS 是 Menlo Regular,这些都是等宽字体。Casadia Code 也是等宽字体。

    除非你中英文混用,中文 fallback 到其他字体去了。
    sosilver
        17
    sosilver  
       2020-08-18 12:16:56 +08:00 via Android   ❤️ 3
    @lovecy 惊了,这几个字体不全是等宽字体吗
    Kr98
        18
    Kr98  
       2020-08-18 12:18:18 +08:00   ❤️ 3
    tab 显示宽度的不一致正是它优于空格的点

    使用空格等于将你的缩进喜好强加于阅读者,比如你喜欢 2 缩进,阅读者就只能看 2 缩进的代码。如果阅读者喜欢 4 缩进,那就很难受了。

    而 tab 完全不存在这个问题
    watzds
        19
    watzds  
       2020-08-18 12:21:23 +08:00 via Android
    我觉得 tab 每个人可以选择显示宽度比较好用,不过同时限制每行宽度的话,不知道是不是有问题
    xmumiffy
        20
    xmumiffy  
       2020-08-18 12:24:48 +08:00 via Android
    我们就是用 tab 的,然后每个人可以自己在 IDE 上指定一个 tab 多少空格
    casparchen
        21
    casparchen  
       2020-08-18 12:25:49 +08:00
    等宽字体(英语:Monospaced Font )是指字符宽度相同的电脑字体。
    lovecy
        22
    lovecy  
    OP
       2020-08-18 12:26:23 +08:00
    @cmdOptionKana 啥行业标准,我咋没听说过。。。。,那为啥热门编辑器默认字体都不是等宽字体

    @ysoserious 不是我不想统一,如果大家都用空格,我也用了,我们老代码是 tab,然后有些同事用 JetBrains,有些用 sublime,默认的缩进是空格,我们没人规定这个,所以想看看大家都是咋样的。。。
    MyPassWordis
        23
    MyPassWordis  
       2020-08-18 12:27:29 +08:00
    “而且显示的时候格式很好,不同设备展示差不多”
    这就没法聊了
    lovecy
        24
    lovecy  
    OP
       2020-08-18 12:28:12 +08:00
    @ispinfx
    @icyalala
    @casparchen
    原来你们说的是英文等宽,我以为这个是默认了,我说的是中英文等宽
    passerbytiny
        25
    passerbytiny  
       2020-08-18 12:30:00 +08:00 via Android   ❤️ 4
    看楼主对我的回复,大家散了吧。
    morethansean
        26
    morethansean  
       2020-08-18 12:30:08 +08:00   ❤️ 1
    楼主你列的几个全是等宽字体,现代编辑器的默认字体估计你找不出不是等宽的。我感觉你可能有中文,然后用的系统没有正确的等宽中文 fallback. 你可以在最后再加一个等宽中文,比如宋体。
    lovecy
        27
    lovecy  
    OP
       2020-08-18 12:33:03 +08:00
    @passerbytiny 我已经说了我的例子,你可以自己去编辑器试试这两个是不是显示宽度一直,你觉得不对就给出反例或者指出问题,请不要阴阳怪气
    whileFalse
        28
    whileFalse  
       2020-08-18 12:35:04 +08:00   ❤️ 1
    Tab 的唯一问题是,难以阻止协作者甚至是你自己混用 Tab 和空格,然后在不同的环境中看起来不一样。
    这点 yaml 做的就挺好,直接不允许使用 Tab 。
    rockyou12
        29
    rockyou12  
       2020-08-18 12:37:47 +08:00   ❤️ 1
    不要和杠精辩论,只会浪费时间,大家散了吧
    Chingim
        30
    Chingim  
       2020-08-18 12:38:56 +08:00 via Android
    肯定空格呀

    tab 的宽度在不同的环境下是会变的,恶心得一批
    fishCatcher
        31
    fishCatcher  
       2020-08-18 12:57:02 +08:00 via iPhone
    所以 gofmt 直接一律 tab
    newtype0092
        32
    newtype0092  
       2020-08-18 13:03:23 +08:00   ❤️ 19
    看了 24#的回复 “原来你们说的是英文等宽,我以为这个是默认了,我说的是中英文等宽”
    嗯。。。
    真相只有一个:LZ 写的是易语言代码!!!
    ipadpro4k
        33
    ipadpro4k  
       2020-08-18 13:04:27 +08:00 via iPhone   ❤️ 1
    散了散了,奇葩
    BrettD
        34
    BrettD  
       2020-08-18 13:19:15 +08:00 via iPhone
    大家散了吧,我都看不懂楼主在说啥
    Shook
        35
    Shook  
       2020-08-18 13:22:49 +08:00   ❤️ 1
    我喜欢在初始化变量时,把等号对齐。
    有时会需要用空格手动对齐一下,如果用 tab 而不是空格的话就会造成混用了,所以我都是用空格的。
    la9998372
        36
    la9998372  
       2020-08-18 13:23:59 +08:00   ❤️ 1
    举个例子 C 语言注释
    一行代码,后面跟着 //注释,如果代码和注释之间用 tab,换编译器的时候,由于 tab 在每个编译器下的空格数不一致,很容易就会出现,你在某个编辑器上发现注释是对齐的,但是另外一个编辑器就不对齐了。虽然现在大部分编辑器都是 tab=4 空格,但是有时候也会出现不对齐的情况。
    如果这时候用空格,一定是没问题的。
    Mutoo
        37
    Mutoo  
       2020-08-18 13:26:33 +08:00
    tab 调成 2 缩进或 4 缩进时非常容易与空格混淆,对编辑器兼容性也极差。相比之下空格的兼容性更好。

    另外 editorconfig / prettier 也如此好用,根本不需要手工缩进,硬盘空间如此便宜,也无须纠结文件大小。
    si
        38
    si  
       2020-08-18 13:46:35 +08:00
    @newtype0092 易语言只支持空格,不支持 tab,不会有这个问题,更谈不上喜欢用 tab 了😁
    jackmod
        39
    jackmod  
       2020-08-18 13:50:56 +08:00
    tab 和空格我都用。很多格式化工具支持自动转换。保证不混用即可。
    shijingshijing
        40
    shijingshijing  
       2020-08-18 14:10:08 +08:00   ❤️ 1
    特别讨厌 Python 这种行尾不加休止符+用缩进来分隔代码的风格,C,C++,Java 的花括号+分号结尾很好的解决了格式问题,而且即使在极端情况下,所有代码被压缩到一行,还能够快速格式化成原来的样子。

    Python 这种就是解决一个不存在的问题,敲四个空格+后期可能出现问题 vs 每行分号结尾,真不明白到底是谁战胜了谁。
    mazyi
        41
    mazyi  
       2020-08-18 14:15:44 +08:00 via iPhone
    hhhhhhhh,我要笑死啦,今日精选笑话集
    lovecy
        42
    lovecy  
    OP
       2020-08-18 14:20:46 +08:00
    @la9998372 对齐确实用空格对齐比较好,我这老项目好多用 tab 对齐的,换个字体格式乱了都
    @Shook 对齐确实用空格,我也是用一个插件自动空格对齐的,就是有一次前面有中文

    @newtype0092 你是在开发只给英语语种人用的软件?代码里一点中文没有么

    @shijingshijing 强制格式好像也有优点,感觉是习惯问题了
    einsdisp
        43
    einsdisp  
       2020-08-18 14:40:07 +08:00   ❤️ 2
    tab 用于“缩进”,空格用于“对齐”。

    对于“缩进”,显示宽度是由阅读者自己定义或设置的,代码作者无法强制。
    对于“对齐”,代码作者强制将相邻的行对齐,阅读者无法自己控制。

    大部分情况下,“缩进”与“对齐”是两件事。
    所谓“缩进”,用于区分代码块层级,例如代码行首的缩进。
    所谓“对齐”,用于代码行中的某种语义的对齐,例如对齐前后相邻若干行的等于号、冒号、或行尾的注释,诸如此类的。

    golang 默认的格式化工具就很清晰的区分的这两点:行首缩进用 tab,结构体注解对齐用空格。
    darmau
        44
    darmau  
       2020-08-18 15:02:32 +08:00   ❤️ 3
    我只知道你再纠结于这点就要找不到女朋友了,见《硅谷》
    webshe11
        45
    webshe11  
       2020-08-18 15:07:48 +08:00
    (笑而不语)
    lovecy
        46
    lovecy  
    OP
       2020-08-18 15:16:19 +08:00
    @darmau 搜了一下这剧感觉可以啊,追一下看看,至于你说的梗没 get 到

    @webshe11 我急了我急了
    ian19znj
        47
    ian19znj  
       2020-08-18 15:31:10 +08:00
    @lovecy #46 硅谷里有一个情节是, 男主这样的奇葩走了狗屎运遇到一个志同道合的女票, 但是两人由于缩进应该用空格和 tab 的分歧而分手, 其中男主坚持要用 tab.
    chenmobuys
        48
    chenmobuys  
       2020-08-18 15:49:45 +08:00
    空格固定宽度,Tab 不同编辑器显示的宽度可能不一致。
    lxk11153
        49
    lxk11153  
       2020-08-18 16:02:42 +08:00   ❤️ 1
    append 一个例子出来吧,我懵逼了!!!
    qiyue0726
        50
    qiyue0726  
       2020-08-18 16:06:28 +08:00
    @ian19znj 理查德是空格党
    qiyue0726
        51
    qiyue0726  
       2020-08-18 16:08:37 +08:00
    我就很不爽 Python 那垃圾缩进设计,Java 、JS 这些我都是 tab 、空格混着来,对齐了就好
    qqqqqcy
        52
    qqqqqcy  
       2020-08-18 16:57:35 +08:00
    所有靠自觉和口头的风格化都是没有任何价值的。在项目里用 lint 工具限定好就行了,用哪个都无所谓,关键是要统一
    sdlzqjf
        53
    sdlzqjf  
       2020-08-18 17:39:17 +08:00
    ide 里都可以设置缩进格式,可以设置成四个空格,也可以设置成 tab,只要团队用统一代码格式模版,统一格式化就行啊,讨论哪个好哪个坏没什么意义,关键是要有统一的规范,其他的用工具来实现就可以啊
    icyalala
        54
    icyalala  
       2020-08-18 18:02:12 +08:00   ❤️ 3
    passerbytiny
        55
    passerbytiny  
       2020-08-18 18:10:33 +08:00 via Android
    @lovecy 直到现在,你都没说你用得是什么编辑器,你也没说明白你那个“尽量”对齐是个什么效果。

    “我不明确说出我的论据,你要先猜出我的论据再拿论据反驳”,你这种人在本社区是会被喷 /屏蔽到自闭的。

    此项不用回复,原因见上。
    ZRS
        56
    ZRS  
       2020-08-18 19:21:41 +08:00
    一致性
    JCZ2MkKb5S8ZX9pq
        57
    JCZ2MkKb5S8ZX9pq  
       2020-08-18 19:23:23 +08:00
    本来我 python 也一直用 tab,感觉简洁还省字符。不过后来有几个开源项目统一要 pep8,那之后就基本都按 pep8 标准来了,缩进也用空格了( autopep8 自动搞定)。
    Torpedo
        58
    Torpedo  
       2020-08-18 19:41:45 +08:00
    随便,设置好格式化工具,爱咋咋地
    secondwtq
        59
    secondwtq  
       2020-08-18 20:00:44 +08:00
    文本形式的“代码”仅仅是“程序”的一种编码形式而已。我倒是觉得不应该太局限在单一的编码形式上。
    tairan2006
        60
    tairan2006  
       2020-08-18 21:14:35 +08:00
    tab 转 4 空格就完事
    shylockhg
        61
    shylockhg  
       2020-08-18 22:21:02 +08:00
    tab 是不定长的,space 是定长的
    masker
        62
    masker  
       2020-08-19 00:43:16 +08:00 via Android
    看了那么多回复,我倒觉得是楼主自己阴阳怪气,说不过就暗讽。。。
    moguiyu
        63
    moguiyu  
       2020-08-19 01:45:24 +08:00
    我去,你没有看过《硅谷》吗?强烈建议去看一下。。
    msg7086
        64
    msg7086  
       2020-08-19 07:03:26 +08:00
    为什么各大编辑器的默认字体是英文等宽而不是中英文等宽?

    因为他们的开发者™不写中英文混合的代码。

    你要在英文代码里加中文,自己找中英文等宽字体去啊。
    Yahei Consolas Hybrid 出来多少年了?至少有个 5 年了吧,我自己 VSCode 上一直在用,以前 Sublime2 上就在用了。
    更纱黑体也有好久了吧?虽然我不太喜欢这英文字形,不过 SSH 远程用感觉还不错。

    用空格和用 Tab 这事能怪到老外不用中文写代码上我也是头一次见了。
    zhouzm
        65
    zhouzm  
       2020-08-19 08:26:07 +08:00
    tab 根本不是缩进,它是对齐。

    The tab key Tab ↹ on a keyboard is used to advance the cursor to the next tab stop.
    yolee599
        66
    yolee599  
       2020-08-19 09:11:50 +08:00
    tab 是不定长的,你的编辑器看着没问题,到另一个编辑器看就是乱七八糟的
    missdeer
        67
    missdeer  
       2020-08-19 09:29:55 +08:00
    拿着几个英文字体说中文不等宽,呵呵
    acgost
        68
    acgost  
       2020-08-19 09:30:20 +08:00   ❤️ 1
    真不知道楼主是来寻求答案还是来寻求认同的,越往后看越发现已经不是用 tab 还是空格的问题了,毕竟大部分人都建议用空格了,也给出了原因,答案已经显而易见,认同也明显寻求不到的了。现在主流编辑器都带有一键格式化,甚至自动格式化,甚至可以通过添加插件自定义并约束格式,不至于旧的代码换了字体就无法正常显示了。至于使用什么编辑器和插件,自行 google 吧,这都扶到门口了,如果还不愿意抬抬腿,那还是别进门了。
    0x11901
        69
    0x11901  
       2020-08-19 10:59:08 +08:00
    惊了……用大部人用空格代替制表符缩进的原因是因为制表符在不同的编辑器中显示的长度不同的原因么……而空格你可以自己制定缩进的长度是多少么……
    tomoya92
        70
    tomoya92  
       2020-08-19 11:03:06 +08:00
    自从 idea 装上 save actions 插件后,我就再也没有按过 tab 键了,写代码的时候光标在哪就在哪写,写完 ctrl+s,完事,至于它格式化后是用的 tab 还是空格,就看 idea 默认是啥了。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3732 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:16 · PVG 12:16 · LAX 20:16 · JFK 23:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.