代码最佳实践和指南(一)

news2024/12/19 12:37:56

创建代码是许多数据专业的重要组成部分。但是,创建可以运行的代码只是工作的一半。代码还需要清晰,易于传递,并且对干扰具有鲁棒性。通过在项目中遵循一些编码准则,您可以保存自己以后重新构造代码的时间,并使您的合作者也感到高兴。

在这里,我们探索一些编码最佳实践和指导方针,可以帮助您的代码更清晰,更易于访问。

代码最佳实践:结构和组织

清晰的结构为代码提供了更好的可读性,使其更容易调试和共享。在编写代码时,您可以做几件事来使结构更加清晰和有组织。

选择有意义的变量和函数名

在为变量和函数选择名称时,重要的是要选择相关且有意义的名称。

例如,假设您正在创建一个程序来处理银行帐户信息,并且您需要一个变量来保存帐号。您可能会尝试将此变量称为“number”或“n”。但是,对于第一次查看您的代码的人来说,这些名称并不是非常有用的名称。名称“account_number”提供了更多的信息,并且在后面的代码中更容易理解。

例如,假设你在一段很长的代码中找到了下面的等式。你能说出这个等式是什么吗?

ab=pb+d-w

这可能是在代码审查期间遇到的一个具有挑战性的等式。考虑这个替代方案。

account_balance=previous_balance+deposit-withdrawal

有了更多信息量的变量名,在一段代码中遵循逻辑就不那么令人沮丧了。同样的概念也适用于函数名。一个名为“name_change”的函数比“change”、“update”或“nc”提供更多的信息。

驼峰命名法和下划线命名

创建变量或函数名有两种普遍接受的约定:驼峰命名和下划线命名。驼峰命名使用大写字母分隔变量名中的单词。下划线命名使用下划线分隔变量中的单词。例如,我们将在驼峰命名中使用变量名“accountNumber”,在下划线命名中使用“account_number”。

使用哪种约定取决于您的个人偏好、公司的编码标准以及您正在使用的编程语言。然而,无论你选择哪种情况,重要的是在整个项目中坚持使用它。在不同的命名约定之间切换看起来很草率,并且可能会造成视觉上的混乱。

有效使用注释和空白

使代码更具可读性的一个简单方法是在整个代码中添加描述性注释。好的注释将确保您的代码可以被其他人解读。你应该添加注释来解释每段代码的作用,特别是任何复杂的方程或函数。您可能还希望向变量定义添加注释,对任何复制的代码给予标记说明,包括对源数据的引用,或者在代码中留下“to do”注释。

当你给自己留下“to do”的时候,考虑一下以“TODO”开始。这种大写将在视觉上脱颖而出,并且很容易搜索,你可以找到你留给自己的所有笔记。

注释是用来使代码更清晰、更易于理解的,而不是用来弥补结构不良的代码。它们应该是清晰、一致,并增强结构良好的代码块。

空白对于可视化地格式化代码也很有用。把空白想象成段落。段落有助于分解大块的文本,这样你就可以快速浏览。类似地,在代码中有策略地添加空白可以更容易地扫描代码以发现错误并跟踪代码的工作。考虑在不同部分或模块之间添加空间。

考虑以下示例:

product_price=materials_cost+manufacturing_cost+shipping_cost
state_tax=product_price*state_tax_rate(state)
federal_tax=product_price*federal_tax_rate
total_tax=state_tax+federal_tax
total_cost=product_price+total_tax

在第一个例子中,文本被挤压在一起,难以阅读。但是,通过分离内容并使用注释和空格,我们可以使这一部分更具可读性。

#Calculate the price of the product
product_price=materials_cost+manufacturing_cost+shipping_cost
 
#Calculate the tax owed
state_tax=product_price*state_tax_rate(state)
federal_tax=product_price*federal_tax_rate
total_tax=state_tax+federal_tax
 
#Calculate the total cost
total_cost=product_price+total_tax

#TODO create function for looking up state tax rates 
使用缩进和一致的格式

在整个代码中,一致性是关键。在某些语言中,您可以使用缩进来在视觉上分隔不同的部分。例如,这对于区分在循环内部工作的部分很有用。注意:有些语言,比如Python,在功能上使用缩进,所以你可能无法使用它来进行视觉区分。

一致的格式很重要,因为它可以提高可读性并满足读者的期望。

文档和沟通

