有一种整洁的模式,似乎似乎是众所周知的。直到我加入Vortexa的应用程序开发团队(我们招聘),我实际上没有听说过它 - 但现在我经常使用它。它被称为switch true,它真的很简单。
大多数JavaScript开发人员都熟悉Switch语句(MDN文档),但对于那些更新语言的人来说,让我们简要介绍它。
Switch语句允许您与许多不同案例中的一个匹配表达式:
Const City ="伦敦" ; const getcountrycity =()=> {Switch(City){案例"爱丁堡" :返回"爱丁堡是苏格兰首都" ;案例"马德里" :返回"马德里是西班牙首都" ;案例"伦敦" :返回"伦敦是英格兰首都" ;默认值:返回"找不到这个城市的哪个国家。" ; }};
在此示例中,表达式(City变量)与交换机语句中的每种情况匹配。如果案例与表达式的结果匹配,则将执行该案例 - 在此示例中它将返回一个字符串。
交换机真正模式的基本原则是您可以匹配表达式以及值。在匹配之前将评估案件中的表达式。如果案例中的表达式评估为true - 它将被匹配。
切换(true){case 1 + 1 === 2://此情况评估为true,因此它将被执行默认值://这将不会被执行}
此模式可以在许多不同的情况下使用 - 经常替换复杂的IF / else语句。
如果您正在验证数据并具有一组标准,则此模式的常见方案易于易于验证,这将导致验证失败:
const user = {firstname:"seán" ,lastname:"巴里" ,电子邮件:" [email protected]" ,数字:" 00447123456789" ,}; if(!用户){抛出新("必须定义用户。"); }如果(!用户.firstname){over new("用户' s名字必须定义"); }否则如果(键入用户.firstname!=="字符串"){抛出新("用户' s名字必须是字符串");否则如果(// ...在这里更多验证)返回用户;
const user = {firstname:"seán" ,lastname:"巴里" ,电子邮件:" [email protected]" ,数字:" 00447123456789" ,};切换(真){案例!用户:抛出新("必须定义用户。");案例!用户.firstname:抛出新("用户' s名字必须定义");案例类型用户.Firstname!=="字符串" :抛出新的("用户' s名字必须是字符串");默认值:返回用户; }
如果IF / ELLE和SWITE TRUE都可以用抽象的验证条件写入以获得更好的可读性:
切换(真){案例! Isdefined(用户):抛出新("必须定义用户。");案件 ! Isstring(用户.firstname):抛出新的("用户' s名字必须是字符串");案件 ! Isvalidemail(用户.email):抛出新的("用户'电子邮件地址必须是有效的电子邮件地址");案件 ! IsValidPhoneNumber(用户.Email):抛出新("用户' S电话号码必须是有效的电话号码"); //此处的任意数量其他验证案例默认值:返回用户; }
在我看来,在检查多个IF / ELSE块的情况下,此模式在检查多个条件时提供清洁可读性。我相信这将是非常偏振的,但要意识到这些模式总是有用的,以便在适当时使用它们。
如果你有关于这种模式的想法 - 在Twitter上接触我 - @SeanBarryuk并让我知道!