修改 有时我们的问题不是代码,而是我们判断什么是对错的方式。我通过一个例子来写我的问题,因为它有助于解释它。问题很简单“如果我们的函数在iteself中处理每个异常。通过我展示的例子,它有时会变得混乱,更像是在任何地方编写相同的代码。
当我们用C编写代码时,它是一种流动的过程语言。所以我们处理他们来的情况。例如,给定(a,b,c)来查找它是哪种三角形类型(NOT_POSSIBLE,Equilateral,Isosceles,Scalar)。我们输入这些并继续检查等边然后是等腰,然后是标量等。
在C ++中,我们使用函数来检查这些条件(因此isEuilateral()
和isScalar()
是检查它的两个函数。)
问题是:
现在isScalar()
函数“应该”检查它是否是等边的,然后是它自己的条件,或者只是它的条件。
检查它是否是等边三角形是isScalar()
函数的头痛问题,即:
if(isEquilateral())
return false;
else if(a==b)
return true;
else if (b==c)
return true;
...
或者从它自己开始:
if(a==b) return true; // not checking equilateral
....
或者它应该只做它的工作并提供功能。程序员有义务在object.isEquilateral()
之前检查object.isScalar()
。
所以我开发了这个类api Triangle并发送给你。你只知道像isEquilateral()和isIsosceles()这样的函数名称...所以你被分配了一个工作来创建一个输入三角形a,b,c三边形的应用程序,并告诉你这是什么样的三角形。 ..确定..输入是3,3,3,你的程序然后应检查isoceles条件之前的等边条件并调用isIsoceles()而不调用isEquilateral()对此输出不安全。 。 isIsoceles()现在不是一个独立的功能..完成或不是错误。该怎么办?
实际上,这是一个不包含我所有困惑的例子。
所以问题是每个函数应该明确地处理每个异常。这不是冗余和代码重复。
请注意,我们无法创建检查所有异常的函数,因为此处的某些异常在其他位置不会出现异常。
答案 0 :(得分:3)
我将使用的更简单的方法是classifyTriangle
函数,它返回enum
个三角形类型。然后,任何后续代码都可以查询返回值以根据三角形类型进行操作。
或者,我相信每个函数都应该专注于检查自己的条件,而不管其他三角形类型。
编辑:现在我已经重新阅读了这个问题,我相信你会问优先权。意思是,三角形可以是等边和等腰,但是你希望它只被分类为等边。如果您对每种类型都有验证功能,那么您希望用户使用您预先确定的呼叫顺序。这可以通过使用classifyTrianlge
函数来解决,您可以在其中决定您希望的顺序。