数据专业中的许多编程任务都是团队努力的结果。即使你花了很长一段时间独自编写代码,这些代码通常会被发送给一个团队进行审查和使用。这使得团队内部关于代码的沟通变得非常重要。

当向团队成员发送代码时,发送有关代码的目的、正确使用以及在运行代码时需要考虑的任何怪癖的信息非常重要。这种类型的通信称为文档,并且应该始终伴随代码。

约定是在一个名为README.txt的文本文件中提供此文档,该文件存储在与主代码文件相同的文件夹中。但是,特定的团队可能有不同的文档标准,例如使用Notion或Google Doc。

应记录哪些内容?

文档文件应该包括接管项目所需的所有信息。应该有关于如何使用代码的信息,代码的目的,体系结构和设计。您应该包括有关代码运行时的输入和输出的注释,以及任何怪癖。

添加有关错误检测和维护的信息也很有用。根据您公司的编码标准,您还可以包括作者信息、项目完成日期或其他信息。

创建读者友好的README文件

在编写README文件时,保持清晰的结构是很重要的。清楚地标记您的输入和输出以及文档的不同部分。将用户最重要的信息放在顶部。任何关键的东西都应该贴上标签,用大写字母、一系列破折号或其他东西突出显示。

在这里插入图片描述

文档字符

文档字符串对于第一次使用你的代码的人来说很有用。这是一个写入代码的字符串文字,提供有关代码的信息。在Python中,如果使用命令行查找类、方法或函数的文档,则显示的文本是该代码中的文档字符串。

下面是一个函数的docstring示例:

def calculate_total_price(unit_price, quantity):
    """
    Calculate the total price of items based on unit price and quantity.
 
    Args:
        unit_price (float): The price of a single item.
        quantity (int): The number of items purchased.
 
    Returns:
        float: The total price after multiplying unit price by quantity.
 
    Example:
        >>> calculate_total_price(10.0, 5)
        50.0
    """
    total_price = unit_price * quantity
    return total_price

编写代码文档似乎是一项繁重的工作,特别是当您已经知道程序的来龙去脉时。但是,当您将代码传递给其他人或重新访问一段时间没有使用过的旧项目时,适当的文档可以保存大量的时间。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(完全解决)如何输入一个图的权重,然后使用sklearn进行谱聚类

