首页 > 编程语言 >程序员小白写代码需要要养成的一个好习惯~

程序员小白写代码需要要养成的一个好习惯~

时间:2024-01-30 09:33:56浏览次数:27  
标签:逻辑 养成 代码 程序员 小白 ..... 抽取 void a2

1.业务逻辑与代码

代码是需求逻辑的一种展现形式

需求文档是业务逻辑的一种展现形式,而代码不过是业务逻辑的另一种表现形式;如果逻辑本身有问题,那么它的各种展示形式自然也是错的,所以写代码前应该先思考清楚业务逻辑。

Review代码很多时候是逻辑问题

在Review代码经验中发现:混乱的代码并不仅仅是代码编写技艺问题,很多时候是因为逻辑没有梳理清楚。逻辑混乱,自然代码也混乱。梳理清楚业务逻辑,就为代码打下了良好的基础。当然业务逻辑梳理清楚后,业务逻辑到代码的映射依然有可能出问题,这是编程技艺要解决的问题。下面通过一个简单的例子来演示这个过程:

2.业务需求示例

我们要做一件事情doSomething:

  • 第一步先做 A,A 过程要先执行 a1, 然后执行 a2, 然后执行 a3 这三个子过程。
  • 第二步再做 B,B 过程需要执行 b1,然后 b2 这两个子过程。

这个示例逻辑的图形表述如下:是一个树,包含树的根,枝干,和叶子。

image-20240130091919457

例子是有通用性的,现实世界的任何事情或业务都可以用类似的树形结构来表述。

3.正确的代码实现

3.1 和逻辑树映射的代码树

正确的代码结构应该是和逻辑映射的,代码结构如下:

image-20240130091943176

我们真实写代码的时候,一般并不会直接写出如上结构,而是会先写出「3.2 代码块 + 注释」的结构来。

3.2 代码块 + 合理注释

如下代码通过代码块来映射逻辑,上面图中的子方法对应代码中的注释。

void doSomething(){
    //A
    a1逻辑伪代码.....;//a1
    a2逻辑伪代码.....;//a2
    a3逻辑伪代码.....;//a3

    //B
    b1逻辑伪代码;//b1
    b2逻辑伪代码;//b2
}
3.3 抽取小方法

可以再上面的基础上更优秀些,对代码块进行抽取小方法,更符合业务描述(更符合业务的树形结构)。

void doSomething(){
    doA();
    doB();
}

void doA(){
    a1逻辑伪代码.....;
    a2逻辑伪代码.....;
    a3逻辑伪代码.....;
}

void doB(){
    b1逻辑伪代码;
    b2逻辑伪代码;
}

当然你也可以继续对 a1,a2,a3,b1,b2 等小逻辑映射为小方法,以上提到几种写法都是正确的。下面我们来看看不正确的写法。

4. 不正确的代码实现

当你看到下面的不正确的写法的时候,你也许会觉得不可思议,真的会写出这样的代码?现实是:项目中我见到很多更糟糕的代码,会把下面提到的问题,以及其他编程技艺的问题排列组合出现。

4.1 第一种问题:不对等

第一种常见的问题不太严重,只对部分逻辑进行了抽取,造成方法中执行不对等;比如只对 b() 逻辑进行了抽取,但对等的 a()逻辑并未抽取;

image-20240130092122725

void doSomething(){
   a1逻辑伪代码.....;
   a2逻辑伪代码.....;
   a3逻辑伪代码.....;
   doB();
}

void doB(){
   b1逻辑伪代码;
   b2逻辑伪代码;
}

改进办法参考上面第 3 部分正确的写法,至少可以在doB();之前加空行,并对 a1,a2,a3 加个注释,也会易读很多(当然这是一种妥协写法)。

void doSomething(){
//a逻辑
    a1逻辑伪代码.....;
    a2逻辑伪代码.....;
    a3逻辑伪代码.....;
    
    //b逻辑
    doB();
}

void doB(){
    b1逻辑伪代码;
    b2逻辑伪代码;
}
4.2 第二种问题:部分抽取

第二种是对整体的部分逻辑进行了抽取,这种方法很难命名,会给个词不达意的名字,或使用整体的名字,这个就相对严重了,已经影响到了代码阅读和理解。

比如电脑是一个整体,可以命名是电脑;如果只给你一部分(CPU,主板,显卡)怎么命名让人能明白?电脑部分零件?但电脑部分零件并不能让人明白,因为它不是一个逻辑主体。CPU 是一个逻辑主体,封装了运算。

如下图,只对 a1,a2 进行了抽取,然后名字依然称为 a,看到代码会很疑惑,a3 明显也属于 a。

image-20240130092201959

void doSomething(){
    doA();
    a3逻辑伪代码.....;
    doB();
}

void doA(){
    a1逻辑伪代码.....;
    a2逻辑伪代码.....;
}

void doB(){
    b1逻辑伪代码;
    b2逻辑伪代码;
}
4.3 第三种问题:抽取错误

第三种是最严重的问题,抽取错误,和逻辑不匹配。

如下:把 A 的部分逻辑和 B 的部分逻辑一起抽取。

如果在这个基础上再对抽取的部分起个晦涩的名字(其实这种抽取也起不到好名字),然后应用一些设计模式来把代码更分散(缺点隐藏起来),就成功的完成了只有自己可以看懂的代码(可能表面看起来还很高大上)。

image-20240130092233447

由此得出结论,先别想着抽取小方法或应用设计模式。先能平铺直叙的写出符合逻辑的代码吧。

