思考:如何写出让同事难以维护的代码?

本文从【程序命名&注释】【数据类型&类&对象】【控制执行流程】和【程序/结构设计】四个方面梳理了一些真实案例,相信通过这些案例你能迅速get技能:如何写出让同事难以维护的代码doge。

比起什么程序员删库跑路,我更喜欢「写出让同事难以维护的代码」,因为即使不能「名垂千古」,至少VCS可以帮你「遗臭万年」。

本文从【程序命名&注释】【数据类型&类&对象】【控制执行流程】和【程序/结构设计】四个方面梳理了一些真实案例,相信通过这些案例你能迅速get技能:如何写出让同事难以维护的代码doge。

说回正题,前几天在家附近的一个小学校旁边散步,突然听到某个学生说“上学期我是‘三好学生’,xxxx”。想了想,学生有“三好”,那么程序员“三好”是什么?我认为程序员的“三好”是「好用」,「好看」,「好改」。这个是说程序员的代码:

  • 要正确且健壮,就是好用;
  • 要可读性高,易于理解,就是好看;
  • 要方便扩展和改动,就是好改;

平时不少文章都在聊“三好”的正例,今天理一些「好看」的反例,希望给读者一些启发和印象,避免编码中的一些问题,争取做个“三好程序员”吧。

一、程序命名&注释

1.1教你如何挑战维护者

容易输入的变量名

比如:Fred,asdf单字母的变量名。比如:a,b,c,x,y,z(如果不够用,可以考虑 a1,a2,a3,a4,….)

有创意地拼写错误

比如:SetPintleOpeningSetPintalClosing,这样可以让人很难搜索代码。

使用缩写和拼音

比如:WTF,RTFSC …… (使用拼音缩写也同样给力,比如:BT,TMD,TJJTDS)

论注释的重要性:不然我以为是「驾校」是一类重要客户,要有单独的helper

1.2嵌入式文档之殇=注释

不要盲目修改,注意理解!!!

注意理解,你会发现其中的不同点……

「注意理解」之后,意外出现了……

程序回忆录

long~ long ago~【狼,狼,啊狗】🐶

千万注意something

实在不知道注意什么……

用注释保留一些秘密

二、数据类型&类&对象

2.1教教你怎么用数组

无所不能的多维数组

如果你觉得二维、三维还不足够,你可以试试四维。

仔细品一品,这个排版和换行可以教你快速数下标的方法:行号-44,比如“常驻工作城市”的下标就是25。

想清楚下标了再调用

一切皆对象,数组也是对象,用就是了

2.2对象?"类"觉不爱

员工服务的四胞胎:俩哥哥service,俩妹妹helper;

——「木兰辞」:"四"兔傍地走,安能辨我是雌雄雄雌;



三、控制执行流程

3.1开胃菜:if-else

巨大的processor。写一个 processor,然后让你的所有的 consumer 类都使用这个 processor,这样你可以在这个 consumer 中整出一大堆 if…else… 语句,相当的刺激。



当return和不return混杂在一起的时候,这份刺激中又多了些惊喜……



3.2大菜:「海鲜拼盘」

下面这个600行的方法让我学会了「截长图」

🐶这是个switch-for-if-continue-return组合,很能理解「作者实在没法把break和goto加进去」的苦衷。

——报告老师:“第四章我已经掌握了”

接下来见证遗迹的时刻……

建议:多来来回回的读读这段代码,有助于锻炼眼球灵活性,并且能有效抵抗颈椎病

看一遍,想一下,case 0的时候返回啥?😏脖子有没有舒服点儿?

四、程序/结构设计

认知升级

GrayService是个灰度服务,corpId是企业ID,那么通过一次灰度放量,在脑壳里执行一下程序,就可以完成认知升级。

image.png

CV工程师佳作

克隆和拷贝。为了效率,你要学会使用 copy + past,你几乎都不用理解别人的代码,你就可以高效地编程了。

包装,包装,再包装

把你所有的 API 都包装上 6 到 8 遍,包装深度多达 4层以上,以便找到足够多相似的东西。

业务是否复杂,这不重要;重要的是1,2行代码的封装也是要的,不包个8层封装,怎么能说明理解分层了呢?

还好我一屏就可以看完整个链路🐶

想必是个核心类

再多引用几个类,我还能干更多事!请大声唱:我真的还想再包500类——《康熙王朝》。

羊大为美

中国人喜欢大,都是“越大越好”,大房子,大车子;而现代中国人总把‘大”放在高位,把‘大”作为对于一个事物最高的评价。像大人,大神,大圣,大仙,大中国,和别人介绍起自己的家乡都会加上“大”字作前缀。所以,从古至今,大始终贯穿着人们对于美好事物的遐想。

我想说还有大类,大方法:

不要过早的return或continue,要「V型」

