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想得到一个很好的答案,你能不能也包括一个示例代码段?