zoukankan      html  css  js  c++  java
  • 据说程序员最怕命名!这个 6300 Star 的手册能帮上忙

    【导语】:naming-cheatsheet 是一个命名备忘录,记录命名的一些常见规范和约定。

    简介

    在编程工作中,命名是一件让很多开发者都头疼的事情。国外曾经有个一次关于程序员最难任务的投票调查,结果命名占了 49\%。


     

    一个好的变量或函数命名,应该能起到自解释的作用,甚至能减少我们代码的注释。

    naming-cheatsheet是一个命名备忘录,记录一些常见的规范约定,并提供简单的例子说明。如果能够严格遵守这些规范,相信我们的代码可读性会大大提升,下面就来介绍 naming-cheatsheet 提供的一些建议。


     

    使用英语

    这是最基本的一条规则了,英语是编程中的主要语言,所有编程语言的语法都是用英语编写的,通过英语编写代码,可以大大提高其通用性。对于我们国内开发者来说,一定要避免拼音甚至是直接的中文命名。

    /* Bad */ 

    const primerNombre = 'Gustavo' 

    const amigos = ['Kate', 'John'] 

    /* Good */ 

    const firstName = 'Gustavo' 

    const friends = ['Kate', 'John']

    命名风格

    选择一种命名的风格,并且严格遵守,可以是camelCase,或者snake\_case,或者是其他任何的风格,最重要的是要保持一致,不管是个人开发者还是团队,保持一致的命名风格很重要,不要混合使用。

    /* Bad */ 

    const page_count = 5 

    const shouldUpdate = true 

    /* Good */ 

    const pageCount = 5 

    const shouldUpdate = true 

    /* Good as well */ 

    const page_count = 5 

    const should_update = true


     

    遵守SID原则

    命名应该简短、直观并且具有描述性,遵循SID原则。

    Short。简短,避免输入太长,但是也应该注意不能简写到失去其原本的意义。

    Intuitive。直观,并且尽可能接近自然语言。

    Descriptive。以最有效的方式反映其作用或目的。

    /* Bad */ 

    const a = 5 // "a" could mean anything 

    const isPaginatable = a > 10 // "Paginatable" sounds extremely unnatural 

    const shouldPaginatize = a > 10 // Made up verbs are so much fun! 

    /* Good */ 

    const postCount = 5 

    const hasPagination = postCount > 10 

    const shouldPaginate = postCount > 10 // alternatively

    避免过度的简写

    命名要简短,但是要避免钻牛角尖,命名最重要的是要让人能看懂,过度的缩写如果失去了其原本的意义,降低了代码的可读性,那就不应该这么做,宁愿多写几个字母。

    /* Bad */ 

    const onItmClk = () => {} 

    /* Good */ 

    const onItemClick = () => {}

    避免上下文重复

    有时候在一段代码中可能会出现类似意义的变量定义,这个时候要避免命名的重复。

    class MenuItem { 

      /* Method name duplicates the context (which is "MenuItem") */ 

      handleMenuItemClick = (event) => { ... } 

      /* Reads nicely as `MenuItem.handleClick()` */ 

      handleClick = (event) => { ... } 

    }

    反映预期结果

    变量或函数的命名应该能反映预期的结果。

    /* Bad */ 

    const isEnabled = itemCount > 3 

    return <Button disabled={!isEnabled} /> 

    /* Good */ 

    const isDisabled = itemCount <= 3 

    return <Button disabled={isDisabled} />

    命名的模式

    可以参考以下类似的模式来做命名。

    A/HC/LC模式

    可以遵循A/HC/LC,即

    prefix? + action (A) + high context (HC) + low context? (LC)


     

    上下文的顺序可能会影响变量的含义,例如shouldUpdateComponent意味着将要更新一个组件,换一下顺序变成shouldComponentUpdate,意味着组件将做自我更新。


     

    动作

    函数名称的动词部分,是描述函数作用的最终要的部分,如:

    getXXX,表示获取数据

    setXXX,表示设值

    resetXXX,重置数据

    fetchXXX,请求数据

    removeXXX,移除数据,表示从某处删除某物

    deleteXXX,删除数据,表示完全清楚某些事物

    composeXXX,从现有数据创建新数据

    handleXXX,处理某个动作

    上下文

    函数或方法通常是某些事物的动作,结合上下文,能够明确其操作的对象,或者要能反映出函数预期的数据类型。一些特定的情况下允许省略上下文,例如在JavaScript中,filter对Array进行操作很常见,就没必要命名为filterArray了。

    /* A pure function operating with primitives */ 

    function filter(predicate, list) { 

      return list.filter(predicate) 

    /* Function operating exactly on posts */ 

    function getRecentPosts(posts) { 

      return filter(posts, (post) => post.date === Date.now()) 

    }

    前缀

    前缀用来增强变量的含义,如:

    is,描述特征或状态,通常是boolean类型

    has,描述是否具有某个状态或值,通常是boolean类型

    should,反映肯定的条件,加上特定的执行动作

    min/max,描述边界或界限时使用

    prev/next,指示前一个或下一个状态

    单复数

    变量名称是单数还是复数,取决于值的单数还是复数。

    /* Bad */ 

    const friends = 'Bob' 

    const friend = ['Bob', 'Tony', 'Tanya'] 

    /* Good */ 

    const friend = 'Bob' 

    const friends = ['Bob', 'Tony', 'Tanya']

    最后,特别推荐一个分享C/C++和算法的优质内容,学习交流,技术探讨,面试指导,简历修改...还有超多源码素材等学习资料,零基础的视频等着你!

    还没关注的小伙伴,可以长按关注一下:


     

    文章来源:https://segmentfault.com/a/1190000039237659?utm_source=tuicool&utm_medium=referral

  • 相关阅读:
    python学习--函数
    python学习--变量
    python学习--运算符
    python学习--数据类型
    python学习--循环语句
    年轻不言失败
    《zero to one》读后感
    进程与线程
    JS----模块化
    js 一个等号"=" 二个等号"==" 三个等号"===" object.is()的区别
  • 原文地址:https://www.cnblogs.com/mu-ge/p/14452019.html
Copyright © 2011-2022 走看看