V型激起我写代码的欲望。

跟左边的深V相比,右边的就太差了,行数竟然变多了。

一张图,一颗心,一场仗 + 一张网

一张网就是「码网」。渔网是打鱼的,码网是打码农。

上图「包Cyclic」:Calculates the number of packages which each package directly or indirectly depends on, and which in turn directly or indirectly depend on it.

下图「类Cyclic」:Calculates the number of classes or interfaces which each class directly or indirectly depends on, and which in turn directly or indirectly depend on it.

Note:Such cyclic dependencies may result in code which is difficult to understand and test.

翻译:能看看,不能看拉倒

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/484941.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的电影评论网站(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

OPPO公布全新AI战略;苹果iPad新品细节曝光;周鸿祎称Sora工作原理像人做梦

OPPO 公布全新 AI 战略,AI 手机时代再提速 昨日,OPPO 举办 AI 战略发布会,分享新一代 AI 手机的四大能力特征: AI 手机首先要能够高效地利用计算资源,以满足 AI 时代下生成式 AI 的计算需要;AI 手机要能敏…

SwiftUI 集合视图(Grid)拖放交换 Cell 的极简实现

概览 自从 SwiftUI 横空出世那天起,小伙伴们都感受到了它惊人的简单与便捷。而在本课中,我们将会用一个小“栗子”更直观的让大家体验到它无与伦比简洁的描述性特质: 如上图所示,我们在 SwiftUI 中实现了 Grid 中拖放交换 Cell 的…

IIC通信驱动EEPROM,AT24C02硬件存储器编程(2)

接着上一篇博客文章讲解了IIC协议的原理及编程思路,本篇博客文章将以IIC为基础,从芯片手册入手,梳理讲解如何对AT24C02进行驱动编程,实现数据的读写操作。IIC通信驱动硬件编程 (1)-CSDN博客https://blog.csdn.net/weixin_49337111…

06 内存管理

目录 c/c内存分布c语言中动态内存管理方式c中动态内存管理方式operator new与operator delete函数new和delete的实现原理定位new表达式(placement-new)常见题 1. c/c内存分布 看一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticV…

FSQ: FINITE SCALAR QUANTIZATION: VQ-VAE MADE SIMPLE

Paper name FINITE SCALAR QUANTIZATION: VQ-VAE MADE SIMPLE Paper Reading Note Paper URL: https://arxiv.org/abs/2309.15505 Code URL: (官方 jax 实现) https://github.com/google-research/google-research/tree/master/fsq(pytorch 实现) https://github.com/luci…

教你用Appium搭建Android自动化测试框架(详细教程)

如题,本文附有仓库地址以及代码,目录如下: 1.下载安装appium 2.配置并使用appium 3.配置工程 一、下载安装appium 下载appium-desktop的mac版本,我选择用1.17.1版本,最新的版本1.22.0,拆分一个桌面应用…

2.22作业

作业要求&#xff1a; 程序代码&#xff1a; #include<myhead.h>int num 520; pthread_mutex_t mutex;void* task1(void* arg) {pthread_mutex_lock(&mutex);num 1314;sleep(3);printf("task1:num %d\n", num);pthread_mutex_unlock(&mutex); }voi…

医药之链:基于Django的智能药品管理系统

框架 Python 3.7 django 3.2.13 Bootstrap&#xff08;前端&#xff09; sqlite&#xff08;数据库&#xff09;导包 pip install django3.2.13 pip install pandas pip install xlwt环境搭建 登录 zfx 123456

iOS 不用VOIP也可以实现微信来电邀请推送持续响铃震动及及时来电取消

iOS 不用VOIP也可以实现微信来电邀请推送持续响铃震动及及时来电取消 前言一 、关于NotificationServiceExtension1. 创建2. 推送机制3. API 实例方法二、 APNS Push Payload2. 来电邀请2. 来电取消三、数据共享3. 配置共享域四 知识点就到这里,下面是主要代码4. 1 Notificati…

C++ 八数码问题理解 `IDA*` 算法原则:及时止损,缘尽即散

1.前言 八数码是典型的状态搜索案例。如字符串转换问题、密码锁问题都是状态搜索问题。 状态搜索问题指由一种状态转换到到最终状态&#xff0c;求解中间需要经过多少步转换&#xff0c;或者说最小需要转换多少步&#xff0c;或者说有多少种转换方案。本文和大家聊聊八数码问…

如何在Shopify 创建Mega Menu

在Shopify上创建Mega Menu可以通过以下步骤完成&#xff1a; 1. 选择适合的主题 首先&#xff0c;选择一个适合的主题&#xff0c;因为不是所有的Shopify主题都支持Mega Menu。确保选择一个具有自定义菜单功能的主题&#xff0c;或者您可以使用Shopify App Store中的应用程序来…