代码之丑
文章平均质量分 86
夢想家吖
唯有自强不息,才有日后无限可能
展开
-
《代码之丑》学习笔记18——写代码是一件可以一生精进的事
在很多人心目中,程序员是一个辛苦的职业,一方面,各种新东西层出不穷,程序员们要努力追随,另一方面,业务飞速发展,我们唯有积极应对。那么,是什么支撑你在这个富有挑战的行业里坚持前行呢?于我而言,这个问题的答案是,热爱。在我的心目中,编程是一项有趣的智力活动,从最初解决一个特定的小问题,到现在创造一个方案去解决一个系统的问题,无不需要费尽心力去探寻一个好的解决方案。时至今日,即便我写程序已经二十多年了,但每次程序运行通过时,我心里依然还是有一些小激动,因为支撑程序运行的每行代码里都有自己的思考在里面。原创 2024-02-04 17:57:09 · 797 阅读 · 0 评论 -
《代码之丑》学习笔记17——发现“你”代码里的坏味道
使用缩写;用 I 表示接口,用 Impl 表示实现;使用 static 函数或变量;使用 singleton 模式;写得潦草的 README。你在写代码时也要注意这些问题。我还借着 static 函数的调整过程,给你演示了如何一步一步地重构代码,保证代码的安全。希望你能够理解,重构不是大开大合的过程,而就是这样细小而微的操作。尽量不使用 static。原创 2024-01-30 21:24:57 · 822 阅读 · 0 评论 -
《代码之丑》学习笔记16——什么代码应该被重构?
Kent Beck 在前言里说“这是一本关于‘如何编写别人能懂的代码’的书”,尽管他还谦虚地说这本书“不是模式书籍”,但实际上《实现模式》充分地展现了“模式”的本意:它提供了一整套“用代码表述意图”的模式语言,这套语言能让程序员在最短的时间内学会如何写出具有表现力的代码,并且自然而然地远离坏味道。例如“高内聚低耦合”,尽管这是所有人都赞同的设计原则,但究竟什么样的代码呈现了“低内聚”、什么样的代码呈现了“高耦合” 、“低内聚”与“高耦合”是否总是同时出现、应该以何种办法提高内聚降低耦合……原创 2024-01-30 09:29:42 · 974 阅读 · 0 评论 -
《代码之丑》学习笔记15——新需求破坏了代码,怎么办?
增加新接口;改动实体。接口和实体,其实也是一个系统对外界产生影响的重要部分,一个是对客户端提供能力,一个是产生持久化信息。所以,我们必须谨慎地思考它们的变动,它们也是坏味道产生的高发地带。对于接口,我们对外提供得越少越好,而对于实体,我们必须仔细分析它们扮演的角色。谨慎地对待接口和实体的变动。原创 2024-01-23 20:22:37 · 838 阅读 · 0 评论 -
《代码之丑》学习笔记13——落后的代码风格:使用“新”的语言特性和程序库升级你的代码
落后的代码风格:使用“新”的语言特性和程序库升级你的代码原创 2024-01-19 10:31:58 · 863 阅读 · 0 评论 -
《代码之丑》学习笔记12——不一致的代码:为什么你的代码总被吐槽难懂?
为什么你的代码总被吐槽难懂?原创 2024-01-17 19:40:02 · 901 阅读 · 0 评论 -
《代码之丑》学习笔记11——依赖混乱:你可能还没发现问题,代码就已经无法挽救了
依赖混乱:你可能还没发现问题,代码就已经无法挽救了原创 2024-01-15 11:16:47 · 1000 阅读 · 0 评论 -
《代码之丑》学习笔记10——变量声明与赋值分离:普通的变量声明,怎么也有坏味道?
10 | 变量声明与赋值分离:普通的变量声明,怎么也有坏味道?诚然,变量声明是写程序不可或缺的一部分,我并不打算让你戒掉变量声明,严格地说,我们是要把变量初始化这件事做好。1. 变量的初始化我们先来看一段代码:EpubStatus status = null;CreateEpubResponse response = createEpub(request);if (response.getCode() == 201) { status = EpubStatus.CREATED;} else原创 2022-05-13 11:38:15 · 269 阅读 · 0 评论 -
《代码之丑》学习笔记09——可变的数据:不要让你的代码“失控”
09 | 可变的数据:不要让你的代码“失控”对于程序,最朴素的一种认知是“程序 = 数据结构 + 算法”,所以,数据几乎是软件开发最核心的一个组成部分。在一些人的认知中,所谓做软件,就是一系列的 CRUD 操作,也就是对数据进行增删改查。再具体一点,写代码就把各种数据拿来,然后改来改去。我们学习编程时,首先学会的,也是给变量赋值,写出类似 a = b + 1之类的代码。改数据,几乎已经成了很多程序员写代码的标准做法。然而,这种做法也带来了很多的问题。这一讲,我们还是从一段问题代码开始。1.满天飞的 S原创 2022-05-11 22:56:59 · 259 阅读 · 0 评论 -
《代码之丑》学习笔记08——缺乏封装:如何应对火车代码和基本类型偏执问题?
08 | 缺乏封装:如何应对火车代码和基本类型偏执问题?在程序设计中,一个重要的观念就是封装,将零散的代码封装成一个又一个可复用的模块。任何一个程序员都会认同封装的价值,但是,具体到写代码时,每个人对于封装的理解程度却天差地别,造成的结果就是:写代码的人认为自己提供了封装,但实际上,我们还是看到许多的代码散落在那里。1.火车残骸String name = book.getAuthor().getName();这段代码表达的是“获得一部作品作者的名字”。作品里有作者信息,想要获得作者的名字,通过“作原创 2022-05-10 12:39:05 · 272 阅读 · 0 评论 -
《代码之丑》学习笔记07——滥用控制语句:出现控制结构,多半是错误的提示
07 | 滥用控制语句:出现控制结构,多半是错误的提示这个坏味道就是滥用控制语句,也就是你熟悉的 if、for 等等,这个坏味道非常典型,但很多人每天都用它们,却对问题毫无感知。今天我们就先从一个你容易接受的坏味道开始,说一说使用控制语句时,问题到底出在哪。1.嵌套的代码考虑到篇幅,我就不用这么震撼的代码做案例了,我们还是从规模小一点的代码开始讨论:public void distributeEpubs(final long bookId) { List<Epub> epubs =原创 2022-05-07 22:40:01 · 263 阅读 · 0 评论 -
《代码之丑》学习笔记06——长参数列表:如何处理不同类型的长参数?
06 | 长参数列表:如何处理不同类型的长参数?从程序设计语言发展的过程中,我们也可以看到,取消全局变量已经成为了大势所趋。但函数之间还是要传递信息的,既然不能用全局变量,参数就成了最好的选择,于是乎,只要你想到有什么信息要传给一个函数,就自然而然地把它加到参数列表中,参数列表也就越来越长了。1.聚沙成塔public void createBook(final String title, final String introduction,原创 2022-05-04 13:47:02 · 450 阅读 · 0 评论 -
《代码之丑》学习笔记05——大类:如何避免写出难以理解的大类?
05——大类:如何避免写出难以理解的大类?一听到大类,估计你的眼前已经浮现出一片无边无际的代码了。类之所以成为了大类,一种表现形式就是我们上节课讲到的长函数,一个类只要有几个长函数,那它就肯定是一眼望不到边了。大类还有一种表现形式,类里面有特别多的字段和函数,也许,每个函数都不大,但架不住数量众多啊,这也足以让这个类在大类中占有一席之地。这一讲,我们就主要来说说这种形式的大类。1.分模块的程序为什么不把所有的代码都写到一个文件里?事实是,把代码写到一个文件里,一方面,相同的功能模块没有办法复用;原创 2022-04-27 00:30:48 · 298 阅读 · 0 评论 -
《代码之丑》学习笔记04——长函数:为什么你总是不可避免地写出长函数?
04 | 长函数:为什么你总是不可避免地写出长函数?原创 2022-04-25 22:39:44 · 704 阅读 · 0 评论 -
《代码之丑》学习笔记03—— 重复代码:简单需求到处修改,怎么办?
03 | 重复代码:简单需求到处修改,怎么办?1.不要直接复制粘贴复制粘贴是最容易产生重复代码的地方,所以,一个最直白的建议就是,不要使用复制粘贴。真正应该做的是,先提取出函数,然后,在需要的地方调用这个函数。2.重复的结构先看以下代码@Taskpublic void sendBook() { try { this.service.sendBook(); } catch (Throwable t) { this.notification.send(new SendFa原创 2022-04-23 17:44:01 · 246 阅读 · 0 评论 -
《代码之丑》学习笔记02—— 乱用英语
最近在学习 郑晔 在极客时间上的一个专栏《代码之丑》,并根据自身情况整理了一份笔记02 | 乱用英语:站在中国人的视角来看英文命名现在主流的程序设计语言都是以英语为基础的,且不说欧美人设计的各种语言,就连日本人设计的 Ruby、巴西人设计的Lua,各种语法采用的也全都是英语。所以,想要成为一个优秀的程序员,会用英语写代码是必要的。这里并不是说,程序员的英语一定要多好,但最低限度的要求是写出来的代码要像是在用英语表达。1.违反语法规则的命名一般来说,常见的命名规则是:类名是一个名词,表示一个对象原创 2022-04-23 16:42:28 · 1441 阅读 · 0 评论 -
《代码之丑》学习笔记01——如何精准命名?
最近在学习 郑晔 在极客时间上的一个专栏《代码之丑》,并根据自身情况整理了一份笔记01 | 缺乏业务含义的命名:如何精准命名?例如这样一段代码:public void processChapter(long chapterId) { Chapter chapter = this.repository.findByChapterId(chapterId); if (chapter == null) { throw new IllegalArgumentException("Unknown原创 2022-04-23 15:45:03 · 1746 阅读 · 0 评论