Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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
Coding style 为什么要避免点运算符链接_Coding Style_Refactoring - Fatal编程技术网

Coding style 为什么要避免点运算符链接

Coding style 为什么要避免点运算符链接,coding-style,refactoring,Coding Style,Refactoring,有两个代码段: someObject.getBla1().getBla2().performBlah(); 第二个: bla1=someObject.getBla1(); bla2=bla1.getBla2(); bla2.performBlah(); 我总是被告知要避免第一个,而使用第二个,因为我觉得第二个只是一种痛苦 第二种方法的好处是什么?第二种方法可以让你更清楚地了解自己在做什么,但我个人认为,只要你的对象和方法提供流畅的界面,第二种方法就没有问题。第二种方法可以让你更清楚地了解自己

有两个代码段:

someObject.getBla1().getBla2().performBlah();
第二个:

bla1=someObject.getBla1();
bla2=bla1.getBla2();
bla2.performBlah();
我总是被告知要避免第一个,而使用第二个,因为我觉得第二个只是一种痛苦


第二种方法的好处是什么?

第二种方法可以让你更清楚地了解自己在做什么,但我个人认为,只要你的对象和方法提供流畅的界面,第二种方法就没有问题。

第二种方法可以让你更清楚地了解自己在做什么,但我个人认为,只要你的对象和方法提供流畅的界面,那么做第二个就没有问题。

你应该避免像你给出的第一个例子那样的点链接,因为在出现异常等故障的情况下,你会得到它发生的那一行。因此,在第一种情况下,在同一条线路中有许多呼叫。这样,您将无法知道哪些调用引发了异常,例如空指针异常。在第二个示例中,尽管它看起来不那么干净,但实际上更容易发现故障,因为您将确切地知道什么调用失败。

您应该避免像第一个示例那样的点链接,因为在出现异常等故障的情况下,您将得到发生故障的行。因此,在第一种情况下,在同一条线路中有许多呼叫。这样,您将无法知道哪些调用引发了异常,例如空指针异常。在第二个示例中,尽管它看起来不那么干净,但实际上更容易发现故障,因为您将确切知道什么调用失败。

避免两种形式。在编写说明

每个单元对其他单元的了解应有限:仅与当前单元密切相关的单元

每个单位只能和朋友交谈;不要和陌生人说话

只和你的直系朋友交谈

你违反了这条法律,因为某个对象知道bla2有一个performBlah方法。如果它真的需要这种方法,他们会将它移动到某个对象上,并向外界隐藏bla1和bla2

然后,someObject.getBla1.getBla2.performBlah将成为someObject.performBlah,someObject.performBlah的内部实现可能会委托给bla1,而bla1又会委托给bla2以获得实现。重要的是要确保每个对象只知道它的直接朋友,而不接触到更广阔的世界。例如,某个对象只知道bla1,bla1只知道bla2。

避免两种形式。在编写说明

每个单元对其他单元的了解应有限:仅与当前单元密切相关的单元

每个单位只能和朋友交谈;不要和陌生人说话

只和你的直系朋友交谈

你违反了这条法律,因为某个对象知道bla2有一个performBlah方法。如果它真的需要这种方法,他们会将它移动到某个对象上,并向外界隐藏bla1和bla2


然后,someObject.getBla1.getBla2.performBlah将成为someObject.performBlah,someObject.performBlah的内部实现可能会委托给bla1,而bla1又会委托给bla2以获得实现。重要的是要确保每个对象只知道它的直接朋友,而不接触到更广阔的世界。例如,某个对象只知道bla1,bla1只知道bla2。

如果函数返回调用该函数的对象,则链接会更短。但是如果函数返回其他内容,最好将其分开。您没有指定语言,只有分号给出了有关它的提示。点链接在Ruby中很重要并且经常使用。@karatedog您的评论毫无帮助。a他没有问关于Ruby的问题,b频繁使用Ruby并不能使它成为一种好的或至少是毫无疑问的做法——他问的正是为什么有些人认为应该避免使用Ruby的问题。另外,很明显,语言并不重要,除非你知道一些语言使用点来引用对象的属性/方法以外的东西,你可以说字符串连接,但是大括号不合适。我没有回答Ruby,这只是一个例子。公认的答案清楚地证明了这个问题可能被误解。Ruby中的点链在Linux/Unix中充当管道。如果您想要grep一个文件,那么使用sed修改结果—您不需要实现一个同时具有这两种功能的新实用程序。你把它们锁起来。或者执行一个,存储结果,然后执行另一个。你必须使用OP中的一个表格。被接受的答案告诉你不要这样做。然而,公认的答案是正确的,但在一个完全不同的问题领域。很遗憾,这个只有一个问题的用户离开了SO。如果函数返回对象w,则链会更短
该函数被调用。但是如果函数返回其他内容,最好将其分开。您没有指定语言,只有分号给出了有关它的提示。点链接在Ruby中很重要并且经常使用。@karatedog您的评论毫无帮助。a他没有问关于Ruby的问题,b频繁使用Ruby并不能使它成为一种好的或至少是毫无疑问的做法——他问的正是为什么有些人认为应该避免使用Ruby的问题。另外,很明显,语言并不重要,除非你知道一些语言使用点来引用对象的属性/方法以外的东西,你可以说字符串连接,但是大括号不合适。我没有回答Ruby,这只是一个例子。公认的答案清楚地证明了这个问题可能被误解。Ruby中的点链在Linux/Unix中充当管道。如果您想要grep一个文件,那么使用sed修改结果—您不需要实现一个同时具有这两种功能的新实用程序。你把它们锁起来。或者执行一个,存储结果,然后执行另一个。你必须使用OP中的一个表格。被接受的答案告诉你不要这样做。然而,公认的答案是正确的,但在一个完全不同的问题领域。很遗憾,这个有一个问题的用户离开了SO.thnx+1,想得到一个很好的答案,你能不能也包括一个示例代码段?thnx+1想得到一个很好的答案,你能不能也包括一个示例代码段?