Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 制表符代码是否是编写更好代码的好方法?_Javascript_Meteor_Reactjs - Fatal编程技术网

Javascript 制表符代码是否是编写更好代码的好方法?

Javascript 制表符代码是否是编写更好代码的好方法?,javascript,meteor,reactjs,Javascript,Meteor,Reactjs,我正在做Meteor.js教程,这件事引起了我的注意。我对编码有点陌生,我不想从错误的开始 对我来说,似乎从一些行中标记信息以使其对齐比不这样做要漂亮得多。我想知道这样做是否是一种好的做法 例子 非选项卡式: export default createContainer(() => { return { tasks: Tasks.find({}, { sort: { createdAt: -1 } }).fetch(), incompleteCoun

我正在做Meteor.js教程,这件事引起了我的注意。我对编码有点陌生,我不想从错误的开始

对我来说,似乎从一些行中标记信息以使其对齐比不这样做要漂亮得多。我想知道这样做是否是一种好的做法

例子

非选项卡式:

export default createContainer(() => {
    return {
        tasks: Tasks.find({}, { sort: { createdAt: -1 } }).fetch(),
        incompleteCount: Tasks.find({ checked: { $ne: true } }).count(),
        currentUser: Meteor.user(),
    };
}, App);
选项卡式(对我来说似乎更好):


是的,我也喜欢你的风格。但是,当您更改属性的名称(或在和IDE中自动重命名它们)时,维护起来有多容易呢

我认为人们不使用这种风格的主要原因是因为它不可能(很难)保持

如果你共享你的代码,其他人可能没有相同的选项卡设置,这对他们来说一点也不好看


如果它只是您自己的代码,请根据您的喜好格式化它。你的风格可读性很强,但你可能会发现很难保持。我会尽量客观地回答,因为这是一个问答网站,不适合进行固执己见的辩论:

Tabbing-PRO:

  • 可视提示,可以说是更快的键和值的可视解析
制表符-反面:

  • 选项卡宽度取决于编辑器,不同的选项卡宽度可能会破坏对齐
  • 添加或删除键可能需要编辑所有其他值的缩进

我在小型/静态代码片段中见过这种缩进,其主要目的是促进理解/教学。我很少在频繁更改或重构的生产性代码中使用这种缩进。

一旦你开始加入一个大团队,风格就会有巨大的差异

如果从该列表中添加或删除密钥,则必须重新格式化多行

当我通过版本控制试图找出对文件所做的更改时,会出现各种各样的空白更改,我必须检查这些更改是否重要


把杂物放低

正如其他人所说,这取决于你自己的喜好。需要知道的是,你不必自己做标签。您可以只编写代码,然后在文本编辑器中使用一些资源,例如或本地重新登入器。

我们需要对齐吗? 如果这些事实上是以某种完美的方式排列的,那么对于阅读代码的开发人员来说,什么样的任务应该更容易完成呢

例如,我们是否需要同时查看两行或更多行以进行比较

为什么我们需要比较这些线呢

tasks (a colection)
incompleteCount (a number)
currentUser (an object)
我找不到这样的例子,所以我的结论是: 无需比较-无需对齐

有“对齐”这样的东西吗? 现在,如果您找到了将这段代码与选项卡对齐的理由,那么让我们看看对齐的版本,并尝试看看它是否以某种有用的方式进行了对齐

事实证明,一开始它看起来只是一个更结构化的代码

Tasks对象的方法名称是对齐的,这一事实并没有增加多少总体可读性——在本例中,它甚至没有与第三行对齐:

| <- this is the last column that is aligned
|Tasks.|
|Tasks.|
|Meteor.| <- // not aligned anymore, shift one character.
如果你问我,如果我试图把它作为一个整体来看待,那将是一片混乱,而标签在这里没有帮助

这种对齐有什么含义? 需要不必要的努力 这是最烦人的一个。IDE中的自动格式化工具不支持这种对齐方式。事实上,您可能会与IDE进行斗争,以便在任何时候接触这些行时都能保持这种格式的最新

可能会干扰版本控制。 是的,您可能可以在各种版本控制工作流中启用某种类型的ignore-witespace功能,但同样,这会增加我们的开销

故意不一致 代码不是一成不变的,而是不断发展的。如果以后添加一些内容,可能会破坏不相关行中的对齐

tasks:          |
incompleteCount |
currentUser     |
someOtherMethodAddedLater | <- the first three have to keep up with this one
问题是,使用witespace,在没有水平网格线的情况下,很难匹配左侧和右侧的项目

当您尝试使用制表符格式化代码时,也会发生同样的情况

这在没有空格的文本中不是问题,因为非witespace字符构成了整行文本的可视链接。例如,在本文中,眼睛按行分组单词不是问题

因此,当您将代码页视为一种视觉模式时,它可能在一开始看起来更有条理,但实际上它的视觉链接更少,更难阅读


因此,虽然使用制表符可以使代码页面在视觉上更具吸引力,但答案是-不,这不是一个好的做法。

这是个人偏好和编码风格的问题。一些团队和语言强制执行某种风格,node.js有自己的风格指南。我只是重复其他人在这里所说的,但这是个人品味的问题。随着您作为开发人员的成长,您将(希望)开始开发自己的风格:制表符而不是空格,2个空格vs 4个空格,等等。有些将由语言决定,有些可能由您的工作团队决定。对我来说,最重要的是保持一致,不仅是与你自己,而且与你所在团队的人保持一致。当一个团队不使用一致的风格时,它会降低生产力。我同意你的看法。在课堂上,我在记事本++上编写的代码一旦复制到理想的答案中,看起来就不合适了。代码看起来只是“更好”,但这不是一件实际的事情。OP的对齐在视觉上将对象属性与实现细节分开,从而反映了接口与实现的分离。所以,虽然我同意你的结论,但如果你能更客观一些,你的答案可能会更好。@leu_我的观察力很好。考虑到这一点,我会考虑改进我的答案,谢谢。
... .find({}, { sort: { createdAt: -1 } }).fetch(),
... .find({ checked: { $ne: true } }).count(),
...  .user(),
tasks:          |
incompleteCount |
currentUser     |
someOtherMethodAddedLater | <- the first three have to keep up with this one
aa:                                    Methods.methodY(453),
ab:                                    Methods.methodZ(554),
a1:                                    Methods.methodX(143),
a2:                                    Methods.methodZ(235),
a3:                                    Methods.methodY(223),
a4:                                    Methods.methodY(334),
a5:                                    Methods.methodY(445),
a6:                                    Methods.methodZ(554),
a7:                                    Methods.methodX(734),
a11:                                   Methods.methodX(143),
a12:                                   Methods.methodZ(235),
a13:                                   Methods.methodY(735),