首页 > 其他分享 >代码整洁之道:整洁代码、有意义的命名

代码整洁之道:整洁代码、有意义的命名

时间:2023-12-30 20:34:57浏览次数:29  
标签:count 代码 number private pluralModifier 之道 verb 名称 整洁

来源:博客园(作者-BNDong

什么是整洁代码

有多少程序员,就有多少定义。每个人理解的都不一样,我理解的整洁代码:

  • 可读性高
  • 尽量少的依赖关系
  • 目的明确
  • 没有重复的代码
  • 高效

有意义的命名

名副其实

变量、函数或类的名称应该已经答复了所有的大问题。它该告诉你,它为什么会存在,它做什么事,应该怎么用。如果名称需要注释来补充,那就不算名副其实。

避免误导

避免使用与本意相悖的词。

做有意义的区分

同一系列的不能单纯的使用数字来命名。命名的名称必须相异,提供向导作者意图的线索。尽量不适用意义含混的废话,Info和Data就像a、an和the一样。

使用读得出来的名称

使用可搜索的名称

名称长短应与其作用域大小相对应。若变量或常量可能在代码中多处使用,则应赋其便于搜索的名称。

避免使用编码

匈牙利语法标记法(话说这种命名带数据类型的现在没啥用啊,反而增加负担(⊙﹏⊙)b)

减少没必要的前缀

接口和实现(在书中并不建议使用前导字母 I 来修饰接口,不过本人更倾向于对接口使用前导字母来进行修饰!)

避免思维映射

不应当让读者在脑中把你的名称翻译为他们熟知的名称。

类名

类名和对象名应该是名词或名词短语。

方法名

方法名应当是动词或动词短语。

别扮可爱

参考“名副其实”,就是不要用一些奇葩的名字。

每个概念对应一个词

给每个抽象概念选一个词,并且一以贯之。

别用双关语

避免将同一单词用于不同目的。

使用解决方案领域名称

只有程序员才会读你的代码,所以尽管使用那些极端及科学术语、算法名、模式名、数学术语吧。(貌似自己知道的真不多)

使用源自所涉问题领域的名称

如果不能用程序员熟悉的术语来给手头的工作命名,就采用从所涉问题领域而来的名称。

添加有意义的语境

如果名称不能完全自我说明,就需要用有良好命名的类、函数或名称空间来放置名称,给读者提供语境。

  语境不明确的变量:

private function printGuessStatistice($candidate, $count)
{
    $number = '';
    $verb = '';
    $pluralModifier = '';

    if ($count == 0) {
        $number = 'bn';
        $verb   = 'dong';
        $pluralModifier = 'bndong';
    } elseif ($count == 1) {
        $number = 'DONG';
        $verb   = 'BN';
        $pluralModifier = 'DONGBN';
    } else {
        $number = strval($count);
        $verb   = 'bndong';
        $pluralModifier = '';
    }

    $guessMessage = sprintf(
        'String %s %s %s%s', $verb, $number, $candidate, $pluralModifier
    );

    echo $guessMessage;
}

  这里我们分解这个函数,新建一个类GuessStatisticsMessage,把三个变量做成该类的成员字段。增强语境也让算法能够通过分解为更小的函数而变得更为干净利落。

class GuessStatisticsMessage
{
   private $number;
   private $verb;
   private $pluralModifier;

   public function make($candidate, $count)
   {
        $this->createPluralDependentMessageParts($count);
        return sprintf(
            'String %s %s %s%s', $this->verb, $this->number, $candidate, $this->pluralModifier
        );
   }

   private function createPluralDependentMessageParts($count)
   {
        if ($count == 0) {
            $this->thereAreNoLettres();
        } elseif ($count == 1) {
            $this->thereIsOneLetter();
        } else {
            $this->thereAreManyLetters($count);
        }
   }

   private function thereAreManyLetters($count)
   {
        $this->number = strval($count);
        $this->verb   = 'bndong';
        $this->pluralModifier = '';
   }

      private function thereIsOneLetter()
   {
        $this->number = 'DONG';
        $this->verb   = 'BN';
        $this->pluralModifier = 'DONGBN';
   }

   private function thereAreNoLettres()
   {
        $this->number = 'bn';
        $this->verb   = 'dong';
        $this->pluralModifier = 'bndong';
   }
}

不要添加没用的语境

只要短名称足够清楚,就要比长名称好。别给名称添加不必要的语境。(个人理解就是尽量精简名称里的字母)

标签:count,代码,number,private,pluralModifier,之道,verb,名称,整洁
From: https://www.cnblogs.com/mharvay/p/17903748.html

相关文章

  • STM32实战之IAP代码升级
    1IAP介绍  IAP(InApplicationProgramming)即在应用编程,IAP是用户自己的程序在运行过程中对UserFlash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信接口对产品中的固件程序进行更新升级。通常实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设......
  • 代码随想录day04 两两交换链表中的节点 删除链表的倒数第N个节点 链表相交 环形链表
    两两交换链表中的节点题目:这题画一下链表会比较清晰写写画画指针位置很快就可以写出来一开始以为一个tmp就够用了写着写着发现需要多一个代码:删除链表的倒数第N个节点:没什么思路只好先看看视频思路视频思路很简单也很清晰只需要两个指针一快一慢两指针的间......
  • python学习笔记4(print复杂语法、input、注释、代码缩进)
    上一节学习了概述、开发工具、编写方法、print简单语法本节内容:(一)print复杂语法1、多条print输出到一行显示print('北京',end='---->')print('欢迎你')2、使用连接符连接多个字符串+不能连接数据值和其他类型print(192,168,1,1,sep='.')#多个字符串通过.间隔print('北京欢迎你'+'2......
  • 《重构:改善既有代码的设计》读书笔记三
    7、FeatureEnvy(依恋情结)函数对于某个类的兴趣高过对自己所处类的兴趣。把这个函数移至另一个地点,移到它该去的地方。MoveMethod(搬移函数)如果一个函数用到几个类的功能,则该判断哪个类拥有最多被此函数使用的数据,然后就把这个函数和那些数据摆在一起。ExtractMethod(提炼函......
  • 代码随想录day03 链表删除 链表类的实现 反转链表
    首先是链表的删除操作热身题这里使用了一个新的头指针这样在删除头指针的时候就不需要进行额外的判断然后是链表类的实现需要一点背诵加上深刻理解有时候理解了但是写起来还是会有些指针边界的小问题应该多写写多记一下就会好了还有就是手写链表要常复习吧学习新......
  • 代码随想录算法训练营第十七天 | 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和
    一、110.平衡二叉树题目链接:LeetCode110.平衡二叉树学习:思路:后序遍历。实际上是由叶结点到根结点,若有一颗子树不是平衡二叉树,则直接返回给根结点二、257.二叉树的所有路径题目链接:LeetCode257.二叉树的所有路径学习:思路:递归+回溯。因为是线=先遍历根结点,然后遍历左孩......
  • 微信小程序编辑在线运行代码
    ​1、进入小程序1)微信搜索微信搜索"cjavapy"或"CJavaPY编程之路"可以找到小程序。2)微信扫码微信扫描下面二维码,可以进入微信小程序:​编辑2、代码运行进入小程序后,点击"代码运行",出现编辑器,可以编辑在线运行,支持C/C++,C#,Java,Python,JavaScript,如下图,​编辑​编辑​编......
  • 临时存代码
    \(P5656\)#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;template<typenameTp>inlinevoidread(Tp&x){x=0;registerboolz=1;registercharc=getchar();for(;c<'0......
  • 2023-12-29 hbuilderx运行小程序中常常遇到保存代码后不生效的问题==》检查代码保存是
    问题描述:微信小程序+uniapp开发,用hbuilderx工具来编译运行的小程序,时不时会出现我明明保存了代码,结果没有编译,要关掉微信开发者工具,然后在hbuilderx点击重新编译才能生效。原因:代码没有保存故而没有编译。原来,微信开发者工具运行的包里面对应的页面数据和我写的代码不一致!也就......
  • 代码规范整理
    断言使用#ifndefDEBUG_MODE#defineassert(expression)((void)0)#endifswicth编写规范#defineUNREACHABLE()assert(0)enumDay{MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY};voidprintDayName(enumDayday){switch......