截断方法调用

时间:2020-03-06 15:01:08  来源:igfitidea点击:

这是一个主观的问题,因为我想衡量我是否值得为我的同事们抱怨做一些我认为完全可憎的事情。

问题是我的许多同事将截断方法调用以适合宽度。我们所有人都使用能够处理高分辨率(我的分辨率为1920x1200)的宽屏笔记本电脑,并且在调试和读取代码时,我发现读取一个行方法调用相对于多个行调用要容易得多。

这是方法的示例(我希望如何):

IReallyLongInterfaceName instanceOfInterfaceName = OurContainer.retrieveClass(IReallyLongInterfaceName.class, param1, param2, param3);

(我也讨厌很长的接口/类名:)

看来这在StackOverflow上效果不佳,但是我想你们中的大多数人都明白我的意思。无论如何,其他一些开发人员会执行以下操作。

IReallyLongInterfaceName instanceOfInterfaceName = OurContainer.retrieveClass(IReallyLongInterfaceName.class, 
                                                                              param1, 
                                                                              param2, 
                                                                              param3);

在一天结束时,哪个更容易阅读,让我要求他们使用两者中的第一个(因为这是我们标准的一部分),我会不合理吗?

解决方案

也许我们应该在标准构建过程中使用某种checkstyle插件来检查这种东西?如果我们已经与同事达成了一致,那么请他们坚持下去似乎是合理的。

我个人认为这两个选项中的第二个更具可读性,但这只是因为我没有宽屏显示器;)

如果它在公司编码标准中明确指出一种方法是正确的方法,则一定要抱怨他们,毕竟他们没有遵守公司标准。
如果没有明确说明,那么我想现在是将其纳入标准的好时机。
但是,要注意的一件事是,如果我们将IDE与自动格式化一起使用,则可能需要它自己重新设置样式2的运行时的方法格式。
因此,即使每个人都在编写样式1,当他们完成样式1时,结果可能看起来也不会一样。

和Phil一样,我发现方法2更具可读性,因为我们可以看到需要看到的所有内容,而不必横向滚动眼睛:)

我发现第一个示例通常更具可读性,尽管如果它长于某个预定义的限制(对我来说是120个字符),我会折行:

IReallyLongInterfaceName instanceOfInterfaceName =
        OurContainer.retrieveClass(IReallyLongInterfaceName.class,
                                   param1, param2, param3);

我更喜欢第二个例子。即使我们可能拥有宽屏笔记本电脑,也可能不会始终使Windows处于全屏状态,或者在IDE中,主编码区域周围可能还有许多其他面板,这些面板减小了显示代码的可用宽度。

如果无法滚动显示该行,则垂直滚动优于水平滚动。因为我们从左到右阅读,所以水平滚动将意味着一直向后移动。

与Avi的建议相比,我更喜欢每行一个参数,这对我来说是任意的。如果将参数分布在多行上,但每行上都有多个参数,则在读取代码时将很难找到特定的参数。

我也更喜欢选项2. 问题不仅在于它在屏幕上的外观(如果我有1920个水平像素,我将有更多停靠的窗口),而是我需要打印和阅读它时的外观。在大多数IDE中,很长的行会打印出来,而作者为了提高可读性而打断的行会打印得很好。

另一点是一般的可读性。有理由将杂志和报纸打印在列中-通常,较短的行距和更好的布局/格式可以提高文本(尤其是屏幕上的文本)的可读性。

我认为80可能过于随意,但是我使用的是10pt Consolas,在标准的8.5英寸打印页面上,每行似乎可以得到100个字符。

如今,这是一场神圣的战争。也许不如放在大括号的位置糟,但是它就在那里。我已经给了我们我的偏好,但是真正的问题又回到了位置:我们公司的标准是什么?在我看来,它们已经在选项#2上实现了标准化,这意味着对于团队而言,我们可能应该适应它们。

我更喜欢选项2,但可以选择在变量名不明显的地方添加参数注释。当我们有一个要求一堆参数的函数调用时,对于审阅者来说,很难说出代码在做什么。

因此,如果给定函数有3个以上的参数,我通常会这样编码:

applyEncryptionParameters(key,
                          certificate,
                          0, // strength - set to 0 to accept default for platform
                          algorithm);