当前位置:首页 > 科技  > 软件

快看,我的代码能“自己说话”!

来源: 责编: 时间:2024-06-05 17:41:57 298观看
导读开发人员什么时候最崩溃?别人我不知道,就我而言,要是我耗费了几个小时来研究代码,试图破译它的目的,却迟迟不得门路,真是恨不得找到写代码的那个家伙,让他回炉重造。今天我们将在这篇文章中探讨如何编写自文档化的代码,让代码

开发人员什么时候最崩溃?oY728资讯网——每日最新资讯28at.com

别人我不知道,就我而言,要是我耗费了几个小时来研究代码,试图破译它的目的,却迟迟不得门路,真是恨不得找到写代码的那个家伙,让他回炉重造。oY728资讯网——每日最新资讯28at.com

今天我们将在这篇文章中探讨如何编写自文档化的代码,让代码自己会说话。oY728资讯网——每日最新资讯28at.com

什么是自文档化的代码?

自文档化的代码是以清晰、富有表现力的方式编写的代码,无需大量的注释和外部文档,就能让人理解代码的目的和功能。oY728资讯网——每日最新资讯28at.com

自文档化代码的特点:

  • 可读性:代码易于阅读和理解,一目了然
  • 富有表现力:清楚传达代码的意图和目的
  • 可维护:代码易于修改和更新,不会引入错误和重大更改

自文档化代码的重要性

编写自文档化代码的好处:oY728资讯网——每日最新资讯28at.com

  1. 开发人员可以快速掌握代码的目的和功能,减少理解和使用代码库所需的脑力劳动。
  2. 新的团队成员可以更快地上手,因为他们不需要特别依赖外部文档。
  3. 最大限度地减少团队成员之间的误解,促进对代码库的共同理解。
  4. 即使随着时间的推移,维护和更新也依然方便简单,因为开发人员可以快速理解现有代码并做出明智的更改。

如何编写自文档化的代码

了解了什么样的代码是自文档化的代码之后,敲黑板,我们的重点来了,那么,怎么编写这样可以“自己说话”的代码呢?oY728资讯网——每日最新资讯28at.com

1.使用有意义的名字

使代码自文档化的最有效方法之一是对变量、函数、类和模块使用有意义的名称。oY728资讯网——每日最新资讯28at.com

请看以下示例:oY728资讯网——每日最新资讯28at.com

// Badconst x = 5;const y = 10;const z = x + y;// Goodconst numberOfItems = 5;const itemPrice = 10;const totalCost = numberOfItems * itemPrice;

在Good示例中,变量名称numberOfItems、itemPrice、totalCost清楚地传达了用途,理解起来非常方便。oY728资讯网——每日最新资讯28at.com

2. 编写小而精的函数

编写小而精的函数是自文档化代码的另一个关键。函数应当功能单一,并准确命名以反映其目的。oY728资讯网——每日最新资讯28at.com

例如:oY728资讯网——每日最新资讯28at.com

// Badfunction processData(data: any): any {    // ...    // Lots of complex logic    // ...    return result;}// Goodfunction extractRelevantFields(data: Record<string, any>): Record<string, any> {    // ...    return relevantFields;}function applyBusinessRules(relevantFields: Record<string, any>): Record<string, any> {    // ...    return processedData;}function formatOutput(processedData: Record<string, any>): string {    // ...    return formattedResult;}

通过将大函数分解为名称更具描述性的小而精函数,代码明显更可读了。oY728资讯网——每日最新资讯28at.com

3. 使用描述性的函数名称和方法名称

在命名函数和方法时,使用描述性的名称可以更加清楚地传达其目的和操作。注意:应尽量避免使用通用名称,如handle()或process()这样的写法。oY728资讯网——每日最新资讯28at.com

请看示例:oY728资讯网——每日最新资讯28at.com

// Badfunction handleInput(input: string): void {    // ...}// Goodfunction validateUserCredentials(username: string, password: string): boolean {    // ...}

看到了吗?描述性名称validateUserCredentials清楚地表明了函数的作用。现在,我们哪还需要额外的注释?oY728资讯网——每日最新资讯28at.com

4. 利用 TypeScript 的类型系统

TypeScript 强大的类型系统可以大大增强代码的自文档化。所以要懂得利用工具,借助 TypeScript 的功能,使代码更具表现力,及早发现潜在的错误。oY728资讯网——每日最新资讯28at.com

例如:oY728资讯网——每日最新资讯28at.com

  • 接口和类型:使用接口和自定义类型来定义数据结构的形状。
