表意编程
lookup(Key, Dict) -> {ok, Value} | not_found
(1) 检索数据
{ok, Value} = lookup(Key, Dict)
用来从字典里提取带有已知键的项,如果不存在就会报错
(2) 搜索数据
case lookup(Key, Dict) of
{ok, Val} ->
Val
not_found ->
"not_found"
end.
可以看出不知道字典里是否有这个键,因为代码模式匹配了lookup的所有返回值{ok, Val}和not_found。可以推断是想在字典里搜索某个值。
(3) 判断数据存在
case lookup(Key, Dict) of
{ok, _} ->
true
not_found ->
false
end.
测试字典里是否存在特定的键, 拿到值却不使用。
lookup 有三种不同的用途:数据检索、搜索和测试某个键是否存在。
与其猜测意图和分析代码,不如调用一个能显式表达三种意图之一的库方法。dict为此导出了三个函数。
dict:fetch(Key, Dict) = Val | EXIT
dict:find(Key, Dict) -> {'ok', Value} | 'error'
dict:is_key(Key, Dict) = Boolean
能准确表达意图。无需猜测和分析程序,函数名就能清楚表达意图。
用lookup编写的代码会比用fetch、search和is_key三者之一编写的代码更难以理解和维护。