单行条件操作
One-liner conditional operation
在 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
但这似乎很尴尬。
有什么优雅的解决方案吗?
这样做是有效的:
if (!isEmail(field.target.value)) return dispatch('has_error', field);
但有些人并不关心最终会持续多久。
您当前的代码可读性好。你可以写成
return !isEmail(field.target.value) && dispatch('has_error', field);
或
return isEmail(field.target.value) || dispatch('has_error', field);
这结合了两个 "techniques":
在与某些语句相同的行上使用 return
,以便同时执行该语句,然后立即从函数中 return。然而,这可能会造成混淆——您的代码中的 reader 可能认为 return 值在某种程度上很重要。并且只有当该函数通常不期望 return 任何东西时它才有效。
将if (a) b
写成a && b
(或if (!a) b
写成a || b
)。但是这种编写等效于 if
语句的方法通常因过于简洁而不受欢迎——它隐藏了逻辑的基本 if
性质。此外,如果以 stand-alone 方式使用,如 a && b;
,许多 linter 会(理所当然地)抱怨 stand-alone 表达式。
尝试下面的操作,如果isEmail(field.target.value)
return false
,dispatch('has_error', field)
将被执行。
isEmail(field.target.value) || dispatch('has_error', field);
return;
在 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
但这似乎很尴尬。
有什么优雅的解决方案吗?
这样做是有效的:
if (!isEmail(field.target.value)) return dispatch('has_error', field);
但有些人并不关心最终会持续多久。
您当前的代码可读性好。你可以写成
return !isEmail(field.target.value) && dispatch('has_error', field);
或
return isEmail(field.target.value) || dispatch('has_error', field);
这结合了两个 "techniques":
在与某些语句相同的行上使用
return
,以便同时执行该语句,然后立即从函数中 return。然而,这可能会造成混淆——您的代码中的 reader 可能认为 return 值在某种程度上很重要。并且只有当该函数通常不期望 return 任何东西时它才有效。将
if (a) b
写成a && b
(或if (!a) b
写成a || b
)。但是这种编写等效于if
语句的方法通常因过于简洁而不受欢迎——它隐藏了逻辑的基本if
性质。此外,如果以 stand-alone 方式使用,如a && b;
,许多 linter 会(理所当然地)抱怨 stand-alone 表达式。
尝试下面的操作,如果isEmail(field.target.value)
return false
,dispatch('has_error', field)
将被执行。
isEmail(field.target.value) || dispatch('has_error', field);
return;