interface User {    id: number;    name: string;    email: string;}function getUserById(id: number): User | undefined {    // ...}
  • 枚举:利用枚举来表示一组固定的值,提供了一种清晰易读的方式来处理不同的方案。
enum PaymentStatus {    Pending = 'pending',    Completed = 'completed',    Failed = 'failed',}function processPayment(status: PaymentStatus): void {    // ...}
  • 类型推断:尽量使用 TypeScript 推断类型,因为可以精简代码。
// Badconst count: number = 10;const message: string = 'Hello, world!';// Goodconst count = 10;const message = 'Hello, world!';

5. 使用强类型 ID

在 TypeScript 中处理 ID 时,建议使用强类型 ID,不要直接上字符串和数字。强类型 ID 提供了额外的类型安全性。oY728资讯网——每日最新资讯28at.com

实现强类型 ID 的一种方法是使用不透明的类型:oY728资讯网——每日最新资讯28at.com

// user.tsexport type UserId = string & { readonly __brand: unique symbol };export function createUserId(id: string): UserId {    return id as UserId;}// post.tsexport type PostId = string & { readonly __brand: unique symbol };export function createPostId(id: string): PostId {    return id as PostId;}

这里我们使用强类型 ID,确保了UserId只分配给需要UserId的属性和函数,PostId只分配给需要PostId的属性和函数。oY728资讯网——每日最新资讯28at.com

function getUserById(userId: UserId): User | undefined {    // ...}const userId = createUserId('user-123');const postId = createPostId('post-456');getUserById(userId); // No errorgetUserById(postId); // Error: Argument of type 'PostId' is not assignable to parameter of type 'UserId'.

强类型的 ID 有助于在编译时捕获潜在错误,使代码更具表现力和自文档化。oY728资讯网——每日最新资讯28at.com

但是,与使用简单的字符串类型相比,强类型 ID确实会引入一些开销。所以我们需要根据项目的需求和规模权衡利弊。oY728资讯网——每日最新资讯28at.com

6. 增强团队凝聚力

团队工作的时候,建立一致性至关重要,不然你有你的标准,我有我的约定,程序还怎么跑得起来?oY728资讯网——每日最新资讯28at.com

关于一致性,有一个非常重要的方面是命名约定。最好的做法是建立一个风格指南,定义变量、函数、类和其他实体的命名方式。oY728资讯网——每日最新资讯28at.com

例如,可以使用类似这样的术语:oY728资讯网——每日最新资讯28at.com

  • get:检索 API 或数据源中的单个值。
  • list:检索 API 或数据源中的一组值。
  • patch:部分更新现有实体和对象。
  • upsert:更新现有实体,如果不存在,则插入新实体。

统一执行术语可以确保整个代码库的一致性。oY728资讯网——每日最新资讯28at.com

例如:oY728资讯网——每日最新资讯28at.com

function getUser(userId: UserId): Promise<User> {    // ...}function listUsers(): Promise<User[]> {    // ...}function patchUser(userId: UserId, updatedData: Partial<User>): Promise<User> {    // ...}

怎么样,是不是明显更易于大家理解了呢。oY728资讯网——每日最新资讯28at.com

除了命名约定之外,还可以为代码库的其他方面制定准则,例如文件和文件夹结构、注释、错误处理、测试和代码格式等。oY728资讯网——每日最新资讯28at.com

在团队中工作时,我们有时候可能不习惯或者不赞同正在执行的某个约定。但是,重要的是要记住,一致性和协作对于项目的成功至关重要。oY728资讯网——每日最新资讯28at.com

即使你有不同的偏好或编码风格,也应该遵守约定。从而保持一个有凝聚力的代码库,减少混淆。oY728资讯网——每日最新资讯28at.com

7. 复杂场景使用 JSDoc 或 TSDoc

虽然自文档化的代码非常优秀,但是不可否认的是,在某些情况下该上文档就得上文档,例如如果遇到复杂的算法和复杂的业务逻辑,你不写注释,简直就不给后来人活路。oY728资讯网——每日最新资讯28at.com

在这种情况下,可以考虑使用 JSDoc 或 TSDoc 来提供清晰简洁的文档。oY728资讯网——每日最新资讯28at.com

/** * Calculates the Fibonacci number at the given position. * * @param {number} position - The position of the Fibonacci number to calculate. * @returns {number} The Fibonacci number at the specified position. */function fibonacci(position: number): number {    if (position <= 1) {        return position;    }    return fibonacci(position - 1) + fibonacci(position - 2);}

通过 JSDoc 或 TSDoc,我们可以为复杂的代码提供额外的上下文和说明,而不会使代码库变得乱糟糟。oY728资讯网——每日最新资讯28at.com

结论

编写自文档化的代码是每个开发人员都应该努力掌握的一门艺术。oY728资讯网——每日最新资讯28at.com

通过有意义的名称、小而精的函数、 TypeScript 的类型系统以及明智地使用文档,我们可以创建可读的、富有表现力的和可维护的代码。oY728资讯网——每日最新资讯28at.com

自文档化的代码,可以减少对外部文档的依赖,使我们的开发工作更轻松。oY728资讯网——每日最新资讯28at.com

所以,下次写代码的时候,花点时间考虑如何使其更具自文档性。相信我,未来的你自己和队友都会感谢你!听我说,谢谢你,因为有你,温暖了四季。oY728资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-92117-0.html快看,我的代码能“自己说话”!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 被严重低估!React 19 又是一次开发方式的变革,useEffect 将会逐渐退出历史舞台

下一篇: 一个开源且全面的C#算法实战教程

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • iQOO 11S屏幕细节公布:首发三星2K E6全感屏 安卓最好的直屏手机

    日前iQOO手机官方宣布,新一代电竞旗舰iQOO 11S将会在7月4日19:00正式与大家见面。随着发布时间的日益临近,官方关于该机的预热也更加密集,截至目前已
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • iQOO Neo8系列今日官宣:首发天玑9200+ 全球安卓最强芯!

    在昨日举行的的联发科新一代旗舰芯片天玑9200+的发布会上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品将全球首发搭载这款当前性能最强大的移动平台
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top