首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自己写过比较蠢的代码:从失败中学习的经验

自己写过比较蠢的代码:从失败中学习的经验

作者头像
IT_陈寒
发布于 2023-12-13 11:34:54
发布于 2023-12-13 11:34:54
19900
代码可运行
举报
文章被收录于专栏:开发经验开发经验
运行总次数:0
代码可运行
文章目录

    • 引言
    • 1. 代码没有注释
    • 2. 长函数和复杂逻辑
    • 3. 不恰当的变量名
    • 4. 重复的代码
    • 5. 不适当的异常处理
    • 6. 硬编码的敏感信息
    • 7. 没有单元测试
    • 结论

🎉 自己写过比较蠢的代码:从失败中学习的经验



引言

每个程序员都有自己的代码库,里面充满了各种各样的代码:有些是优雅的、高效的,而有些则可能令人尴尬和低效。在编写软件的过程中,我们都曾经写过令人不满意的代码。本文将分享一些自己写过的比较蠢的代码,以及从中学到的宝贵经验。通过这些失败的案例,我们可以更好地理解如何编写更好的代码。

1. 代码没有注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 函数功能:实现某种操作
def func():
    # 以下代码实现某种操作
    ...

这段代码实际上并没有提供任何有用的信息。没有注释,别人无法理解这个函数的目的和如何使用它。

经验教训:良好的注释是代码的一部分,它们可以提高代码的可读性和可维护性。编写清晰的注释,以解释代码的目的、输入和输出。

如何避免:编写有意义的注释,包括函数的用途、参数的含义以及返回值的描述。这样,其他开发人员可以更容易地理解和使用你的代码。

2. 长函数和复杂逻辑

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void doSomething() {
    // 大约数百行的代码
    ...
}

这个函数包含了大量的代码,难以理解和维护。

经验教训:拆分长函数为小的、可重用的函数,每个函数执行一个特定的任务。这有助于提高代码的可读性和维护性。

如何避免:将长函数拆分为多个小函数,每个小函数执行一个特定的子任务。这不仅使代码更易于理解,还使单元测试更容易编写。

3. 不恰当的变量名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let a = 10;
let b = 20;
let c = a + b;

使用像abc这样的变量名不是一个好习惯。它们不提供任何有关变量用途的信息。

经验教训:使用有意义的变量名,可以让你的代码更易于理解。例如,使用total代替c

如何避免:选择描述性的变量名,以反映变量的用途和含义。这有助于提高代码的可读性。

4. 重复的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def calculate_area_of_circle(radius):
    return 3.14 * radius * radius

def calculate_area_of_sphere(radius):
    return 4 * 3.14 * radius * radius

def calculate_volume_of_sphere(radius):
    return (4/3) * 3.14 * radius * radius * radius

这里有很多重复的代码,每个函数都包含了相似的计算。

经验教训:使用函数来避免重复代码。在这种情况下,你可以创建一个单独的函数来计算圆柱体的表面积和体积,然后在需要时调用它。

如何避免:查找和标记代码中的重复部分,然后将它们提取到单独的函数或方法中。这不仅减少了代码的冗余,还使维护更容易。

5. 不适当的异常处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try {
    // 可能引发异常的代码
    ...
} catch (Exception e) {
    // 空的异常处理块
}

这种情况下,异常被捕获,但什么也不做,这可能会导致潜在的错误被忽略。

经验教训:在捕获异常时,要确保适当地处理它们。这可能包括记录错误、回滚操作或者向用户报告问题。

如何避免:在捕获异常时,考虑如何处理异常情况。根据异常的类型,采取适当的行动,而不是简单地忽略它们。

6. 硬编码的敏感信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db_connection = pymysql.connect(
    host='localhost',
    user='root',
    password='password',
    database='mydb'
)

将敏感信息(如数据库密码)硬编码在代码中是不安全的。

经验教训:使用配置文件或环境变量来存储敏感信息,并从中读取。这有助于提高安全性,并简化了配置管理。

如何避免:将敏感信息存储在安全的位置,例如环境变量、配置文件或密钥管理服务中。不要在代码中直接硬编码这些信息。

