Questions tagged «methods»

5
将对象两次传递给相同的方法还是与合并的接口合并?
我有一种方法,可以在与数字板交谈后创建数据文件: CreateDataFile(IFileAccess boardFileAccess, IMeasurer boardMeasurer) 这里boardFileAccess和boardMeasurer是相同的实例Board对象,同时实现了IFileAccess和IMeasurer。IMeasurer在这种情况下,仅用于一种方法,该方法将使板上的一个引脚处于活动状态以进行简单的测量。然后,使用将该测量的数据本地存储在板上IFileAccess。Board位于一个单独的项目中。 我得出的结论CreateDataFile是,通过快速测量然后存储数据来做一件事,对于其他使用此代码然后必须进行测量并写入文件的人来说,使用同一方法进行这两种操作更直观作为单独的方法调用。 对我来说,将同一对象两次传递给方法似乎很尴尬。我认为做一个本地接口IDataFileCreator,可以扩展IFileAccess和IMeasurer再有一个包含一个实现Board的实例,将只需要调用所需的Board方法。考虑到同一板对象将始终用于测量和文件写入,将同一对象两次传递给方法是否是一种不好的做法?如果是这样,使用本地接口和实现是否是合适的解决方案?

1
参数和参数之间有区别吗?
可能是这样的:参数表示来自调用方POV,参数表示在过程内部,或相反。 还是没有区别? 更新资料 在瑞典语中,我们说“ anropsparametrar”,即“正在调用过程的参数”,而不会说“ anropsargument”(“正在调用过程的参数”)。

