2010-03-13 21 views
-1

我正在爲一級學生編寫JavaScript基礎知識的短期教程。任務是驗證電話號碼。該號碼不能包含非數字,並且必須是14位數字或更少。下面的代碼摘錄就是我想出來的,我想盡可能讓它更易讀。可讀性和IF塊括號:最佳實踐

if (
    //set of rules for invalid phone number 
     phoneNumber.length == 0 //empty 
    || phoneNumber.length > 14 //too long 
    || /\D/.test(phoneNumber) //contains non-digits 
) { 
    setMessageText(invalid); 
} else { 
    setMessageText(valid); 
} 

一個簡單的問題,我不能回答挺自己,想聽聽您的意見:如何定位周圍(最外層)括號?很難看出正常和大括號之間的區別。你通常會把最後一個)和最後一個條件放在同一行嗎?你是否將第一個開頭(保持在一行?你是否也將每個單獨的子條件都包含在括號中?水平對齊第一個(與最後一個),還是將最後一個)放在與if相同的列中?

你把) {放在一個單獨的行上,還是把最後一個)放在最後一個子條件的同一行上,然後把開頭{放在一個新行上?或者你只是把) {放在與最後一個子條件相同的線上?

社區wiki。

編輯 請只發表有關括號的使用和放置的意見。代碼不需要重新考慮。這是針對幾個星期前剛剛推出JavaScript的人。我並不是在尋求如何編寫代碼的意見,因此它更短或性能更好。我只想知道你如何在IF條件下放置括號。

+0

任何形式的代碼美學是純粹的議論。放在任何你想要的地方,並設置一個工具來自動格式化你的代碼,如果你在一個團隊工作。 – sibidiba 2010-03-13 20:10:16

回答

1

TUH-MAY-腳趾

腳趾-MAH-TUH

禁止離奇的習慣, 「可讀」 是你看慣了

我會格式化你的像這樣的例子:

//set of rules for invalid phone number: 
// - not empty 
// - not too long (14 characters) 
// - can contain only digits 
if (phoneNumber.length == 0 || 
    phoneNumber.length > 14 || 
    /\D/.test(phoneNumber)) 
{ 
    setMessageText(invalid); 
} 
else 
{ 
    setMessageText(valid); 
} 

因爲我更喜歡看到邏輯expl而不是散佈在代碼語句上。而且我喜歡用自己的大括號來使這些區塊更加突出。

但是 - 正如其他人所指出的 - 在這個例子中的「終極」的可讀性,它應該被重構到至少一個​​功能

+0

謝謝。似乎你是唯一一個真正閱讀過這個問題的人。正是我想要的:瞭解你如何做以及爲什麼。在處理這個電話號碼的例子時,我碰巧問過這個問題,我也可以使用任何其他的if-block代碼段。沒有想到將其重新分解成單獨的方法是必要的。再次感謝。 – 2010-03-14 08:44:40

1
message = invalid 
if(phoneNumber.length > 0 && phoneNumber < 14 && /\D/.test(phonenumber)){ 
    message = valid 
} 
setMessageText(message) 

從本質上講,無效的,直到證明有效是安全的,但這是完全主觀的。

也:

if(...){ 
} 

總是優於:

if(...) 
{ 

} 
在JavaScript

- 這是因爲分號插入,這可能不是一個問題就在這裏,但可能是其他情況下,所以最好在使用該語言時保持相同的習慣。

最後,我不會用比這更多的括號來重載代碼,特別是當事情都是「AND」時 - 當混合運算符優先級時,重要的是要包含額外的括號,因爲不是每個人都會想在閱讀代碼時想一想。

雖然這有點主觀。抱歉。

5

我會重構邏輯驗證電話號碼成一個函數:

function isValidPhoneNumber(phone) { 
    if (phone.length == 0) return false; 
    if (phone.length > 14) return false; 
    return !/\D/.test(phone); 
} 

或者你可以使用正則表達式來檢查長度也:

function isValidPhoneNumber(phone) { 
    return /^\d{1,14}$/.test(phone); 
} 

隨着功能驗證電話號碼,代碼變得更簡單:

if (isValidPhoneNumber(phoneNumber)) { 
    setMessageText(valid); 
} else { 
    setMessageText(invalid); 
} 

甚至:

setMessageText(isValidPhoneNumber(phoneNumber) ? valid : invalid);