相关疑难解决方法(0)

Python中更好的"如果不是没有返回"

有没有更好的方法在python中编写这段代码?

result = slow_function()
if result:
    return result
[...]
Run Code Online (Sandbox Code Playgroud)

该函数slow_function可以返回一个值,或者None它很慢,所以这是不可行的:

if slow_function():
    return slow_function()
Run Code Online (Sandbox Code Playgroud)

第一种方式没有任何问题,但使用临时变量似乎对python来说太过分了.

当您解决在使用递归调用过的问题.此代码是非常有用的f,并与当地的假设,比如你从列表中选择一个项目,然后检查是否有一个可行的解决方案,否则,你必须选择另外一个.就像是:

def f(n):
    for x in xrange(n):
        result = slow_function(x):
        if result:
            return result
        [...]
Run Code Online (Sandbox Code Playgroud)

不是更好的东西,如:

def f(n):
    for x in xrange(n):
        return slow_function(x) if is not None
Run Code Online (Sandbox Code Playgroud)

这可以扩展到检查任何类型的值.如果声明,它将是一个易于阅读的返回.


代码爱好者的附加示例

想象一下,你有一个数字列表列表:

lists = [[1,2,3],[4,5],[6,7,8],[9,10],...]
Run Code Online (Sandbox Code Playgroud)

并且您希望为每个列表选择一个项目,以便在选择中最多有一个偶数.可能有很多列表,所以尝试每个组合都会浪费,因为你已经可以告诉你,如果你开始选择[1,2,4,...],就没有可行的解决方案.

def check(selected):
    even_numbers = filter(lambda n: (n % 2) == 0, selected)
    return len(even_numbers) < 2

def f(lists, …
Run Code Online (Sandbox Code Playgroud)

python syntax

28
推荐指数
3
解决办法
2万
查看次数

不必要的'其他'声明

如您所知,在Eclipse中,您可以启用" 不必要的'else'语句 "检查,这将在if-then-else上触发,提前返回.而且,根据我的经验,使用此类声明时有两种最可能的情况:

1)预检:

if (!validate(arg1)) {
    return false;
}
doLotOfStuff();
Run Code Online (Sandbox Code Playgroud)

2)检查后:

doLotOfStuff();
if (condition) { 
    return foo; 
} else {
    return bar; 
}
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,如果触发器打开,Eclipse将建议您将代码更改为:

doLotOfStuff();
if (condition) { 
    return foo; 
} 
return bar; 
Run Code Online (Sandbox Code Playgroud)

但是,我认为使用else语句返回更具可读性,因为它类似于业务逻辑的直接映射.如果这个"不必要的'其他'声明"代码约定很普遍,或者使用else语句的代码更优选,那么我很好奇吗?

java eclipse coding-style

21
推荐指数
2
解决办法
4674
查看次数

从具有隐式或显式"else"或单个"return"语句的方法返回?

有些人认为多个return语句是错误的编程风格.虽然对于较大的方法也是如此,但我不确定它是否适用于较短的方法.但是还有另一个问题:如果else前面有回复声明,应该明确写出来if吗?

隐含的else:

private String resolveViewName(Viewable viewable) {
    if(viewable.isTemplateNameAbsolute())
        return viewable.getTemplateName();
    return uriInfo.getMatchedResources().get(0).getClass().toString();
}
Run Code Online (Sandbox Code Playgroud)

明确else:

private String resolveViewName(Viewable viewable) {
    if(viewable.isTemplateNameAbsolute())
        return viewable.getTemplateName();
    else
        return uriInfo.getMatchedResources().get(0).getClass().toString();
}
Run Code Online (Sandbox Code Playgroud)

从技术上讲,else这里没有必要,但它更明显.

也许是一次回报最简洁的方法:

private String resolveViewName(Viewable viewable) {
    String templateName;
    if(viewable.isTemplateNameAbsolute())
        templateName = viewable.getTemplateName();
    else
        templateName = uriInfo.getMatchedResources().get(0).getClass().toString();
    return templateName;
}
Run Code Online (Sandbox Code Playgroud)

你更喜欢哪一个?其他建议?

java coding-style

18
推荐指数
3
解决办法
2080
查看次数

是否比if语句更优雅的函数返回?

我和一位同事对以下哪一项更优雅存在争议.我不会说谁是谁,所以它是公正的.哪个更优雅?

public function set hitZone(target:DisplayObject):void
        {
            if(_hitZone != target)
            {
                _hitZone.removeEventListener(MouseEvent.ROLL_OVER, onBtOver);
                _hitZone.removeEventListener(MouseEvent.ROLL_OUT, onBtOut);
                _hitZone.removeEventListener(MouseEvent.MOUSE_DOWN, onBtDown);

                _hitZone = target;

                _hitZone.addEventListener(MouseEvent.ROLL_OVER, onBtOver, false, 0, true);
                _hitZone.addEventListener(MouseEvent.ROLL_OUT, onBtOut, false, 0, true);
                _hitZone.addEventListener(MouseEvent.MOUSE_DOWN, onBtDown, false, 0, true);
            }
        }
Run Code Online (Sandbox Code Playgroud)

...要么...