7
使类方法传递类变量是一个坏主意吗?
这就是我的意思: class MyClass { int arr1[100]; int arr2[100]; int len = 100; void add(int* x1, int* x2, int size) { for (int i = 0; i < size; i++) { x1[i] += x2[i]; } } }; int main() { MyClass myInstance; // Fill the arrays... myInstance.add(myInstance.arr1, myInstance.arr2, myInstance.len); } add因为它是一个类方法,已经可以访问它需要的所有变量了,所以这不是一个好主意吗?有什么理由我应该或不应该这样做?

2
设计:对象方法与以对象为参数的单独类的方法?
例如,这样做更好吗? Pdf pdf = new Pdf(); pdf.Print(); 要么: Pdf pdf = new Pdf(); PdfPrinter printer = new PdfPrinter(); printer.Print(pdf); 另一个例子: Country m = new Country("Mexico"); double ratio = m.GetDebtToGDPRatio(); 要么: Country m = new Country("Mexico"); Country us = new Country("US"); DebtStatistics ds = new DebtStatistics(); double usRatio = ds.GetDebtToGDPRatio(us); double …

2
我应该将“计算”值公开为属性还是方法?
我有一个C#类,它表示Web内容管理系统中的内容类型。 我们有一个字段,允许Web内容编辑器输入HTML模板以显示对象的显示方式。它基本上使用把手语法将对象属性值替换为HTML字符串: <h1>{{Title}}</h1><p>{{Message}}</p> 从类设计的角度来看,我应该将格式化的HTML字符串(带有替换)作为属性或方法公开吗? 作为属性的示例: public class Example { private string _template; public string Title { get; set; } public string Message { get; set; } public string Html { get { return this.ToHtml(); } protected set { } } public Example(Content content) { this.Title = content.GetValue("title") as string; this.Message …


5
消息和方法之间的区别?
在Objective C中,您具有将消息发送到其他对象的概念,并且,这与以C#和Java这样的语言进行的方法调用非常相似。 但是,细微的差别到底是什么?在考虑我的代码时,我应该如何考虑消息传递? 注意:在这里,我只是一名C#/ Java开发人员,试图了解有关Objective C的一些概念。
13 methods 

3
当调用成本很高时,通过Python中的单一职责原则(SRP)进行工作
一些基点: 由于其解释性质,Python方法调用是“昂贵的”。从理论上讲,如果您的代码足够简单,那么分解Python代码除了会提高可读性和重用性之外,还会带来负面影响(这对开发人员而言是一大收获,对用户而言却不是很多)。 单一责任原则(SRP)可使代码保持可读性,易于测试和维护。 该项目具有特殊的背景,我们需要可读的代码,测试和时间性能。 例如,像这样的调用多个方法(x4)的代码比随后的仅一个方法慢。 from operator import add class Vector: def __init__(self,list_of_3): self.coordinates = list_of_3 def move(self,movement): self.coordinates = list( map(add, self.coordinates, movement)) return self.coordinates def revert(self): self.coordinates = self.coordinates[::-1] return self.coordinates def get_coordinates(self): return self.coordinates ## Operation with one vector vec3 = Vector([1,2,3]) vec3.move([1,1,1]) vec3.revert() vec3.get_coordinates() 与此相比: from …

2
java集合框架接口中的UnsupportedOperationException
通过Java Collections Framework查看,我注意到相当多的接口都带有comment (optional operation)。这些方法允许类只通过UnsupportedOperationException不想实现的方法来实现。 这方面的一个示例是中的addAll方法Set Interface。 现在,如本系列问题所述,接口是使用预期的定义合同。 接口很重要,因为它们将类的工作与工作方式分开。合同规定了客户的期望,使开发人员可以自由选择自己选择的方式实施合同,只要他们遵守合同即可。 和 界面是对对象可以执行的操作的描述……例如,当您打开电灯开关时,电灯就亮了,您不在乎如何做,只是它确实在做。在面向对象的程序设计中,接口是对象成为“ X”所必须具有的所有功能的描述。 和 我认为基于接口的方法要好得多。然后,您可以很好地模拟您的依赖关系,并且基本上所有事物之间的耦合都不太紧密。 接口的意义是什么? 什么是接口? 接口+扩展(mixin)与基类 鉴于接口的目的是定义一个契约并使您的依赖关系松散耦合,是否有些方法不能UnsupportedOperationException达到目的?这意味着我不能再通过了Set,只能使用addAll。相反,我必须知道Set我通过了什么实现,所以我可以知道是否可以使用addAll。对我来说,这似乎毫无价值。 那有什么意义UnsupportedOperationException呢?它只是在弥补遗留代码,并且需要清理其接口吗?还是我错过了更有意义的目的?

4
数学运算符的成员函数与非成员函数
我正在编写一个线性代数库(长话短说,这是一个学校作业),它涉及矩阵,向量等。在创建该库的过程中,我将创建对对象执行数学运算的函数。例如,转置矩阵,反矩阵,归一化向量等。 我很好奇这种函数的“最佳实践”是什么...也就是说,我应该将该函数设为成员函数还是非成员函数?(为清楚起见/图书馆使用) 例: //Member function way: B = A.transpose(); C = A.inverse(); //Non-member function way: B = linalg::transpose(A); //Non-member transpose function in linear algebra namespace C = linalg::inverse(A); 关于这类操作是否有一些标准?或者至少,人们有一种通用的方式吗?我倾向于第一种选择,但我想知道是否建议这样做。
12 c++  libraries  methods 

5
当将数据而不是方法参数传递给构造函数时,类的概念如何改变?
假设我们正在做一个解析器。一种实现可以是: public sealed class Parser1 { public string Parse(string text) { ... } } 或者我们可以将文本传递给构造函数: public sealed class Parser2 { public Parser2(string text) { this.text = text; } public string Parse() { ... } } 在两种情况下用法都很简单,但是与另一种相比,启用向的参数输入是什么意思Parser1?当他们查看API时,我向同一个程序员发送了什么消息?此外,在某些情况下是否存在任何技术优势/劣势? 当我意识到接口在第二种实现中将变得毫无意义时,又出现了另一个问题: public interface IParser { string Parse(); } ...第一个接口上的接口至少可以达到某些目的。这是否特别表示某类是“可接口的”?

3
在Java 8中,使用方法引用表达式或返回功能接口实现的方法在样式上是否更好?
Java 8添加了功能接口的概念,以及许多旨在采用功能接口的新方法。这些接口的实例可以使用方法引用表达式(例如SomeClass::someMethod)和lambda表达式(例如(x, y) -> x + y)来简洁地创建。 我和一位同事对什么时候最好使用一种或另一种形式(在这种情况下,“最佳”实际上可以归结为“最易读”和“最符合标准做法”)有不同的看法,因为他们基本上是相反的当量)。具体而言,这涉及以下所有情况: 所涉及的函数不在单个范围内使用 给实例起个名字有助于提高可读性(与之相反,例如,逻辑足够简单以一目了然地看到正在发生的事情) 没有其他编程原因可以解释为什么一种形式优于另一种形式。 我目前对此事的看法是,添加私有方法并通过方法引用进行引用是更好的方法。感觉这就是设计功能使用方式的方式,并且似乎更容易通过方法名称和签名传达正在发生的事情(例如,“ boolean isResultInFuture(Result result)”显然是在说要返回布尔值)。如果将来对类的增强希望使用相同的检查,但不需要功能接口包装器,则这也可使private方法可重用。 我的同事希望使用一种方法来返回接口的实例(例如“ Predicate resultInFuture()”)。对我而言,这感觉不完全是该功能的预期用途,感觉有点笨拙,而且似乎很难通过命名来真正传达意图。 为了使这个示例具体,下面是使用不同样式编写的相同代码: public class ResultProcessor { public void doSomethingImportant(List<Result> results) { results.filter(this::isResultInFuture).forEach({ result -> // Do something important with each future result line }); } private boolean isResultInFuture(Result result) { someOtherService.getResultDateFromDatabase(result).after(new Date()); } …

7
为什么圈复杂度对于单一方法如此重要?
从最近开始,我就在SonarLint for Eclipse中使用它,这对我有很大帮助。但是,它向我提出了关于圈复杂度的问题。 SonarLint认为可接受的CC为10,在某些情况下我超出了CC,大约为5或6个单位。这些部分与映射器相关,其中值依赖于不同的变量,例如: 字段A依赖于字符串sA; 字段B依赖于String sB; 字段C依赖于String sC; 等... 我别无选择,只能if为每个领域放一个。(幸运的是)这不是我的选择,而是我自己无法更改的已经存在的复杂系统。 我的问题的核心是:为什么单一方法中 CC不能过高如此重要?如果您将某些条件转移到一个或多个子方法中以降低复杂性,那么它并不能降低整体功能的成本,只是将问题转移到其他地方,我猜? (对不起的小错误,如有)。 编辑 我的问题不涉及全局圈复杂性,而仅涉及单个方法的复杂性和方法的拆分(抱歉,我很难解释我的意思)。我在问为什么如果仍然属于“超级方法”,为什么可以将您的条件拆分为较小的方法,而超级方法只能执行每个子方法,从而增加了算法的复杂性。 但是,第二个链接(关于反模式)很有帮助。

6
设计与数据库相关的方法,最好返回:true / false或受影响的行?
我有一些方法可以在数据库中执行某些数据更改(插入,更新和删除)。在ORM我使用这些类型的方法返回行INT影响值。我应该为“我的方法”返回什么,以指示操作的成功/失败状态? 考虑返回一个代码int: A.1 public int myLowerLevelMethod(int id) { ... int affectedRows = myOrm.deleteById(id) ... return affectedRows; } 然后用法: A2 public void myOtherMethod() { ... int affectedRows = myLowerLevelMethod(id) if(affectedRows > 0) { // Success } else { // Fail } } 与使用boolean相比: B.1 public boolean myLowerLevelMethod(int id) { ... int …

3
方法的参数列表应包含对象还是对象标识符?
我们的团队进行了以下讨论: 假设我们有以下两种方法: public Response Withdraw(int clubId, int terminalId,int cardId, string invoice, decimal amount); public Response Withdraw(Club club, Terminal terminal,Card card, string invoice, decimal amount); 通过有线方式发送的只是ID。 一方说第一种方法是正确的,因为我们只有终端和俱乐部的ID,并且应该清楚我们别无其他,这是我的方法。 另一边说第二种方法是正确的,因为它更灵活。 我们熟悉对象参数的想法,另一边也认为对象参数应该具有对象作为属性。 哪种方法正确? 也许还有第三种更好的方法?
10 design  methods 

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.