gpt4 book ai didi

coding-style - 如果在函数中声明什么是最好的方法

转载 作者:行者123 更新时间:2023-12-04 02:14:52 25 4
gpt4 key购买 nike

如果我有一个带有大量条件的函数,那么组织它的最佳方法是什么?

我担心的是其他人正在进入代码并了解正在发生的事情。即使示例很简单,也可以想象条件非常复杂。

例如:

public void function(string value, string value2)
{
if (value == null)
return;

if (value2 == value)
DoSomething();
}

或者
public void function(string value, string value2)
{
if (value != null)
{
if (value2 == value)
DoSomething();
}
}

或者
public void function(string value, string value2)
{
if (value != null && value2 == value)
DoSomething();
}

最佳答案

组织条件并将其放入方法中。

例如替换此:

 if( a& & n || c  && ( ! d || e ) && f > 1 && ! e < xyz ) { 
// good! planets are aligned.
buyLotteryTicket();
} else if( ..... oh my ... ) {
}

变成这个:
if( arePlanetsAligned() ) { 
buyLotteryTicket();
} else if( otherMethodHere() ) {
somethingElse();
}

这样,使用哪种样式(1、2或3)实际上并不重要,因为if语句将清楚地描述要测试的条件是什么。无需其他构造。

关键是使代码更清晰并进行自我记录。如果使用的是OO编程语言,则可以使用一个对象来存储状态(变量),并避免创建带有5-10个参数的方法。

这些是类似的问题:

Best way to get rid of nested ifs

Is there an alternative to this hyperidented code

第二个链接显示了一种更完整,更复杂的方法,可以将可怕的所有人维护者的噩梦转变成自我记录的代码。

它显示了如何进行转换:
public String myFunc(SomeClass input)
{
Object output = null;

if(input != null)
{
SomeClass2 obj2 = input.getSomeClass2();
if(obj2 != null)
{
SomeClass3 obj3 = obj2.getSomeClass3();
if(obj3 != null && !BAD_OBJECT.equals(obj3.getSomeProperty()))
{
SomeClass4 = obj3.getSomeClass4();
if(obj4 != null)
{
int myVal = obj4.getSomeValue();
if(BAD_VALUE != myVal)
{
String message = this.getMessage(myVal);
if(MIN_VALUE <= message.length() &&
message.length() <= MAX_VALUE)
{
//now actually do stuff!
message = result_of_stuff_actually_done;
}
}
}
}
}
}
return output;
}

到这个:
if ( isValidInput() && 
isRuleTwoReady() &&
isRuleTreeDifferentOf( BAD_OBJECT ) &&
isRuleFourDifferentOf( BAD_VALUE ) &&
isMessageLengthInRenge( MIN_VALUE , MAX_VALUE ) ) {
message = resultOfStuffActuallyDone();
}

关于coding-style - 如果在函数中声明什么是最好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1033093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com