2017-01-23 44 views
-1

在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

'nil'實際上不是在JavaScript – Paul

+0

@保羅先生固定一個 – softcode

+0

事情http://codereview.stackexchange.com/是這類問題的更好。 – 2017-01-23 02:19:03

回答

3

你目前的代碼是可讀的,很好。你可以把它寫成

return !isEmail(field.target.value) && dispatch('has_error', field); 

return isEmail(field.target.value) || dispatch('has_error', field); 

這樣就結合兩個「技巧」:

  1. 在同一行的一些聲明使用return,爲了既執行該聲明,然後立即從函數返回。但是,這可能會讓人困惑 - 讀者可能會認爲返回值是重要的。只有當函數通常不會返回任何東西時它才起作用。

  2. 書寫if (a) b作爲a && b(或if (!a) b作爲a || b)。但是這種寫作if陳述的等價物的方法通常被認爲太簡潔了 - 它隱藏了邏輯本質的本質。另外,如果以獨立方式使用,如a && b;,許多短褲會(正確)抱怨獨立表達。

+0

真棒回答謝謝 – softcode

0

這是有效的做這樣的事情:

if (!isEmail(field.target.value)) return dispatch('has_error', field); 

但有些人不關心多久卷緊之中。

+1

這不會做同樣的事情。原始代碼返回條件是否爲真。 – 2017-01-23 02:17:34

+1

不,不要再看。我將案件陳述留下,但每一次回報都是「沒有價值的回報」。 – Paul

0

嘗試類似下面,如果isEmail(field.target.value)回報falsedispatch('has_error', field)將被執行。

isEmail(field.target.value) || dispatch('has_error', field); 
return;