以java和erlang為例:
①、java:面向對象 且 存在return。
②、erlang: 函數性編程 不存在return
%% 模擬檢測 多個輸入信息是否合理,只要有一個不合理,則返回。
%% 舉例:UName,UEmail,UPass,USex,UMoney,UOwn.
%% 以上述描述的順序為檢測的優先級,檢測函數: 以check為前綴 加 要檢測的屬性名字。
%% java:存在return,直接使用return。
%% 方法一:
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:
%% 方法二、
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 .
%% 方案三、
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;
%% 猜測:方案三可能比方案二慢.
%% 確定: 方案三的可讀性遠遠超過於方案二.
%% 缺陷:方案三的函數 比 方案二的增加了參數。
%% 實踐:需要檢測方案二 和 方案三 的 可行性 和 效率。