public function set hitZone(target:DisplayObject):void
        {
            if(_hitZone == target)return;

            _hitZone.removeEventListener(MouseEvent.ROLL_OVER, onBtOver);
            _hitZone.removeEventListener(MouseEvent.ROLL_OUT, onBtOut);
            _hitZone.removeEventListener(MouseEvent.MOUSE_DOWN, onBtDown);

            _hitZone = target;

            _hitZone.addEventListener(MouseEvent.ROLL_OVER, onBtOver, false, 0, true);
            _hitZone.addEventListener(MouseEvent.ROLL_OUT, onBtOut, false, 0, true);
            _hitZone.addEventListener(MouseEvent.MOUSE_DOWN, onBtDown, false, 0, true);

        }
Run Code Online (Sandbox Code Playgroud)

if-statement return

17
推荐指数
4
解决办法
8139
查看次数

好的做法是在方法中多使用一个RETURN语句吗?

可能重复:
为什么在方法结束时返回是一个好习惯

我想知道是否可以认为良好做法在方法中使用多个RETURN语句以及为什么.如果没有,我想知道如何以不同的方式重写代码.

public string GetNominativeById(int? candidateId)
        {
            if (candidateId.HasValue)
                return repepositoryCandidate.GetById(candidateId.Value).Nominative;
             else
                return string.Empty;
            }
        }
Run Code Online (Sandbox Code Playgroud)

一个回归

 public string GetNominativeById(int? candidateId)
    {
        string result;
        if (candidateId.HasValue)
            result =  repepositoryCandidate.GetById(candidateId.Value).Nominative;
         else
            result =  string.Empty;

        return result;
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# asp.net

15
推荐指数
4
解决办法
2万
查看次数

Java - 返回或if-else

可能重复:
函数是否只有一个return语句?

这就是我所说的.

if (condition) {
    aVariable = 1;
    return;
}
doSomething();

if (condition) {
    aVariable = 1;
} else {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

这些中的一个优先于其他(惯例等)吗?

java coding-style

14
推荐指数
2
解决办法
9550
查看次数

每种方法只有一个return语句,即使在这种情况下?

我喜欢return每种方法只有一个语句的想法.

你在这种情况下做了什么?

public static string ChopText(string Text)
{
   if (String.IsNullOrEmpty(Text))
   {
      // return here ?????
   }
}
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一选择是设置一个标志,然后检查标志.

问题是,我不喜欢有超过一页的巨大if语句. 由于这个原因,我也看到了丑陋的嵌套if语句.

methods return

12
推荐指数
4
解决办法
2518
查看次数

Treeset.contains()问题

所以我现在一直在努力解决问题,我想在这里也可以寻求帮助.

我将Ticket对象添加到TreeSet,Ticket实现Comparable并重写了equals(),hashCode()和CompareTo()方法.我需要使用contains()检查对象是否已经在TreeSet中.现在在将2个元素添加到集合之后,它们全部检查得很好,但在添加第三个之后它会搞砸了.

在向TreeSet添加第三个元素后运行这一小段代码,Ticket temp2是我正在检查的对象(verkoopLijst).

    Ticket temp2 = new Ticket(boeking, TicketType.STANDAARD, 1,1);
    System.out.println(verkoop.getVerkoopLijst().first().hashCode());
    System.out.println(temp2.hashCode());

    System.out.println(verkoop.getVerkoopLijst().first().equals(temp2));
    System.out.println(verkoop.getVerkoopLijst().first().compareTo(temp2));
    System.out.println(verkoop.getVerkoopLijst().contains(temp2));
Run Code Online (Sandbox Code Playgroud)

返回:

22106622
22106622
true
0
false
Run Code Online (Sandbox Code Playgroud)

现在我的问题是这甚至可能如何?

编辑:

public class Ticket implements Comparable{

    private int rijNr, stoelNr;
    private TicketType ticketType;
    private Boeking boeking;


    public Ticket(Boeking boeking, TicketType ticketType, int rijNr, int stoelNr){    
        //setters
    }

    @Override
    public int hashCode(){
        return boeking.getBoekingDatum().hashCode();     
    }

    @Override
    @SuppressWarnings("EqualsWhichDoesntCheckParameterClass")    
    public boolean equals(Object o){
       Ticket t = (Ticket) o;

       if(this.boeking.equals(t.getBoeking())
               &&
          this.rijNr == t.getRijNr() &&  this.stoelNr == t.getStoelNr()
               &&
          this.ticketType.equals(t.getTicketType()))
       { …
Run Code Online (Sandbox Code Playgroud)

java contains treeset

10
推荐指数
1
解决办法
9991
查看次数

JavaScript条件块与控制流的空白返回

我总是编写我的JavaScript块

var functionName = function() {
  if (someCondition) {
      // stuff
  } else {
      // stuff
  }
};
Run Code Online (Sandbox Code Playgroud)

但今天我看到了

var functionName = function() {
  if (someCondition) {
     // stuff
     return;
  }
  // stuff
};
Run Code Online (Sandbox Code Playgroud)

我喜欢第一个例子在逻辑中更明确.你想要或不想以第二种方式展示它的原因是什么?

javascript

10
推荐指数
1
解决办法
5061
查看次数

编程首选项 - 使用具有多个return语句的else ifs?

代码:

public String getTemperatureMessage(double temp)
{
    if(temp < 32)
        return "Freezing";
    else if(temp < 60)
        return "Brr";
    else if(temp < 80)
        return "Comfortable";
    else
        return "Too hot";
}
Run Code Online (Sandbox Code Playgroud)

关于上面的代码片段,else ifs在技术上是多余的,并且根本不会改变行为.但是,我倾向于把它们放在那里强调条件是排他性的.你的想法是什么?不必要或更清楚?

java language-agnostic preferences

9
推荐指数
4
解决办法
7467
查看次数