小方法抽取和设计模式不一定能解决问题,也能隐藏问题。

很多难以读懂的代码都是受《重构》和《设计模式》的包装,质量差的代码不可怕,如果再抽取和包装,可以想想是多恐怖。

5. 补丁和模式思考

补丁代码思考,代码的腐烂

很多人看到这里,会觉得自己绝对不会写出这么烂的代码;确实一开始也许不会,但伴随新需求,不同人不断打补丁(为了不影响线上,老代码不让动),最后就会演进为这几个问题综合展现的代码。阅读这样的代码不看到最底层代码,根本不知道代码在做什么,因为方法名已经不可信。

不要急于使用设计模式,写好基础代码

写出一个好的基础代码的过程:

先梳理清楚逻辑树(树形结构,同层对等),然后做到代码符合逻辑树(代码树自然也符合树形结构,同层的方法对等)。

打好基础后,可以再针对基础代码的痛点,应用复杂手段(比如设计模式)来解决。

标签:逻辑,养成,代码,程序员,小白,.....,抽取,void,a2
From: https://www.cnblogs.com/binbingg/p/17995804

相关文章

  • 2024.1.18《程序员的修炼之道:从小工到专家》阅读笔记1
    《程序员的修炼之道:从小工到专家》是一本经典的计算机编程领域的书籍,由AndrewHunt和DavidThomas合著。这本书以富有启发性的方式,向读者展示了成为一名优秀程序员的道路。本书以通俗易懂的语言,深入浅出地解释了编程领域的一些基本概念和原则。作者通过生动的案例和具体的实践经验......
  • 2024.1.22《程序员的修炼之道:从小工到专家》阅读笔记2
    《程序员的修炼之道:从小工到专家》强调了“软件工匠”的概念,即通过不断的学习和实践,不断提升自己的技能和素养,最终成为一名优秀的程序员。作者提出了“不断学习、不断改进”的观念,鼓励读者在编程之路上不断追求卓越。这让我深受鼓舞,也让我意识到编程领域是一个永无止境的学习之路,......
  • 小白都会的幻兽帕鲁服务器搭建教程(详细图文)
    简介:由于幻兽帕鲁游戏的火爆,导致其官方服务器频现游戏卡顿掉线,为了能够正常流畅的体验幻兽帕鲁,有不少人都搭建了幻兽帕鲁服务器(私服),网上虽然也有很多幻兽帕鲁服务器搭建教程,但内容专业性有点高,比较适合有技术基础的玩家,对于小白或者第一次搭建游戏私服的用户而言,理解起来还是......
  • 程序员 | 开发必备12个高效AI编程助手神器
    ⛳前言根据StackOverflow公布的开发者问卷调查报告,70%的受访者今年已在使用AI工具编程。AI浪潮下在程序员领域,未来,一定不是AI取代你,而掌握AI的人将取代你,这里整理12个高效AI助手,建议大家收藏使用~......
  • <<程序员修炼之道:从小工到专家>>读后感
    《程序员修炼之道:从小工到专家》是一本深刻揭示编程世界本质的著作。在阅读后,我深感这不仅仅是一本关于编程技术的书籍,更是一本关于职业发展、软件设计和人生态度的指南。首先,书中强调的代码质量和可读性给我留下深刻印象。作者强调写出高质量、易读懂的代码是每位程序员的责任。......
  • 牛客小白月赛86
    B水平考试======等价于两个集合\(S,T\)判断\(S\)中是否存在\(T\)中所不包含的元素。若存在则输出0;否则输出10。时间复杂度:\(O(T)\)C题:区间查询当前区间可以被分为多少段,要求每段只有一种数字。做法1:提前对所有段编号,查询时直接左右边界编号相减,注意边界需要特......
  • 《程序是怎样跑起来的》第1章 对程序员来说CPU是什么?
    CPU是什么,CPU是指(CentralProcessingUnit)中文名称为中央处理器,正如同它的名字一样,它是整个计算机的核心,是计算机的灵魂所在;它对于计算机如同大脑对于人类。任何计算机发出的指令都要经过CPU。所以对程序员来说CPU是秘书,是管家,是力量,是武器,是枪里面的子弹。从功能上来看CPU的内部......
  • 对程序员来说CPU是什么
    第一章中,作者以问问题开始,为我们详细解释了什么是CPU。对于许多人来说,CPU可能是相对抽象的,但在第一章中,作者将其拆解开来,让我们看到了其真正的运作机制。这其中,这本书也成为了我们了解CPU的重要工具。作者深入讲解CPU的核心部分,在这一部分中,作者详细地解释了CPU是如何被编译和......
  • 对程序员来说CPU是什么
    只有一行的有用程序是很少见的,机械语言也是如此。当执行的指令占据多个内存地址时,就会增加与指令长度相应的数值,然后,CPU的控制器就会参照程序计数器的数值,从内存中读取命令并执行。也就是说,程序计数器决定着程序的流程。程序分为顺序执行、条件分支和循环三种。顺序执行是指按照......
  • 《程序是怎样跑起来的》第一章“对程序员来说CPU是什么”
    第一章中,作者以问问题开始,为我们详细解释了什么是CPU。对于许多人来说,CPU可能是相对抽象的,但在第一章中,作者将其拆解开来,让我们看到了其真正的运作机制。这其中,这本书也成为了我们了解CPU的重要工具。作者深入讲解CPU的核心部分,在这一部分中,作者详细地解释了CPU是如何被编译和......