美文网首页
代码命名习惯——信达雅

代码命名习惯——信达雅

作者: 壹零二肆 | 来源:发表于2022-04-04 17:57 被阅读0次

    吟安一个字,捻断数茎须。

    Two hard things :

    • cache invalidate
    • naming

    一些个阶段:

    • 功能 work 的代码
    • 天花乱坠, 炫技的代码
    • 优雅的代码
    • 易被读懂的代码

    代码功底亦是一种修行, 摸索阶段总是琢磨着将功能实现了

    后面开始接触各大分支技术, 有了一定沉淀, 阅读了一些源码, 优秀框架后

    会写一些过度设计, 天花乱坠, 炫技的代码

    而后大成, 写的是 优雅口口传颂, 易被读懂的代码。

    若将代码比作武学, 命名就是好内功

    张无忌独步武林, 天赋异禀, 正是有九阳神功内功加持打底

    如果你也开始为一个命名思考了很久 ?

    文言翻译讲究: 信达雅, 命名类似。

    信: 信服
    命名起码应该是准确的。

    如果写一个 回调, 我们会命名为 XXXListener, 然后定义 一个 onXXX方法
    而不会写一个 XXXResponser, XXXReactor
    命名是要传达 context 的, 要遵传彼此的习惯。

    类型 类名可选后缀
    控制类 Processor、Manager、Engine、Center、Core、Reaper
    生产类 Factory、Pool、Maker、Builder
    工具类 Util、Helper
    数据类 Bean、Request、Response、Query(名次表意即可)
    回调类 Callback、Trigger、Listener、Handler
    监控类 Reporter、Metric、Tracker
    结构类 Wrapper、Iterator、Batch
    设计模式 Adapter、Action、Command、Event、Delegate、Builder、Factory、Template、Proxy、Delegate

    以上是一些常见的命名习惯, 可以让程序员心心相通
    InsertCommend : 立刻明白这是一个命令模式, 是一个 insert 的原子操作,整套架构应该是设计为一些 commend 来驱动执行

    除了这些常用的后缀, 也要注意命名的词性讲究:
    方法常用动词, 变量 :名词/形容词

    如果是一个开关:
    这里可选表达很多, 很多情况根据语境, 最好使用形成规范, 统一个人风格,阅读起来爽很多

    if (enableAFeature) {
      doAThing();
    }
    
    if (aFeatureEnable) {
      doAThing();
    }
    
    if (aFeatureValid) {
      doAThing();
    }
    
    if (isAFeature) {
      doAThing();
    }
    
    if (useAFeature) {
      doAThing();
    }
    
    if (aFeatureSwitchOn) {
      doAThing();
    }
    
    
    if (disableAFeature) {
      doAThing();
    }
    
    if (aFeatureDisable) {
      doAThing();
    }
    
    if (aFeatureInValid) {
      doAThing();
    }
    
    if (notAFeature) {
      doAThing();
    }
    
    if (aFeatureSwitchOff) {
      doAThing();
    }
    
    

    相比之下 switchOn , switchOff 是 if 语句开关语境很合适的通用表达,
    理论上以上都可以, 但是 个人代码风格一致性尤为重要, 习惯统一尤为重要。
    最好形成固定的表达方式, 来写代码。

    请不要在 if 中写很多逻辑, 取很多反

    达: 不拘,通达明白

    达这里有一点, 最小化信息传递原则, 如果你也害怕接受很多信息。

    信息传递越多决策越难

    我们的思维是 层层封装,暴露最少信息, 彼此隔离, 借口层业务层。

    怎么在代码中做到传递最少信息:
    比如: project aa; module: bb; 包目录: article/query/ 下
    写请求相关Bean 类:
    AABBArticleQuery
    AABBArticleResponse
    AABBArticleRequest

    这就是浪费: 直接写:
    Query
    Response
    Request

    project 包目录 会传递很多 context
    不要在命名中传递很多无用信息:
    AABBArticleQuery

    一个 Bean 类, 长命名, 导致的是对Bean类中成员的 调用 变得很恶心
    表现在: 很长串, 产生 厌烦

    保持 clean , 使代码看起来 清晰明了

    雅: 雅致

    雅致的命名使得代码变得文雅, 读起来不容易 wtf

    记得高中英语老师将莎士比亚十四行诗来作为大家晨读英语的材料

    Shall I compare thee to a summer's day? 
    Thou art more lovely and more temperate. 
    Rough winds do shake the darling buds of May, 
    And summer's lease hath all too short a date.
    

    韵脚

    枯藤老树昏鸦,
    小桥流水人家,
    古道西风瘦马。
    
    夕阳西下,
    断肠人在天涯。
    

    每句末尾均压一个 a 韵

    写一个分支可以这样:
    feature_feed_fling_flavor

    这个是意识形态的培养, 并不是需要在代码中这样做。

    用词

    组件, 开源组件命名可以具像化, 具像化的实物

    飞书命名: Lark 云雀

    Kotlin: 一个岛名: Kotlin Island

    sladar: 斯拉达(Slardar)是Dota2中的一位力量英雄。(字节系组件,网上可搜到避免敏感不阐述)

    libra: 天秤座(字节系组件,网上可搜到避免敏感不阐述)

    仔细品味下这几个命名, 感觉还是很妙, 很有巧思。

    动植物、地点、人物名字、名画 等

    这里贴上 古希腊众神:

    古希腊众神:

    宙斯:(罗马又称朱庇特)Zeus,天神之父,地上万物的最高统治者。

    赫拉:(罗马又称朱诺)Hera,宙斯的姐姐与妻子。是女性的代表,掌管婚姻和生育。性格特征是嫉妒。

    波塞冬:(罗马又称尼普东)Poseidon,海王,海洋和水域的一切主宰。

    得墨忒耳:(罗马又称赛尔斯)Demeter,大地女神,司丰收。

    哈底斯:(罗马又称普鲁通)Hades,冥王,司掌冥界,统治阴暗的世界。

    雅典娜:(罗马又称米诺娃)Athena,起初被视为女战神,后逐渐变为智慧女神和雅典城的守护女神。

    阿波罗:(罗马也称阿波罗)Apollo,在诗与艺术中表现为光明、青春和音乐之神,又是太阳神,与阿尔忒弥斯是孪生姐弟。

    阿尔忒弥斯:(罗马又称狄安娜)Artemis ,月神,又是狩猎之神、妇女之神,是女性纯洁的化身,与阿波罗是孪生姐弟。

    狄俄尼索斯:(罗马又称巴克科斯)Dionysus,酒神与狂饮欢乐之神。

    阿佛洛狄德:(罗马又称维纳斯)Aphrodite,爱情女神。她的忠实随从小爱神爱罗斯Eros(罗马又称邱比特)手持弓箭,被其金箭射中者即与随后见到的第一个人坠入情网,而被其铅箭射中者会对另一个人产生莫名的仇恨。

    赫斐斯托斯:(罗马又称乌尔肯)Hephaestus,火神和锻冶之神。

    阿瑞斯:(罗马又称玛尔斯)Ares ,战神。

    星座

    水瓶座 ♒ Aquarius Water Carrier / Water Bearer
    雙魚座 ♓ Pisces Fish / Fishes
    牧羊座 ♈ Aries Ram
    金牛座 ♉ Taurus Bull
    雙子座 ♊ Gemini Twins
    巨蟹座 ♋ Cancer Crab
    獅子座 ♌ Leo Lion
    處女座 ♍ Virgo Virgin
    天秤座 ♎ Libra Scales / Balance
    天蠍座 ♏ Scorpio Scorpion
    射手座 ♐ Sagittarius Archer
    摩羯座 ♑ Capricorn Goat / Sea Goat

    参考: https://juejin.cn/post/6995342820512890893#heading-14

    最后, 命名是一个过程,是 life long journey 。

    相关文章

      网友评论

          本文标题:代码命名习惯——信达雅

          本文链接:https://www.haomeiwen.com/subject/dfnpjrtx.html