以java和erlang为例:
①、java:面向对象 且 存在return。
②、erlang: 函数性编程 不存在return
%% 模拟检测 多个输入信息是否合理,只要有一个不合理,则返回。
%%
举例:UName,UEmail,UPass,USex,UMoney,UOwn.
%% 以上述描述的顺序为检测的优先级,检测函数: 以check为前缀 加
要检测的属性名字。
%% java:存在return,直接使用return。
%% 方法一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
regist(UName,UEmail,UPass,USex,UMoney,UOwn) { if (!checkName(UName))
{
return
;
}
if (!checkEmail(UEmail))
{
return
;
}
if (!checkPass(UPass))
{
return
;
}
if (!checkSex(USex))
{
return
;
}
if (!checkMoney(UMoney))
{
return
;
}
if (!checkOwn(UOwn))
{
return
;
}
} |
%% 在erlang中不存在return:
%% 方法二、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
regist(UName,UEmail,UPass,USex,UMoney,UOwn)-> case
checkName(UName)
of
ok->
case
checkEmail(UEmail)
of
ok->
case
checkPass(UPass)
of
ok->
case
checkSex(USex)
of
ok->
case
of
ok->
case
checkMoney(UMoney)
of
ok->
case
checkOwn(UOwn)
of
ok->
ok;
error->
error
end
;
error-> error
end
;
error->
error
end
;
error-> error
end
;
error->error
end
;
error->
error
end
;
error->error
end
. |
%% 方案三、
1
2
3
4
5
6
7
8
9
10
11
12
13
|
regist(UName,UEmail,UPass,USex,UMoney,UOwn)-> NameResult = checkName(UName),%% 返回值: 0 , 1
EmailResult =checkEmail(UEmail,NameResult),
PassResult = checkPass(UPass,EmailResult),
SexResult = checkSex(USex,PassResult),
MoneyResult = checkMoney(UMoney,SexResult),
checkOwn(UOwn,MoneyResult).
%% 通过名字验证后才能进行邮箱验证,否则直接放回名字验证的结果。 checkEmail(UEmail, 1 )->
Result;
checkEmail(UEmail,NameResult)-> NameResult;
|
%% 猜测:方案三可能比方案二慢.
%% 确定: 方案三的可读性远远超过于方案二.
%%
缺陷:方案三的函数 比 方案二的增加了参数。
%% 实践:需要检测方案二 和 方案三 的 可行性 和
效率。