2010-03-13 4 views
-1

Я готовлю короткий учебник для студентов уровня 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

ответ

1

тэ-MAY-схождение

схождение MAH-тэ

запрещая странные привычки, "читаемым" является , что вы привыкли видеть

я бы форматировать ваш Пример:

//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 все вместе, а не разбросаны по поводу кодовых утверждений. И мне нравятся скобки на линии, чтобы сделать блоки лучше.

Но - как уже отмечались - на «конечную» читаемость этого примера, он должен быть переработан в по крайней мере isValidPhoneNumber функции

+0

спасибо. похоже, что вы единственный, кто действительно прочитал вопрос. Именно то, что я хотел: выяснить, как вы это делаете и почему. Мне пришлось задать этот вопрос при работе над этим примером phonenumber, и я мог бы использовать любой другой фрагмент if-блока. Никаких мыслей о перераспределении его в отдельный метод не было. Еще раз спасибо. –

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

по существу, недействительный, пока не доказано, что оно безопасно, но это полностью субъективно.

также:

if(...){ 
} 

всегда лучше:

if(...) 
{ 

} 

в JavaScript - это из-за вставки с запятой, которая не может быть проблемой здесь, но может быть в в других случаях, поэтому лучше поддерживать одни и те же привычки при работе на языке.

И, наконец, я не перегружаю код большим количеством этих круглых скобок, чем я должен, особенно когда все вещи «ANDed» - при смешанном приоритете оператора важно включить дополнительные скобки, поскольку не все будут хотите подумать об этом при чтении кода.

Это все немного субъективно. Прости.

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); 
Смежные вопросы