首先,我知道标准答案是异常永远不会用于流量控制.虽然我完全赞同这一点,但我一直在思考我有时做过的事情,我将用以下伪代码描述:
try
string keyboardInput = read()
int number = int.parse(keyboardInput)
//the conversion succeeds
if(number >= 1000)
//That's not what I asked for. The message to display to the user
//is already in the catch-block below.
throw new NumberFormatException() //well, there IS something wrong with the number...
catch(NumberFormatException ex) //the user entered text
print("Please enter a valid number below 1000.")
Run Code Online (Sandbox Code Playgroud)
首先,以非常抽象的方式来看这个例子.这不一定必须发生.情况只是:
用户输入需要受到约束,并且可以通过两种方式出错,无论是通过语言定义的抛出异常,还是通过检查.用户以相同的方式报告这两个错误,因为他们不需要知道导致错误的技术差异.
我想到了几种解决方法.首先,抛出自定义异常会更好.我当时遇到的问题是,如果我在本地捕获它,如何处理另一个异常?在se中,自定义异常将导致第二个catch块,其中消息也将被复制到其中.我的解决方案
//number is wrong
throw new MyException()
catch(NumberFormatException ex)
throw new MyException()
catch(MyException ex) {
print("Please enter...") …Run Code Online (Sandbox Code Playgroud) 在实现诸如iterator和/ const_iterator或类似的类对时避免代码重复的最佳实践是什么?
这似乎是一个普遍的问题,有一个规范的解决方案,但我没有找到任何专门的文章.
我正在寻找使用大约150k行代码处理遗留PHP项目中的重复代码的最佳方法.
这是最好的手动接近还是有独立的重复代码检测器,可以减轻痛苦?
码
下面的代码计算线性回归的斜率和截距,以防止数据泄漏.然后,它将方程应用于y = mx + b相同的结果集,以计算每行的回归线的值.
如何连接两个查询,以便计算数据及其斜率/截距而不执行该WHERE子句两次?
问题的一般形式是:
SELECT a.group, func(a.group, avg_avg)
FROM a
(SELECT AVG(field1_avg) as avg_avg
FROM (SELECT a.group, AVG(field1) as field1_avg
FROM a
WHERE (SOME_CONDITION)
GROUP BY a.group) as several_lines -- potentially
) as one_line -- always
WHERE (SOME_CONDITION)
GROUP BY a.group -- again, potentially several lines
Run Code Online (Sandbox Code Playgroud)
我SOME_CONDITION执行了两次.如下所示(通过STRAIGHT_JOIN优化更新):
SELECT STRAIGHT_JOIN
AVG(D.AMOUNT) as AMOUNT,
Y.YEAR * ymxb.SLOPE + ymxb.INTERCEPT as REGRESSION_LINE,
Y.YEAR as YEAR,
MAKEDATE(Y.YEAR,1) as AMOUNT_DATE,
ymxb.SLOPE,
ymxb.INTERCEPT,
ymxb.CORRELATION, …Run Code Online (Sandbox Code Playgroud) 这将是一个有点抽象的问题.
我正在研究一个数据访问层框架,它需要区分表,它的抽象模式/布局和具体的表记录.我担心由于这种区别,会有很多代码重复.我可能需要一些方法来避免这种情况.
+-----------+
| Foo |
+-----------+
| +Id: Guid |
+-----------+
Run Code Online (Sandbox Code Playgroud)
请注意,此图可以描述以下任何一种:表模式,具体表或具体表记录,具有Id类型的字段Guid.
把它翻译成代码,我会得到很多类似的类型(成对的三种).我将使用接口来保持示例简短; 我要展示的是类型的相似性:
// these interfaces only need to be implemented once:
interface ISchemaField<T> { string Name { get; } }
interface ITableField<T> { string Name { get; }
int Index { get; } }
interface IRecordField<T> { string Name { get; }
int Index { get; }
T Value { get; set; } }
Run Code Online (Sandbox Code Playgroud)
// these three interfaces are an …Run Code Online (Sandbox Code Playgroud) c# data-access-layer code-duplication separation-of-concerns
我在不同模型的 ajax 响应之间有重复的 js.erb 代码。我想通过将参数传递到 js.erb 部分来重构重复的 js.erb 代码。
如何从 js.erb 文件呈现 js.erb 部分?
我四处寻找一个好的解决方案,以避免模板类的每个专业化上的代码重复。
这是一个示例代码:
template<class T>
class C
{
int foo();
}
Run Code Online (Sandbox Code Playgroud)
现在默认值的定义:
template<class T>
C<T>::foo() { return 0; }
Run Code Online (Sandbox Code Playgroud)
现在特殊模板的专业化
template<> C<int>::foo() { ... do a lot of stuff and return n .... }
template<> C<double>::foo() { ... do a lot of stuff and return n .... }
template<> C<int>::foo() { ... do a lot of stuff and return n .... }
Run Code Online (Sandbox Code Playgroud)
现在我必须复制专门化的代码。但总的来说,它是相同的代码。
我的问题是:避免代码重复的最佳解决方案是什么以及如何隐藏实现?也许通过使用 noname-namespace 或 impl-namespace ?
亲切的问候,彼得
我找不到如何在 Javascript 中删除代码重复(基本上是我在 Java 中使用基类实现的)。
具体示例是(至少)以下代码,它对所有规范文件(以及潜在的页面对象,因为我正在量角器中使用该模式进行测试)都是通用的:
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
var expect = chai.expect;
Run Code Online (Sandbox Code Playgroud)
我可以做一些有希望随处可得?我尝试在量角器配置中在规范之前加载一个文件:
specs: [
'e2e/helpers/commonDefinitions.js',
'e2e/**/*.spec.js'
]
Run Code Online (Sandbox Code Playgroud)
或使用beforeLaunch或onPrepare(但想要一个函数,不确定如何以这种方式公开变量),但没有成功。
但是,对于这种代码重用,我更喜欢通用的 Javascript 方法。
有什么好的方法可以避免在任何地方重复这种常见的代码,尤其是在测试中(mocha、karma、protractor)?
我将 Sonarqube 与 Jenkins 一起使用来检查各种违规行为。有两个类A和B,它们有很多重复的代码。我知道并接受这一点。因此,我想忽略这些违规行为。但是,我仍然希望了解来自其他类(例如 C)的重复代码。我只想忽略A和之间的重复代码B。我怎样才能做到这一点?
我已将所有 python 项目源放在一个文件夹中。运行以下命令pylint似乎只是在每个源文件中查找和分析重复项,而不是在我想要的所有源文件中查找和分析重复项:
pylint --disable=all --enable=duplicate-code /some/source/folder/
Run Code Online (Sandbox Code Playgroud)
有没有办法在许多源文件中查找重复的代码?
python code-analysis static-analysis pylint code-duplication
code-duplication ×10
c++ ×2
ajax ×1
base-class ×1
c# ×1
class-design ×1
code-reuse ×1
const ×1
copy-paste ×1
erb ×1
exception ×1
ireport ×1
java ×1
javascript ×1
jquery ×1
linux ×1
mysql ×1
php ×1
postgresql ×1
pylint ×1
python ×1
sonarqube ×1
sql ×1
templates ×1
testing ×1
theory ×1