标签: code-duplication

有没有办法删除此代码中的重复

我有一个看起来像这样的方法:

   private double GetX()
    {
        if (Servings.Count > 0)
        {
            return Servings[0].X;
        }
        if (!string.IsNullOrEmpty(Description))
        {
            FoodDescriptionParser parser = new FoodDescriptionParser();
            return parser.Parse(Description).X;
        }
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

我有另一个看起来像这样的方法:

  private double GetY()
    {
        if (Servings.Count > 0)
        {
            return Servings[0].Y;
        }
        if (!string.IsNullOrEmpty(Description))
        {
            FoodDescriptionParser parser = new FoodDescriptionParser();
            return parser.Parse(Description).Y;
        }
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法巩固这个,因为唯一不同的是属性名称?

.net c# code-duplication .net-3.5

5
推荐指数
2
解决办法
156
查看次数

删除冗余的SQL代码

下面的代码计算线性回归的斜率和截距,以防止数据泄漏.然后,它将方程应用于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)

mysql sql postgresql code-duplication ireport

5
推荐指数
1
解决办法
953
查看次数

避免重复代码(PHP)

作为一个系统管理员,我最终每隔一段时间做一些简单的临时编程.我一直在努力学习,所以一般来说,下面的代码中是否有任何内容可以作为不良实践或其他不必要的内容跳出来?

具体来说,最后的3个if语句感觉就像我在不必要地复制代码一样.是否有任何方法可以进一步缩短它而不会过度复杂化?

<?php

define('TAKEN', 'Match: One');
define('AVAIL', 'Match: No Matches');
define('DATAMINE', 'Data mining count exceeded');

$ch = curl_init("http://co.za/cgi-bin/whois.sh?Domain=example");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

$output = curl_exec($ch);

function search_whois($findit) {
        global $output;
        if (strpos($output, $findit) === false)
                    return false;
        if (is_int(strpos($output, $findit)))
                return true;
}

if (search_whois(TAKEN))
        echo "Domain is taken.\n";

if (search_whois(AVAIL))
        echo "Domain is available.\n";

if (search_whois(DATAMINE))
        echo "Blocked for datamining, try again later.\n";

// var_dump($output);

?>
Run Code Online (Sandbox Code Playgroud)

php code-duplication

5
推荐指数
1
解决办法
1231
查看次数

如何避免代码重复?

在这种情况下是否可以避免代码重复?(Java代码)

void f()
{
    int r;
    boolean condition = true;
    while(condition)
    {
        // some code here (1)

        r = check();
        if(r == 0)
            break ;
        else if(r == 1)
            return ;
        else if(r == 2)
            continue ;
        else if(r == 3)
            condition = false;

        // some code here (2)

        r = check();
        if(r == 0)
            break ;
        else if(r == 1)
            return ;
        else if(r == 2)
            continue ;
        else if(r == 3)
            condition = false;

        // some code here …
Run Code Online (Sandbox Code Playgroud)

java design-patterns code-duplication flow-control

5
推荐指数
1
解决办法
1955
查看次数

在对表,其布局和记录建模时,如何避免代码重复,所有这些都共享相同的基本结构?

这将是一个有点抽象的问题.

我正在研究一个数据访问层框架,它需要区分表,它的抽象模式/布局和具体的表记录.我担心由于这种区别,会有很多代码重复.我可能需要一些方法来避免这种情况.

+-----------+
|    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

5
推荐指数
1
解决办法
247
查看次数

Rails Jquery 从另一个 js.erb 文件渲染 js.erb 部分

我在不同模型的 ajax 响应之间有重复的 js.erb 代码。我想通过将参数传递到 js.erb 部分来重构重复的 js.erb 代码。

如何从 js.erb 文件呈现 js.erb 部分?

ajax jquery erb code-duplication ruby-on-rails-3

5
推荐指数
1
解决办法
2154
查看次数

在多个文件中使用指令重复

我有5个C#文件,共有20个using指令.我想摆脱这个代码重复,特别是因为这20个使用指令在逻辑上属于一起.在C或C++中,我会创建一个包含这20个包含文件的额外头文件.这个额外的头文件充当一个层,然后一次包含20个其他文件.

不幸的是我不知道如何在C#中做到这一点.有什么建议?

c# using-directives code-duplication

5
推荐指数
1
解决办法
709
查看次数

如何在 Javascript 中添加所有测试使用的全局变量?

我找不到如何在 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)

或使用beforeLaunchonPrepare(但想要一个函数,不确定如何以这种方式公开变量),但没有成功。

但是,对于这种代码重用,我更喜欢通用的 Javascript 方法。

有什么好的方法可以避免在任何地方重复这种常见的代码,尤其是在测试中(mocha、karma、protractor)?

javascript testing code-reuse code-duplication base-class

5
推荐指数
1
解决办法
2158
查看次数

使用Git/PyCharm维护Lite项目的精简版和专业版

背景

我正在结束一个python项目,我正在考虑用pro/lite版本发布它.当然,我不希望重复的代码存在,但我不能发布一个免费版本,其中许多专业版的功能仅在几个if检查时被禁用:代码用于Blender附加组件,因此如果功能仍然存在,将很容易编辑并转换为专业版.

使用Git/Pycharm维护这样的项目的最佳方法是什么(或者我最好不要担心精简版)没有重复的代码我已经读过使用多个Git分支不是要走的路.

放弃

我确实意识到关于这个话题有很多类似的问题.然而,其中许多涉及使用Xcode,而且还有更多没有明确的答案.不要误会我的意思,我知道我可以通过多种方式做到这一点 - 但我正在寻找最好的方式,最干净的方式.

python git code-duplication pycharm

5
推荐指数
1
解决办法
106
查看次数

排除 Sonarqube 在两个特定类之间的重复代码检查

我将 Sonarqube 与 Jenkins 一起使用来检查各种违规行为。有两个类AB,它们有很多重复的代码。我知道并接受这一点。因此,我想忽略这些违规行为。但是,我仍然希望了解来自其他类(例如 C)的重复代码。我只想忽略A和之间的重复代码B。我怎样才能做到这一点?

java code-duplication sonarqube

5
推荐指数
1
解决办法
4024
查看次数