我有一个基本的编程问题.我想知道每个非void函数是否应该在PHP脚本中有一个"return"语句.
采用以下两个示例函数.哪一个是更好的编程方式?他们都做同样的事情(根据我的理解),但这是"更好的做法",为什么?
function displayApple1($str){
if($str == 'apple')
echo $str;
}
function displayApple2($str){
if($str == 'apple')
echo $str;
else
return;
}
Run Code Online (Sandbox Code Playgroud) 代码:
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在技术上是多余的,并且根本不会改变行为.但是,我倾向于把它们放在那里强调条件是排他性的.你的想法是什么?不必要或更清楚?
可能重复:
函数是否只有一个return语句?
我的老师对我写的一些java代码(我仍然得到一个A,这只是我在java课程中获得的第一个非100%的成绩)取得了分数.我不打算与老师争论这一点,但我想从实际的程序员那里得到一些建议.这是令人讨厌的代码:
private char byte2suit(byte val) {
switch(val) {
case 0: return 's';
case 1: return 'c';
case 2: return 'h';
case 3: return 'd';
}
//fallback value
return 'h';
}
Run Code Online (Sandbox Code Playgroud)
在我看来,更清楚的是初始化返回值,在案例中分配(并添加中断;每行)然后返回值.当然,在其他人看到的代码中,我的意见并不强大,所以我想知道你们对java(或C/C++)中多个return语句的看法,如果你确实使用了多个return语句你比"if(this)return a; else return b;"更多地使用它吗?声明?如果你不使用多个return语句,你能给出一个非常令人信服的理由(如果上面的代码是可读的并且是我的多重返回编码实践的最大范围,则不可读的代码不是原因)
我有一些基本上看起来像这样的Python代码:
my_start_list = ...
def process ( my_list ):
#do some stuff
if len(my_list) > 1:
process(my_list)
else:
print(my_list)
return my_list
print(process(my_start_list))
Run Code Online (Sandbox Code Playgroud)
奇怪的是:print(my_list)打印出正确的内容.但是,打印函数返回值的第二个print语句始终打印"None".即使我用return("abc")替换正常的return语句,它仍然是None.
由于变量的内容在return语句之前似乎是正确的一行,我不知道从哪里开始调试.是否有可能导致此问题的常见问题?
我正在浏览关于continue关键字的问题,以便更好地理解它,我在这个答案中偶然发现了这一行
这些可以是维护时间炸弹,因为"继续"/"中断"与循环之间没有直接联系,它继续/打破除上下文之外;
我有这个for循环:
for(Object obj : myArrayList){
if(myArrayList.contains(someParticularData)){
continue;
}
//do something
}
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是 - continue以我上面所做的方式使用它还是有问题吗?如果是,我可以采用的替代方法是什么?任何形式的指导都会有所帮助.谢谢.
更新:我在这种特定情况下的目标是迭代a Collection(ArrayList在这种情况下),并检查是否包含某些特定数据,如果为真,则跳过该迭代.我被指出这myArrayList.contains(someParticularData)是一次性操作,并且最好在循环外执行该检查,这正是我所寻找的.另外,我了解到如果我可以continue根据某些条件使用if(someConditon),我可以通过使用来避免它if(!someCondition).
我正在研究嵌入式程序,在某些情况下如果没有条件,我想尽快从函数返回.如果我有以下代码,我正在进行嵌入式编程:
foo() {
if (a < b) {
return 0; // bail, since condition is met
} else {
// lots of calculations in this block
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,有多个return语句是不是很糟糕?这是不好的做法吗?有更好的方法吗?MISRA是否对此有所说明?
注意:这个问题特别针对嵌入式系统,与MISRA有关,而不仅仅是C/C++
谢谢...
当我看到别人的代码时,我主要看到两种类型的方法样式。
一个看起来像这样,有许多嵌套的 if:
void doSomething(Thing thing) {
if (thing.hasOwner()) {
Entity owner = thing.getOwner();
if (owner instanceof Human) {
Human humanOwner = (Human) owner;
if (humanOwner.getAge() > 20) {
//...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
而另一种风格,看起来像这样:
void doSomething(Thing thing) {
if (!thing.hasOwner()) {
return;
}
Entity owner = thing.getOwner();
if (!(owner instanceof Human)) {
return;
}
Human humanOwner = (Human) owner;
if (humanOwner.getAge() <= 20) {
return;
}
//...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这两种代码样式有名称吗?如果,他们叫什么。
通常情况下,您可能会有一个检查众多条件并返回状态的方法(现在就说布尔值).最好定义一个标志,在方法中设置它,并在结尾返回它:
boolean validate(DomainObject o) {
boolean valid = false;
if (o.property == x) {
valid = true;
} else if (o.property2 == y) {
valid = true;
} ...
return valid;
}
Run Code Online (Sandbox Code Playgroud)
或者,一旦你知道方法的结果,简单地返回会更好/更正确吗?
boolean validate(DomainObject o) {
if (o.property == x) {
return true;
} else if (o.property2 == y) {
return true;
} ...
return false;
}
Run Code Online (Sandbox Code Playgroud)
现在显然可能有try/catch块和所有其他类型的条件,但我认为这个概念很清楚.意见?
如果我有一个函数应该在某些条件下执行一个动作,而是返回null,这更干净:
def func():
if not condition:
return None
[...]
return asd
Run Code Online (Sandbox Code Playgroud)
要么
def func():
if condition:
[...]
value = asd
else:
value = None
return value
Run Code Online (Sandbox Code Playgroud)
我已经阅读了每个函数应该有一个返回点的范例.另一方面,python的zen表示flat比嵌套好,后来的版本在整个动作代码上面添加了一个嵌套级别(标记为[...]).
还请记住,条件可能更复杂,例如,添加多个嵌套级别.
我只是想知道python中哪种方式更可取.想象一下两个功能:
def foo(key):
if bar.has_key(key):
return bar.get(key)
# do something with bar
# this will be executed if bar_key(key) is False
...
return something
Run Code Online (Sandbox Code Playgroud)
def foo(key):
if bar.has_key(key):
return bar.get(key)
else:
# do something with bar
# this will be executed if bar_key(key) is False
...
return something
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,唯一的区别就是else陈述.所以问题是它会以某种方式影响性能.或者是否有任何理由包含else此类功能?
java ×5
python ×3
coding-style ×2
c ×1
c++ ×1
continue ×1
function ×1
loops ×1
misra ×1
oop ×1
php ×1
preferences ×1
readability ×1
return ×1
return-path ×1