validate / verify / check
validate
,可以翻译为“校验”,一般用于有“标准答案”的场景。比如登录表单里输入手机号,我们可以校验用户输入的字符串是不是一个合理的手机号(比如是不是11位,是不是已知的号段)。这里校验的标准是“合理的手机号格式”,这是一个标准答案。validate 的规则一般不依赖于外部知识或信息。validate 的结果一般是正确或错误。validate 是一个动词,指校验的过程。valid/invalid 是相应的形容词,validation 是动作的名词。
verify
,可以翻译为“验证”,一般用于没有“标准答案”的场景。比如用户输入的手机号,是否是真实存在的、有人在用的手机号?这个是无法在不依赖于外部信息的情况下作出判断的。外部信息有很多种,比如可以问电信公司,这个号码有没有人用,比如可以给用户发一条短信,看他有没有收到。但注意,即使有了这些外部信息,这也同样不能算是“标准答案”。比如验证码这个东西,有可能用户瞎猜了一个,猜对了(虽然概率小,但仍然是可能的)。
validate
的过程,一般是给定一个具体的规则,按照规则去对比就可以出结果。verify 的过程往往是一个试验的过程。比如瑞德西韦这个药对新冠肺炎有没有疗效?我们需要做临床试验去验证一下。verify 的结果,一般来说不是严格的 true/false,而是大概率true/大概率false。
check
可以翻译为查看、检查,返回的结果未必是 true/false。门外有一声巨响,你去查看一下是什么情况。试卷做完了,自己检查一遍有没有粗心的地方(自己检查,不知道正确答案,考试间也不能问老师,所以这里既不是 validate,也不是 verify)。check 也可以用于“对比”,比如考完试了,老师把答案发下来,大家自己对比一下,这也叫 check。
state / status
state
,有些人可能听说过“状态机”这个词,state machine。一般指在一个程序(process)中,会有多个阶段/节点(stage),每一个节点就是一个 state。比如在淘宝上购物,下单后会有这几个节点:待付款、待发货、已发货(待揽收)、(快递)运送中、投递中、已投递、申诉中、退款中,等等,注意,这里面的申诉中、退款中不一定是在最后,在任何一个环节都可以变成申诉中,任何一个环节都可以发起退款。一般来说,state 之间是可以互相切换的(当然有些 state 之间会有切换约束,比如只能从待发货变为已发货,而不能反过来)。
status
,一般描述一种结果(outcome),比如 成功、失败。status 并不强调有程序(process)。比如,API 请求的结果是成功还是失败,这里可以用 status(HTTP的返回码就叫 status code)。