代码之家  ›  专栏  ›  技术社区  ›  Colin Mackay

可读性和IF块括号:最佳实践[关闭]

  •  -1
  • Colin Mackay  · 技术社区  · 7 年前

    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的人准备的。我不是在征求意见,如何编写代码,使其更短或性能更好。我只想知道,如果条件允许的话,你怎么用括号括起来。

    3 回复  |  直到 13 年前
        1
  •  1
  •   Steven A. Lowe    16 年前

    图梅脚趾

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

    //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 功能

        2
  •  5
  •   Guffa    16 年前

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

    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);
    
        3
  •  1
  •   Andrew Theken    16 年前
    message = invalid
    if(phoneNumber.length > 0 && phoneNumber < 14 && /\D/.test(phonenumber)){
      message = valid
    }
    setMessageText(message)
    

    if(...){
    }
    

    if(...)
    {
    
    }
    

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

    最后,我不会用太多的括号来重载代码,尤其是当事情都是“and”的时候——当存在混合运算符优先级时,包含额外的括号是很重要的,因为不是每个人在阅读代码时都会考虑到这一点。

    不过,这都有点主观。对不起的。