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

Javascript 可读性和IF块括号:最佳实践,javascript,readability,brackets,Javascript,Readability,Brackets,我正在为学习JavaScript基础知识的1级大学学生准备一个简短的教程。任务是验证电话号码。数字不得包含非数字,且长度不得超过14位。下面的代码摘录是我想到的,我希望尽可能使它可读 if ( //set of rules for invalid phone number phoneNumber.length == 0 //empty || phoneNumber.length > 14 //too long || /\D/.test(phone

我正在为学习JavaScript基础知识的1级大学学生准备一个简短的教程。任务是验证电话号码。数字不得包含非数字,且长度不得超过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的人准备的。我不是在征求关于如何编写代码以使其更简短或性能更好的意见。我只想知道,如果有必要,您如何放置括号离子

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

if(...)
{

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

最后,我不会在代码中添加太多的括号,尤其是当所有内容都是“AND”时——当存在混合运算符优先级时,包含额外的括号很重要,因为不是每个人在阅读代码时都想考虑这一点


不过这有点主观。对不起。

我会将验证电话号码的逻辑重构为一个函数:

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);
图梅趾

图马图

除非有奇怪的习惯,“可读性”是你习惯看到的

我会将您的示例格式化如下:

//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
函数

任何类型的代码美学都是纯粹的争论。把它放在你想要的地方,并设置一个工具来自动格式化你的代码,如果你在一个团队中工作。谢谢。看起来你是唯一一个真正阅读这个问题的人。到底是什么我想:找出你是如何做到这一点的以及原因。在处理这个电话号码示例时,我碰巧问了这个问题,我还可以使用任何其他if块片段。没有必要考虑将其重新分解为单独的方法。再次感谢。
//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); 
}