7. 没有单元测试

没有单元测试的代码可能会导致难以调试和维护的问题。

经验教训:编写单元测试来验证代码的功能。这可以帮助你捕获潜在的问题,并确保代码在不断变化的环境中仍然正常工作。

如何避免:在编写代码的同时,编写相应的单元测试。这样可以确保代码的正确性,并及早捕获问题。

结论

自己写过的蠢代码是每个程序员成长的一部分。关键在于从失败中学习,并不断改进自己的编码技能。通过识别和纠正这些常见的错误,你可以编写更干净、更可维护的代码,提高自己的开发水平。记住,编码是一个不断学习和改进的过程。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Android Service用法知识点的讲解
android service 的基础知识,生命周期,service分类,运行地点(本地服务,远程服务),运行类型(前台服务,后台服务),功能(可通信与不可通信)。service和Thread的区别。
达达前端
2019/07/03
7490
Android Service用法知识点的讲解
Service中bindService
最近有用到Activity需要不断的从Service中获取数据,第一个想法肯定就是通过bind回调机制了,有几点概念模糊特此记录下:
全栈程序员站长
2022/06/28
4260
Service中bindService
Android:Service生命周期最全面解析
---- 前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍Service最基础的知识:Service的生命周期 如果你对Service还未了解,建议先阅读我写的文章:
Carson.Ho
2019/02/22
6.5K0
Android之Service学习笔记
本来想学习学习Binder通信机制,在学习的过程中又接触AIDL并开始学习,在AIDL学习过程中看到bindService,接着就想回顾一下Service的一些知识。希望温故可以知新,也算是年末最后一篇笔记,给自己明年有一个好的开头!!
静默加载
2020/05/31
8840
[划重点] Service 知识要点
来总结一下 Service 的几个知识要点,包括启动方式、每种启动方式的生命周期、IntentService 源码分析,以及 boundService 三种使用方法。
haifeiWu
2020/02/10
7790
【Android从零单排系列三十七】《Android四大组件——Service》
小伙伴们,在上文中我们介绍了Android组件Fragment,本文我们继续盘点介绍Android开发中另一个非常重要的组件Service。
再见孙悟空_
2023/07/17
4170
Android学习笔记(八)深入分析Service启动、绑定过程
codingblock
2017/12/29
1.1K0
Android学习笔记(八)深入分析Service启动、绑定过程
android service原理及免杀(1)
service服务是一个应用程序的四大组件之一,可以在后台执行长时间运行的操作,不提供用户界面。一个应用程序组件可以启动一个服务,它将继续在后台运行,即使用户切到另一个应用程序。此外,一个组件可以绑定到一个服务与它交互,甚至执行进程间的通信(IPC)
随心助手
2019/11/19
9730
Service介绍
使用 start 方式启动的生命周期:onCreate() – > onStartCommand() – > onDestory() 注意: 如果服务已经开启,不会重复回调 onCreate() 方法,如果再次调用 context.startService() 方法,service 而是会调用onStart() 或者 onStartCommand() 方法。停止服务需要调用 context.stopService() 方法,服务停止的时候回调 onDestory 被销毁。 特点: 一旦服务开启就跟调用者(开启者)没有任何关系了。开启者退出了,开启者挂了,服务还在后台长期的运行,开启者不能调用服务里面的方法。
是阿超
2022/11/16
8760
Android中BindService和StartService「建议收藏」
service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互、它必须由用户或者其他程序显式的启动、它的优先级比较高,它比处于 前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小哦。 二、那么,什么时候,我们需要使用service呢? 我们知道,service是运行在后台的应用,对于用户来说失去了被关注的焦点。这就跟我们打开了音乐播放之后,便想去看看图片,这时候我们还不想音乐停止,这里就会用到service;又例如,我们打开了一个下载链接之后,我们肯定不想瞪着眼睛等他下载完再去做别的事情,对吧?这时候如果我们想手机一边在后台下载,一边可以让我去看看新闻啥的,就要用到service。 三、service分类: 一般我们认为service分为两类,本地service和远程service。 本地service顾名思义,那就是和当前应用在同一个进程中的service,彼此之间拥有共同的内存区域,所以对于某些数据的共享特别的方便和简单; 远程service:主要牵扯到不同进程间的service访问。因为android的系统安全的原因导致了我们在不同的进程间无法使用一般的方式共享数据。在这里android为我们提供了一个AIDL工具。(android interface description language)android接口描述语言。在后边我们将会对其进行详细的介绍。 四、service生命周期: 和Activity相比,service的生命周期已经简单的不能再简单了,只有onCreate()->onStart()->onDestroy()三个方法。 Activity中和service有关的方法: startService(Intent intent):启动一个service stopService(Intent intent) :停止一个service 如果我们想使用service中的一些数据或者访问其中的一些方法,那么我们就要通过下面的方法: public boolean bindService(Intent intent, ServiceConnection conn, int flags) ; public void unbindService(ServiceConnection conn); intent是跳转到service的intent,如 Intent intent = new Intent(); intent.setClass(this,MyService.class); conn则是一个代表与service连接状态的类,当我们连接service成功或失败时,会主动触发其内部的onServiceConnected或onServiceDisconnected方法。如果我们想要访问service中的数据,可以在onServiceConnected()方法中进行实现,
全栈程序员站长
2022/08/30
1.6K0
Android中BindService和StartService「建议收藏」
Android 四大组件学习之Service四
本节学习Service的生命周期。 既然Activity有生命周期,那同理Service也有自己的生命周期。
DragonKingZhu
2022/05/08
2860
Android 四大组件学习之Service四
Android四大组件之Service
Hi,大家好,上一期我们讲了如何使用BroadcastReceiver,这一期我们讲解Android四大组件之Service相关知识。每天一篇技术干货,每天我们一起进步。
下码看花
2019/09/02
9630
Android四大组件之Service
Service基础
Service是Android四大组件之一,主要两个目的: 后台运行和跨进程访问。
小小工匠
2021/08/16
2.1K0
android service详解(1)
(2)Service是可以在后台执行长时间运行操作而没有用户界面的应用组件。服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即使启动服务的组件(Activity)已销毁也不受影响,除非系统必须回收内存资源,否则系统不会停止或销毁Service。
随心助手
2019/10/15
1.5K0
android service详解(1)
startService bindService 区别「建议收藏」
Android执行Service有两种方法,一种是startService,一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。
全栈程序员站长
2022/09/01
6070
startService bindService 区别「建议收藏」
Android:(本地、可通信的、前台、远程)Service使用全面介绍
用法很简单,只需要在原有的Service类对onCreate()方法进行稍微修改即可,如下图:
Carson.Ho
2019/02/22
1.3K0
Android基础总结(8)——服务
服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务。服务的运行不依赖任何用户界面,即使当程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。不过需要注意的是:服务并不是运行在一个独立的进程当中,而是依赖于创建服务的应用程序进程,当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止运行。   此外,我们也不要被服务的后台概念所迷惑,实际上服务并不会自动开启线程,所有的代码都是默认运行在主线程中。也就
mukekeheart
2018/02/27
1.7K0
Android基础总结(8)——服务
Android入门教程 | 四大组件之Service(前台服务,后台服务)
Service是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。
Android_anzi
2021/10/20
6.5K0
2016级移动应用开发在线测试12-service
1. Service是Android系统中的四大组件之一(Acitivty、Service、ContentProvider、BroadcastReceiver),以下关于Service描述错误的是()  
达达前端
2022/04/29
6600
【Android】Service介绍和生命周期
Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件。Service是Android中实现程序后台运行的解决方案,它非常适用于去执行那些不需要和用户交互而且还要求长期运行的任务。
人不走空
2024/07/16
7160
【Android】Service介绍和生命周期
相关推荐
Android Service用法知识点的讲解
更多 >
LV.1
前端开发负责人
目录
  • 文章目录
  • 引言
  • 1. 代码没有注释
  • 2. 长函数和复杂逻辑
  • 3. 不恰当的变量名
  • 4. 重复的代码
  • 5. 不适当的异常处理
  • 6. 硬编码的敏感信息
  • 7. 没有单元测试
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档