在switch语句的情况下,我有多次以下条件结构。 (见箭头)
switch (field.target.name) {
case "email":
if (!isEmail(field.target.value)) { <-----------
dispatch('has_error', field) <-----------
} <-----------
return <-----------
case "phoneNumber":
case "companyPhoneNumber":
if (!isMobilePhone(field.target.value, 'en-CA')) {
dispatch('has_error', field)
}
return
}
我想缩短它,所以它不会占用4行。我可以做点像
!isEmail(field.target.value) ? dispatch('has_error', field) : null
return
但这似乎很尴尬。
那里有任何优雅的解决方案吗?
答案 0 :(得分:3)
您当前的代码可读且很好。你可以把它写成
return !isEmail(field.target.value) && dispatch('has_error', field);
或
return isEmail(field.target.value) || dispatch('has_error', field);
这结合了两种&#34;技术&#34;:
在某行语句的同一行使用return
,以便执行该语句,然后立即从函数返回。但是,这可能会令人困惑 - 您的代码的读者可能认为返回值在某种程度上很重要。并且仅当函数通常不会返回任何内容时才有效。
将if (a) b
写为a && b
(或if (!a) b
为a || b
)。但是这种编写等效于if
语句的方法通常不赞成过于简洁 - 它隐藏了逻辑的基本if
性质。此外,如果以独立的方式使用,如a && b;
,许多短语(正当地)会抱怨独立表达。
答案 1 :(得分:0)
做这样的事情是有效的:
if (!isEmail(field.target.value)) return dispatch('has_error', field);
但有些人并不关心这种情况有多长。
答案 2 :(得分:0)
尝试以下内容,如果isEmail(field.target.value)
返回false
,则会执行dispatch('has_error', field)
。
isEmail(field.target.value) || dispatch('has_error', field);
return;