可读性和IF块括号:最佳实践

时间:2010-03-13 13:33:12

标签: javascript readability brackets

我正在为1级单身学生学习JavaScript基础知识做一个简短的教程。任务是验证电话号码。该号码不得包含非数字,且长度不得超过14位。以下代码摘录是我提出的内容,我希望尽可能让它变得可读。

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相同的列中?

您是否将) {放在单独的一行上,或者将最后一个)放在与最后一个子条件相同的行上,然后将开头{放在新行上?或者你只是将) {放在与最后一个子条件相同的行上?

社区维基。

修改 请仅发布有关括号的使用和放置的意见。代码不需要重新考虑。这适用于几周前才引入JavaScript的人。我不是在征求意见如何编写代码,因此它更短或性能更好。我只想知道如何在IF条件下放置括号。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

基本上,在证明有效之前无效是更安全的,但这是完全主观的。

也:

if(...){
}

总是好于:

if(...)
{

}

在javascript中 - 这是因为分号插入,这可能不是问题,但在其他情况下也是如此,因此在使用该语言时最好保持相同的习惯。

最后,我不会用更多的括号来重载代码,特别是当事情都是“AND”时 - 当混合运算符优先时,重要的是包含额外的括号,因为不是每个人都想要在阅读代码时要考虑这一点。

但这有点主观。遗憾。

答案 2 :(得分: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); 
} 

因为我更喜欢看到逻辑一起解释而不是散布在代码语句中。而且我自己喜欢在一条线上使用括号来使这些块更好。

但是 - 正如其他人所指出的 - 对于这个例子的“最终”可读性,它应该被重构为至少一个isValidPhoneNumber函数