文章目录 背景输入点直接输入邻接矩阵 背景 网上倒是有一些关于使用sklearn进行谱聚类的教程,但是这些教程的输入都是一些点的集合,然后根据谱聚类的原理,其会每两个点计算一次亲密度(可以认为两个点距离越大,亲密度越…

知识分享|分段函数线性化及matlab测试

目录 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 4 matlab测试结果说明 5 分段线性化应用 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 clc;clear all; gn10;tn1; x_pfsdpvar(1, t…

为什么短信验证码要设置有效期?

安全性:验证码的主要目的是为了验证用户的身份,防止恶意或未经授权的访问。如果验证码没有有效期,恶意用户或攻击者可以获取验证码后无限期地尝试使用它。通过设置有效期,可以限制验证码的生命周期,提高系统的安全性。…

Selenium的find_element()与find_elements()和By的几种方法

打印索引元素的文本属性 def print_list(coordinate_list):print(当前项目地块数:, len(coordinate_list))for i in range(0, len(coordinate_list)):print(i)print(coordinate_list[i].text)看一下By支持的方法 class By:"""Set of supported loc…

02-HotSpot 虚拟机对象探秘

HotSpot 虚拟机对象探秘 对象的内存布局 在 HotSpot 虚拟机中,对象的内存布局分为以下 3 块区域: 对象头(Header)实例数据(Instance Data)对齐填充(Padding) 对象头 对象头记录…

基于ResNet34的花朵分类

一.数据集准备 新建一个项目文件夹ResNet,并在里面建立data_set文件夹用来保存数据集,在data_set文件夹下创建新文件夹"flower_data",点击链接下载花分类数据集https://storage.googleapis.com/download.tensorflow.org/example_i…

localforage-本地存储的优化方案

前言 前端本地化存储算是一个老生常谈的话题了,我们对于 cookies、Web Storage(sessionStorage、localStorage)的使用已经非常熟悉,在面试与实际操作之中也会经常遇到相关的问题,但这些本地化存储的方式还存在一些缺陷…

【CSS】BFC 块级格式化上下文

1. 块级格式化上下文(BFC) 它是一块独立的渲染区域,规定该区域内,常规流块盒的布局。 先来说一下常规流块盒: 常规流块盒在水平方向上,必须盛满包含块常规流块盒在包含块的垂直方向上依次摆放常规流块盒…

「我的AIGC咒语库:分享和AI对话交流的秘诀——如何利用Prompt和AI进行高效交流?」

文章目录 每日一句正能量前言基础介绍什么是Prompt?什么是 Prompt Engineering?为什么需要 Prompt Engineering?如何进行 Prompt Engineering?Prompt的基本原则Prompt的编写模式AI 可以帮助程序员做什么?技术知识总结拆解任务阅读…

2022年全国部分省市跨境电商交易规模汇总

近年来,跨境电商发展迅速,国家陆续出台了相关支持政策,跨境电商优势和潜力有望进一步释放。海关总署数据,根据初步测算,2022年我国跨境电商进出口2.11万亿元,增长9.8%。其中,出口1.55万亿元&…

ATX Power Supply

Pinout 20 PIN MOLEX 39-29-9202 at the motherboard 20 PIN MOLEX 39-01-2200 at the cable PinNameColorDescription13.3VOrange+3.3 VDC23.3VOrange+3.3 VDC3COMBlackGround45VRed+5 VDC

哈夫曼树、哈夫曼编码/解码

哈夫曼树 哈夫曼树的基本介绍 哈夫曼树构建步骤图解 创建哈夫曼树代码实现 """ 创建哈夫曼树 """ class EleNode:""" 节点类 """def __init__(self, value: int):self.value valueself.left None # 指向左子…

新加坡攻略

文章目录 基础信息入境行李App电信交通餐饮购物法规旅游牛车水(Chinatown)克拉码头(Clarke Quay)东海岸(East Coast)丹戎巴葛(Tanjong Pagar)滨海湾(Marina Bay&#xff…

Android学习之路(21) 进程间通信-AIDL与Servce基本使用

Service 与 Thread 和 进程 之间的关系 进程:应用程序在内存中分配的空间。(正在运行中的程序)线程:负责程序执行的单元,也称为执行路径。(需要线程来执行代码)。一个进程至少包含一条线程&…

ip报头和ip报文切片组装问题

在tcp层将数据打包封装向下传递后,网络层将其整个看为一个数据,然后对其数据加网络报头操作,在网络层最具有代表的协议就是ip协议。在这里我们探究ipv4的报头。 ip报头 4位版本:指定ip的版本号,对于ipv4来说就是4。 …

粤嵌实训医疗项目day02(Vue + SpringBoot)

目录 一、创建vue项目并运行 二、vue-cli中的路由使用 三、element-ui框架、实现页面布局以及vue-路由 四、前端登录页面 五、user登录后端接口完善【后端】 六、user登录前端-请求工具-请求发起【前端】 七、请求的跨域-访问策略 八、完善项目的页面布局、导航菜单以及…

反射的作用(可以使用反射保存所有对象的具体信息)

1、绕过 编译阶段 为集合添加数据 反射是作用在运行时的技术,此时集合的泛型将不能产生约束了,此时是可以 为集合存入其他任意类型的元素的 。泛型只是在编译阶段可以约束集合只能操作某种数据类型,在 编译成Class文件进入 运行阶段 的时候&a…

存储优化知识复习一详细版解析

存储优化 知识复习一 一、 选择题 1、1948 年,____提出了“信息熵”(shāng) 的概念,解决了对信息的量化度量问题。 A、薛定谔 B、香农 C、克劳修斯 D、纳什 【参考答案】B2、 RAID2.0技术下,LUN是建立在____上。 A、硬盘 B、条带 C、Chun…

RESTful 分享

RESTful 分享 什么是RESTful 理解RESTful RESTful的使用 1.什么是RESTful REST全称是Representational State Transfer,中文译文就是“表述性状态转移”。 在2000年,由Roy Fielding(HTTP规范的主要编写者之一)在博士论文中提…

鲁迅为什么打周树人?今天的昨天是明天的什么?chatgpt4.0告诉你

GPT-4架构,是OpenAI开发的一个大型语言模型。虽然和GPT-3.5都是基于GPT-3的进一步发展,但是GPT-4在模型大小,知识更新,知识更新等方面都比GPT-3更上一个层次。现在国内很多平台号称可以使用GPT4,而实际上是能申请到GPT…