Questions tagged «indentation»

14
代码编辑器如何在不使用缩进的情况下有效地提示代码嵌套级别?[关闭]
我已经编写了一个XML文本编辑器,该编辑器为相同的XML文本提供2个视图选项,其中一个缩进(虚拟),另一个向左对齐。左对齐视图的动机是帮助用户“看到”用于纯文本或XPath代码缩进的空白字符,而不会受到作为XML上下文的自动副作用的缩进的干扰。 我想为左对齐模式提供视觉线索(在编辑器的不可编辑部分),这将对用户有所帮助,但又不会太复杂。 我尝试仅使用连接线,但是似乎太忙了。到目前为止,我所提出的最好的结果显示在下面的编辑器的模拟屏幕快照中,但是我正在寻找更好/更简单的替代方法(不需要太多的代码)。 [编辑] 以热图的想法(来自:@jimp),我得到了这个和3个替代方案-分别标记为a,b和c: 下一节将接受的答案描述为一个建议,将其他答案和评论中的想法汇集在一起​​。由于此问题现在是社区Wiki,请随时进行更新。 NestView 这个想法的名称提供了一种直观的方法,可以在不使用缩进的情况下提高嵌套代码的可读性。 等高线 NestView中不同阴影线的名称 上图显示了NestView,用于帮助可视化XML代码段。尽管XML用于此插图,但使用嵌套的任何其他代码语法也可以用于此插图。 概述: 等高线被着色(如在热图中)以传达嵌套水平 等高线倾斜以显示何时打开或关闭嵌套层。 等高线将嵌套层的起点链接到相应的终点。 除了热图之外,轮廓线的组合宽度还给人以嵌套层次的视觉印象。 NestView的宽度可以手动调整大小,但不应随代码更改而改变。轮廓线可以压缩或截断以保持这一点。 有时使用空行代码将文本分解为更多可消化的块。这些行可能会在NestView中触发特殊行为。例如,可以重设热图或使用背景色轮廓线,或同时使用两者。 与当前所选代码关联的一条或多条轮廓线可以突出显示。与所选代码级别关联的轮廓线将得到最大程度的强调,但其他轮廓线也可以“亮起”,以帮助突出显示包含嵌套的组 可以在轮廓线上单击/双击不同的行为(例如代码折叠或代码选择)。 等高线的不同部分(前缘,中间或后缘)可能具有不同的动态行为。 可以在轮廓线上方的鼠标悬停事件上显示工具提示 随着代码的编辑,NestView会不断更新。在嵌套不均衡的地方,可以假设嵌套层应该在哪里结束,但是必须以某种方式突出显示关联的临时轮廓线,以作为警告。 可以支持轮廓线的拖放行为。行为可能会随所拖动的轮廓线的部分而变化。 通常在左边距中发现的功能(例如行号和错误的颜色突出显示以及更改状态)可以覆盖NestView。 附加功能 该提案解决了一系列其他问题-许多问题超出了原始问题的范围,但产生了有益的副作用。 可视地链接嵌套区域的开始和结束 等高线连接每个嵌套层的起点和终点 突出显示当前选定行的上下文 选择代码后,可以突出显示NestView中关联的嵌套级别 区分同一嵌套级别的代码区域 对于XML,可以将不同的颜色用于不同的名称空间。编程语言(例如c#)支持可以以类似方式使用的命名区域。 将嵌套区域内的区域划分为不同的可视块 通常在代码中插入多余的行以提高可读性。这样的空线可用于重置NestView等高线的饱和度。 多列代码视图 没有缩进的代码使使用多列视图更加有效,因为不太需要自动换行或水平滚动。在此视图中,一旦代码到达一列的底部,它将流入下一列: 用途不仅仅提供视觉帮助 正如概述中所建议的那样,NestView 可以提供一系列的编辑和选择功能,这些功能与TreeView控件的预期大致相符。关键区别在于,典型的TreeView节点分为两部分:扩展器和节点图标。NestView等高线最多可以包含3个部分:打开器(倾斜),连接器(垂直)和闭合(倾斜)。 压痕 与非缩进代码一起显示的NestView是对传统缩进代码视图的补充,但不太可能替代。 任何采用NestView的解决方案都可能会提供一种在缩进和非缩进代码视图之间无缝切换而又不影响任何代码文本本身(包括空格字符)的方法。缩进视图的一种技术是“虚拟格式设置”-使用动态左边界代替制表符或空格字符。用于动态呈现NestView的相同嵌套级数据也可以用于外观更传统的缩进视图。 列印 缩进对于打印代码的可读性很重要。在这里,没有制表符/空格字符和动态的左边距意味着文本可以在右边距处换行并仍然保持缩进视图的完整性。行号可用作可视标记,用于指示代码在何处换行以及缩进的确切位置: 屏幕真实状态:缩进与缩进 解决NestView是否用完宝贵的屏幕房地产的问题: 轮廓线的宽度与代码编辑器的字符宽度相同时,效果很好。因此,在轮廓线被截断/压缩之前,NestView宽度为12个字符的宽度可以容纳12个嵌套级别。 如果缩进视图的每个嵌套级别使用3个字符宽度,则将保留空间,直到嵌套达到4个嵌套级别为止。在此嵌套级别之后,平面视图具有节省空间的优点,该优势随每个嵌套级别而增加。 注意:对于代码,通常建议最小缩进4个字符的宽度,但是XML经常使用较少的字符。此外,虚拟格式化允许使用更少的缩进,因为没有对齐问题的风险 …


12
弹性挡片的缺点是什么?[关闭]
看这里:关于制表符和空格的典型圣战。 现在看这里:弹性的制表符。解决了所有问题,并添加了一堆非常有用的新行为。 在制表符与空格讨论中是否甚至提到了弹性制表符?为什么不?弹性制表符的想法是否存在严重的缺陷,以至于没人能在流行的编辑器中实现它们? 编辑:我很抱歉过于强调“为什么他们没有提到”。那不是我真正想要的。这个问题甚至可能是个话题。我真正的意思是,这种做法最大的弊端是什么阻止了广泛采用明显有益的想法?(在一个理想的世界中,一切已经得到支持) (结果是,Microsoft Connect上已经有一个针对Visual Studio实现的弹性制表符的请求,在Eclipse中也有一个请求。此外,还有一个问题询问其他实现弹性制表符的编辑器)


3
代码缩进的起源
我有兴趣了解谁引入了代码缩进,以及引入的时间和地点。 对于代码理解来说,这似乎至关重要,但这并不是通用的。大多数Fortran和Basic代码是缩进的(?),Cobol也是如此。 我敢肯定,我什至看到过旧的Lisp代码都写成连续的,换行的文本。您只需要在脑子里数一下括号就可以解析它,不要介意理解它。 那么,如此巨大的进步从何而来呢?我从未见过有关其起源的任何提及。 除了使用它的原始示例外,我还在寻找有关缩进的原始讨论。

8
在什么时候禁忌在循环中循环?
只是好奇。我曾经遇到过的最多的是for循环中的for循环,因为从Linus Torvalds读取以下内容后: 制表符是8个字符,因此缩进也是8个字符。有些异端运动试图使缩进量增加4个(甚至2个!)字符,这类似于试图将PI的值定义为3。 原理:缩进的整个思想是明确定义控制块的开始和结束位置。尤其是当您连续20个小时查看屏幕时,如果压痕较大,则发现压痕的工作原理要容易得多。 现在,有些人会声称具有8个字符的缩进会使代码向右移得太远,并使得在80个字符的终端屏幕上难以阅读。 答案是,如果您需要三个以上的缩进级别,那么无论如何您都会被搞砸,应该修复程序。 https://www.kernel.org/doc/Documentation/CodingStyle 我认为进入第三层循环对我来说是不可接受的做法,并且会重组我的代码(Primally Qt)。 莱纳斯在开玩笑吗? 是否取决于语言或应用程序? 是否有某些事情绝对需要三级或更多级循环?

5
重新格式化和版本控制
代码格式很重要。甚至缩进也很重要。一致性比微小的改进更为重要。但是,项目通常从第一天起就没有清晰,完整,可验证和强制的样式指南,并且重大改进可能会在任何一天出现。也许你发现 SELECT id, name, address FROM persons JOIN addresses ON persons.id = addresses.person_id; 可以更好地写成/比 SELECT persons.id, persons.name, addresses.address FROM persons JOIN addresses ON persons.id = addresses.person_id; 同时在查询中添加更多列。也许这是代码中所有四个查询中最复杂的查询,或者成千上万个简单查询。无论过渡有多困难,您都认为值得。但是,如何跟踪主要格式更改中的代码更改?您可以放弃并说“这是我们再次开始的地方”,也可以重新格式化整个存储库历史记录中的所有查询。 如果您正在使用像Git这样的分布式版本控制系统,则可以还原到有史以来的第一次提交,然后从那里重新格式化为当前状态。但这是一项艰巨的工作,其他所有人都必须在工作进行期间暂停工作(或为所有合并的母亲做好准备)。有没有更好的方法可以更改历史记录,从而获得最好的结果: 所有提交中的样式相同 最少的合并工作 ? 需要澄清的是,这与启动项目时的最佳实践无关,而是在大型重构被视为Good Thing™却又想获得可追溯的历史时应该怎么做?如果这是确保您的版本始终保持相同工作的唯一方法,则永远不要重写历史记录,这是伟大的,但是对于开发人员而言,全新重写的好处是什么?特别是如果您有方法(测试,语法定义或编译后的相同二进制文件)可以确保重写后的版本与原始版本完全一样?

9
如何防止深凹痕?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 我可以采取什么步骤和措施来防止代码中的深缩进?

8
样式化复合AND / OR if语句
如何为复杂的复合AND / OR if语句设置样式,以实现最大的可读性?您如何缩进以及将换行符放在何处?我的特殊情况如下。绝对比将所有内容都粉碎成一条线要好,但是看起来仍然很凌乱。 if ( ( x == y && a != b && p.isGood() && ( i + u == b || q >= a ) ) || k.isSomething() || m > n ) { doSomething(); }

5
为什么有些语言建议使用空格而不是制表符?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 也许我一个人在里面,但是没有什么让我烦恼的,就像人们缩进而不是制表符。与打字SpaceSpaceSpaceSpace相比,打字更容易,更直观Tab吗?当然,制表符宽度是可变的,但它比空格更能表示缩进空间。退格是一样的。退格一到四次? 为什么像Python这样的语言建议在制表符上使用空格?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.