标签: refactoring

Javascript - 替换大量的if语句

我有一些不同的单选按钮,可以返回种族和性别.该脚本在内部应用程序内部运行,因此不是返回"boy","girl"或"both",而是返回7707330,7707333和7707336.类似于种族单选按钮.

然后,我需要根据种族和性别的组合验证数据.这是一个非常简单的任务,但我最终得到了15个if语句!一切都按预期工作,但必须有一个更清洁的解决方案?

function test(radioResults) {
    var1 = radioResults[0].toString();
    var2 = radioResults[1].toString();

    var roll = parseFloat(parent.roll);

    if (var2 == '7707330') {
        gender = 'boy';
    }
    if (var2 == '7707333') {
        gender = 'girl';
    }
    if (var2 == '7707336') {
        gender = 'both';
    }

    if (var1 == '7707341') {
        maori(gender);
    }
    if (var1 == '7707344') {
        pasifika(gender);
    }
    if (var1 == '7707347') {
        all(gender);
    }
}

function maori(gender) {
    //Maori 
    if (gender == 'boy') {
        ethnicity = parseFloat(parent.getMBoys);
        validation(ethnicity);
    }
    if (gender …
Run Code Online (Sandbox Code Playgroud)

javascript refactoring if-statement code-cleanup

0
推荐指数
1
解决办法
5270
查看次数

我怎么能重构这个方法?

给出以下辅助方法.

def link_tags(collection)
  tags = collection.split(',')

  tags.map.each do |tag|
    if tag == tags.last
      content_tag(:a, tag, href: tags_filter_post_path(tag) )
    else
      content_tag(:a, tag, href: tags_filter_post_path(tag) ) + ', '
    end        
  end.reduce(:<<)
end
Run Code Online (Sandbox Code Playgroud)

我怎么能对此做一点重构?

编辑:重构后的最终代码建议.

def link_tags(collection)  
  collection.split(',').collect do |tag| 
    link = ""
    link += link_to tag, tags_filter_post_path(tag)
  end.join(', ').html_safe
end
Run Code Online (Sandbox Code Playgroud)

ruby refactoring ruby-on-rails

0
推荐指数
1
解决办法
95
查看次数

有人可以建议简化代码吗?

public boolean isPalindrome()
{

    Stack myStack = new Stack();
    for(Node current = head; current!=null; current = current.next)
    {
        if(!myStack.isEmpty())
        {
            if(myStack.peek()==current.data)
            {
                myStack.pop();
            }else if(current.next!=null&&myStack.peek()==current.next.data)
            {
                continue;
            }
            else
            {
                myStack.push(current.data);
            }
        }else
        {

            myStack.push(current.data);
        }   

    }

    return myStack.isEmpty();
}
Run Code Online (Sandbox Code Playgroud)

我在这里做的是使用堆栈来检查链表是否是回文.它按预期工作只是我想摆脱代码重复,其他条件将数据推送到堆栈.

java refactoring

0
推荐指数
1
解决办法
128
查看次数

Visual Studio Refacotring以匹配物理文件名和类名

我的VS2010 C#项目的物理文件名与源代码中的类或接口名称不匹配,但总是让它们具有相同的名称...所以在VS2010 Pro中还是在Resharper中有一种方法我可以说嘿重命名文件名以匹配他们的类或接口名称?

c# refactoring visual-studio-2010

0
推荐指数
1
解决办法
1268
查看次数

用于从数据库中检索过滤器值的重构方法

我正在使用.Net Framework 4,mvc 3和实体框架(最新稳定版)

在索引页面上,我希望能够过滤每一列.LINQ使用distinct()方法为每列检索过滤器值.我没有找到一种很好的方法来重用为每列检索这些值的方法 - 它们基本相同,唯一区分它们的是使用的列名,因此使用一种方法而不是几种方法会很好.

public List<string> GetLevels()
{
    return _db.Logs.Select(l => l.Level).Distinct().ToList();
}

public List<string> GetOrders()
{
    return _db.Logs.Select(l => l.Order).Distinct().ToList();
}
Run Code Online (Sandbox Code Playgroud)

如何使用我想从中检索数据的列名注入lambda表达式?像这样的东西:

public List<string> GetFilterValues(string columName)
{
    return _db.Logs.Select(l => l.columnName).Distinct.ToList();
}
Run Code Online (Sandbox Code Playgroud)

c# refactoring entity-framework linq-to-sql

0
推荐指数
1
解决办法
91
查看次数

如何重构这个Ruby代码?

我创建了以下内容,但是看起来非常神秘.有没有办法以更Ruby的方式或可理解的方式编写它?

此方法删除数字下方的较低因子.所以,10.high_factors回报[6,7,8,9,10].6可被2整除,因此2被删除.列表中没有大于6的倍数,因此它保持不变.

class Fixnum
  def high_factors
    # Get the numbers that are not divisible by lower ones below self
    list = (2..self).to_a
    2.upto(self).each do |i|
      ((i+1)..self).each { |j| list.delete i if j.is_divisible_by? i }
    end

    list
  end

  def is_divisible_by? divisor
    self % divisor == 0
  end
end
Run Code Online (Sandbox Code Playgroud)

Ruby 1.9.3

ruby refactoring coding-style readability

0
推荐指数
1
解决办法
122
查看次数

是否有一种从字符串[]创建CSV值的标准方法?

我想从richtextbox中的项目创建CSV字符串.我知道必须有一个比我拼凑的更好的方式:

string CSVDuckbills = GetLinesAsCSV(richTextBoxDuckbills.Lines);
...
private string GetLinesAsCSV(string[] DuckbillLines)
{
    string DuckbillCSV = string.Empty;
    foreach (string item in DuckbillLines)
    {
        DuckbillCSV += string.Format("{0},", item);
    }
    return DuckbillCSV;
}
Run Code Online (Sandbox Code Playgroud)

首先,我必须在最后剥掉一个多余的逗号.

c# csv algorithm refactoring richtextbox

0
推荐指数
1
解决办法
83
查看次数

有没有一种简单的方法来重构C#中的参数?

我有34种不同的方法,它们使用我的ViewModel类的1个参数,但是每个方法在类上只使用了两个或三个特性.我想我宁愿把这些属性传递给这些方法而不是整个对象.这是一种轻松重构的方法吗?我试图只选择我函数中的所有文本并执行Refactor> Extract Method,希望它足够智能,只能看到对象的2个属性被使用,并使参数列表只是那2个属性,但它只是想再拿整个物体.

也许我需要解释一下我在做什么......

我正在尝试编写一个为wiki页面生成文本的应用程序.根据输入到UI中的值,它将生成模板的文本和使用该模板的文本,或者如果不需要模板,它将只生成页面的文本.它有17个不同的部分,因此有17个功能,当组合时,创建模板页面的文本,并且如果不需要模板,有17个功能组合成实际页面.我是这样做的,所以我可以一次测试它的一小部分,而不是测试一个大型函数的整个输出.

所以目前这些方法中的所有34个都采用1个参数,即从UI构建的整个对象.对我来说,没有任何意义.生成整个页面的1个部分的函数永远不需要知道在不同部分中使用的数据,如果有人试图在那里使用它,那么我就知道出了什么问题.

c# refactoring visual-studio-2012

0
推荐指数
1
解决办法
752
查看次数

重构这个/减少LOC的好方法?

我有这个代码:

switch (currentLetter)
{
    case 'A': return 'B';
    case 'B': return 'C';
    case 'C': return 'D';
    case 'D': return 'E';
    case 'E': return 'F';
    case 'F': return 'G';
    case 'G': return 'H';

    case 'a': return 'b';
    case 'b': return 'c';
    case 'c': return 'd';
    case 'd': return 'e';
    case 'e': return 'f';
    case 'f': return 'g';
    case 'g': return 'h';
}
Run Code Online (Sandbox Code Playgroud)

我想到了许多方法来改变它,但我不确定选择哪个.我可以替换所有返回(char)(currentLetter + 1),使用带有ASCII值的if语句来确定范围,然后执行(char)(currentLetter + 1),使用Enumerable.Range.Contains然后查看该值是否在范围内,用if替换开关等.

这段代码不会在其他任何地方重复,我不确定这是不是最好的方法,因为代码的读者对于正在发生的事情非常清楚,他们不必考虑字符代码,算术等.此外,永远不会有任何更多的字符添加到case语句,所以它不会变得笨拙.

不确定我是应该保留原样还是更改它.

c# refactoring character switch-statement

0
推荐指数
1
解决办法
191
查看次数

javascript如何通过返回执行方法来简化此代码?

我正在玩JS,并有以下代码片段

var Dog = function(name) {
    this.name = name
}

Dog.prototype= {
    'bark': function() {
        alert(this.name + ' is barking');
    },
    'run': function() {
        alert(this.name + ' is running');
    }
}

var dogs = [new Dog('first'), new Dog('second'), new Dog('third')];


function invokeOnDog(what) {
    if(what === 'bark') {
        for(var i=0; i<dogs.length; i++) {
            dogs[i].bark();
        }
    }
    if(what === 'run') {
        for(var i=0; i<dogs.length; i++) {
            dogs[i].run();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想做的是简化这个invokeOnDog功能,因为它重复两次相同的模板.我正在考虑以某种方式返回应该在对象上调用的方法,但不知道如何做到这一点.

你能帮帮我吗?

编辑:

感谢您的快速回复.如果"what"与调用方法具有相同的名称,则它们都可以.但如果这两者之间没有匹配怎么办?

invokeOnDog('aggresive')应该调用bark方法并invokeOnDog('scared')应该调用run

javascript refactoring functional-programming

0
推荐指数
1
解决办法
105
查看次数