命名难,难于上青天

2023-05-16

640?wx_fmt=jpeg

Photo by Jorik Kleen on Unsplash

Quora 问答社区的一个开发者投票统计,程序员最大的难题是:如何命名(例如:给变量,类,函数等等),光是如何命名一项的选票几乎是其它八项的投票结果的总和。如何给变量命名,如何让它变得有意义成了程序员不可逾越的难题,这篇文章参考了 Clean Code ,提供7条命名建议,希望能在取名字的过程中给你带来一些帮助。

以下都是基于Python3.7语法

1、使用有意义而且可读的变量名

ymdstr = datetime.date.today().strftime("%y-%m-%d")

鬼知道 ymd 是什么?

current_date: str = datetime.date.today().strftime("%y-%m-%d")

看到 current_date,一眼就懂。

2、同类型的变量使用相同的词汇

:这三个函数都是和用户相关的信息,却使用了三个名字

get_user_info()
get_client_data()
get_customer_record()

: 如果实体相同,你应该统一名字

get_user_info()
get_user_data()
get_user_record()

极好:因为 Python 是一门面向对象的语言,用一个类来实现更加合理,分别用实例属性、property 方法和实例方法来表示。

class User:
    info : str

    @property
    def data(self) -> dict:
        # ...

    def get_record(self) -> Union[Record, None]:
        # ...

3、使用可搜索的名字

大部分时间你都是在读代码而不是写代码,所以我们写的代码可读且可被搜索尤为重要,一个没有名字的变量无法帮助我们理解程序,也伤害了读者,记住:确保可搜索。

time.sleep(86400);

What the fuck, 上帝也不知道86400是个什么概念

# 在全局命名空间声明变量,一天有多少秒
SECONDS_IN_A_DAY = 60 * 60 * 24

time.sleep(SECONDS_IN_A_DAY)

清晰多了。

4、使用可自我描述的变量

address = 'One Infinite Loop, Cupertino 95014'
city_zip_code_regex = r'^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$'
matches = re.match(city_zip_code_regex, address)

save_city_zip_code(matches[1], matches[2])

matches[1] 没有自我解释自己是谁的作用

一般

address = 'One Infinite Loop, Cupertino 95014'
city_zip_code_regex = r'^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$'
matches = re.match(city_zip_code_regex, address)

city, zip_code = matches.groups()
save_city_zip_code(city, zip_code)

你应该看懂了, matches.groups() 自动解包成两个变量,分别是 city,zip_code

address = 'One Infinite Loop, Cupertino 95014'
city_zip_code_regex = r'^[^,\\]+[,\\\s]+(?P<city>.+?)\s*(?P<zip_code>\d{5})?$'
matches = re.match(city_zip_code_regex, address)

save_city_zip_code(matches['city'], matches['zip_code'])

5、 不要强迫读者猜测变量的意义,明了胜于晦涩

seq = ('Austin', 'New York', 'San Francisco')

for item in seq:
    do_stuff()
    do_some_other_stuff()
    # ...
    # Wait, what's `item` for again?
    dispatch(item)

seq 是什么?序列?什么序列呢?没人知道,只能继续往下看才知道。

locations = ('Austin', 'New York', 'San Francisco')

for location in locations:
    do_stuff()
    do_some_other_stuff()
    # ...
    dispatch(location)

用 locations 表示,一看就知道这是几个地区组成的元组

6、不要添加无谓的上下文

如果你的类名已经可以告诉了你什么,就不要在重复对变量名进行描述

class Car:
    car_make: str
    car_model: str
    car_color: str

感觉画蛇添足,如无必要,勿增实体。

class Car:
    make: str
    model: str
    color: str

7、使用默认参数代替短路运算和条件运算

def create_micro_brewery(name):
    name = "Hipster Brew Co." if name is None else name
    slug = hashlib.sha1(name.encode()).hexdigest()
    # etc.

def create_micro_brewery(name: str = "Hipster Brew Co."):
    slug = hashlib.sha1(name.encode()).hexdigest()
    # etc.

这个应该能理解吧,既然函数里面需要对没有参数的变量做处理,为啥不在定义的时候指定它呢?


因为上次没几分钟人就加满了,这次不会了,所以再推荐下这个星球,现在免费开放中,之前的付费星球加不进去是因为个人精力有限,我暂时把它关闭了。这个星球输出内容上不限主题发表自己的思考,少了很多压力。我说过,个人品牌可以从一个博客或者公众号开始,知识星球也未尝不可。如果你不知道怎么做,跟我一样多向那些厉害人学习。

640?wx_fmt=png

扫一扫免费加入

我在看❤️

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

命名难,难于上青天 的相关文章

  • 常用的url链接

    maven库 xff1a https mvnrepository com 一些基本工具的安装和语法 xff0c 如mysql docker https www runoob com docker centos docker install
  • 达梦7数据库后台导入导出命令解释

    达梦7使用的dexp和dimp xff0c 用法和exp和imp类似 xff0c 在命令后直接加上help可以查看帮助 吐槽一下竟然没有 dexp dimp help或 xff1f 这种操作 xff0c 必须是help才可以识别 格式 de
  • 麒麟V10修改root密码

    不知为何 xff0c root密码登录不上去 xff0c 几番测试都说是密码错误 基本环境 xff1a 国产服务器和麒麟V10 人不在机房 步骤如下 xff1a 1 连接服务器 xff0c 打开带外界面 2 打开控制台界面 3 重启电脑 x
  • python 图片文字提取

    转载 xff1a python怎么读取png python 图像处理 天道酬勤 花开半夏 图像处理不是一件简单的工作 对你来说 xff0c 一看到某样东西 xff0c 马上就知道你在看什么很容易 但是 xff0c 电脑不是这样工作的 对你来
  • C++ MFC调用JS代码获取返回值

    C 43 43 有时候会需要调用JS代码 xff0c 这对于C 43 43 来说或者对于国内来说一直是比较蛋疼的问题 xff0c 主要是资料少 xff0c 微软提供了一个COM组件 xff0c 里面包含有JS引擎 xff0c 这个组件就是
  • Python类基本概念 类对象、类属性、实例化、实例对象、实例属性、类方法、类构造函数、类继承

    想看视频的直接移步 python类对象类属性类的实例化实例对象实例属性 哔哩哔哩 bilibili python类方法类构造函数实例方法静态方法 哔哩哔哩 bilibili python类的继承代码实现 哔哩哔哩 bilibili 类对象
  • 用API获取IP地址

    设计蜂巢IP地址查询接口 xff1a http www hujuntao com api ip ip php腾讯IP地址查询接口 xff1a http fw qq com ipaddress新浪IP地址查询接口 xff1a http int
  • 打印出所有的水仙花数 Java实现

    题目 xff1a 打印出所有的水仙花数 所谓水仙花数是指一个三位数 xff0c 其各位数字立方和等于该数本身 例如 xff1a 153是一个 水仙花数 xff0c 因为153 61 1的三次方 xff0b 5的三次方 xff0b 3的三次方
  • iOS CGContext实现绘制任意圆角

    少说废话直接上代码 CGSize size 61 view bounds size UIGraphicsBeginImageContextWithOptions size NO UIScreen mainScreen scale CGCon
  • Kali Linux安装(VM环境下2022版本)

    目录 1 Kali虚拟机创建 2 Kali系统安装 1 Kali虚拟机创建 1 下载安装VM xff08 VMware Workstation xff09 软件 官网下载地址 xff1a 下载 VMware Workstation Pro
  • 为树莓派更换国内镜像源

    使用管理员权限 xff08 经由sudo xff09 xff0c 编辑 etc apt sources list文件 参考命令行为 xff1a span class token function sudo span span class t
  • LINK : fatal error LNK1104: cannot open file “kernel32.lib

    场景 xff1a 使用 VC6 0English 软件时 xff0c 提示 xff1a LINK fatal error LNK1104 cannot open file 34 kernel32 lib 解决方案 配置 Link 项的 In
  • 利用FFmpeg完成 mp4格式转avi格式

    我们可以用ffmpeg来完成一些很有用的功能 这篇文章就来说说 xff0c 怎样用ffmpeg来完成视频格式的转换 首先在我们搭建好ffmpeg环境的基础上 xff0c 如下链接所示 https blog csdn net laibowon
  • linux设备驱动开发中有关scull模块的编译问题

    昨天运行了一下 linux设备驱动程序 第三章的那个scull例子 xff0c 发现出现如下错误提示 xff1a error linux config h No such file or directory 我的系统内核版本是2 6 35的
  • 工作队列的初始化(INIT_WORK的参数问题)

    在编写工作队列的小例子时 xff0c 遇到 error macro 34 INIT WORK 34 passed 3 arguments but takes just 2 从2 6 20的内核开始 INIT WORK宏做了改变 原来是三个参
  • Ubuntu/Debian没声解决方法 —— 编译安装最新的alsa驱动

    在安装ubuntu 后 xff0c 系统没有声音 xff0c 多半是因为Ubuntu 的 声音控制驱动 xff1a Alsa 没有正确识别出电脑的声卡 这个问题的解决方法 xff0c 虽然有点复杂 xff0c 但还有值得去尝试的 xff0c
  • git配置姓名和邮箱

    1 查看git配置信息 git config span class token operator span list 2 查看git用户名 密码 邮箱的配置 git config user span class token punctuat
  • Android调用系统的发邮件方法

    系统邮件系统的动作为android content Intent ACTION SEND Intent email 61 new Intent android content Intent ACTION SEND email setType
  • Android-AlarmManager多个闹钟相互独立的实现

    Intent i 61 new Intent TimeSetActivity this AlarmReceiver class PendingIntent pi 61 PendingIntent getBroadcast TimeSetAc
  • ADB server didn't ACK * failed to start daemon * 解决方案

    前几天请假了 xff0c 回到公司后 xff0c 打开电脑 xff0c 插上手机 xff0c eclipse居然报ADB server didn 39 t ACK failed to start daemon 的错误 xff0c 之前出这样

随机推荐

  • mysql 不能插入中文: Incorrect string value

    windows平台只要在my ini文件中设置 client default character set 61 gbk mysqld character set server 61 utf8 就可以了 xff0c 除此之外 xff0c 命令
  • SQLServer--动态SQL拆分字符串,并将结果存进临时表

    存储过程的代码可参考如下 xff1a USE NewUserTest GO Object StoredProcedure dbo Splite Script Date 04 03 2018 10 23 52 SET ANSI NULLS O
  • 树莓派 ffmpeg 录制 USB 摄像头+话筒 视频+音频 mp4

    record video amp audio in the same file ffmpeg y f alsa ac 1 i hw 1 acodec pcm s16le f v4l2 framerate 25 video size 640x
  • C语言数组带下标赋值

    好记性不如烂笔头 c语言数组带下标赋值 xff0c 初始化的时候数组元素的值不受顺序影响 xff0c 在有些时候方便扩展一幕了然 span class token keyword int span array span class toke
  • Linux 2.4 Packet Filtering HOWTO

    Linux 2 4 Packet Filtering HOWTO 简体中文版 Rusty Russell mailing list netfilter 64 lists samba org Revision 1 3 Date 2002 06
  • lammps案例:Cu三点弯曲模拟

    大家好 xff0c 我是小马老师 本文分享一个Cu弯曲的案例 本案例参考三点弯曲实验 xff0c 三点弯曲试验是将试样放在弯曲装置上 xff0c 在试样上加载进行弯曲试验 xff0c 直到达到规定的弯曲程度或发生断裂 模拟原理是在z方向固定
  • PHP 中的数组函数

    文章目录 array change key casearray chunkarray columnarray combinearray count valuesarray diffarray diff keyarray diff assoc
  • Linux下运行bash脚本显示/usr/bin/env bash\r没有那个文件或目录

    Linux下运行bash脚本显示 usr bin env bash r 没有那个文件或目录 错误原因 这主要是因为bash后面多了 r这个字符的原因 在linux终端下 xff0c 输出 r会什么都不显示 xff0c 只是把光标移到行首 于
  • ROS软路由设置

    ROS软路由设置 不要怀疑软路由的性能 xff0c 也不用担心所谓的耗电多少 所谓的软路由耗电大 xff0c 只不过是商家搞的噱头而已 软路由完全不需要显示器 键盘鼠标 甚至 xff0c 可以在BIOS 里设置系统启动完即关闭硬盘 至于主板
  • QT +go 开发 GUI程序(一)

    如果你是一个墨守成规的coding xff0c 请移步其他内容 xff0c 这部分内容可能不适合你 如果你希望到外面看看 xff0c 感受新鲜的技术以及自由自在的氛围 xff0c 请继续 当然你也要付出一定的精力去学习如何科学上网 xff0
  • Android 7.0系统权限问题

    Android 7 0系统在运行应用的时候 对权限做了诸多限制 normal dangerous signature signatureOrSystem 取决于保护级别 xff0c 在确定是否授予权限时 xff0c 系统可能采取不同的操作
  • 跨平台,开源,免费的单片机IDE开发环境搭建-SDCC+eclipse

    关于如何使用sdcc编译器 xff0c 参见 单片机开发 xff0c 推荐开源跨平台的SDCC编译器 xff0c 其中较为详细叙述了使用方法和执行效率 1 xff0c IDE基本环境 SDCC在eclipse有一个插件 xff0c 版本1
  • LINUX中添加用户时为用户设置了全名(FULL NAME)

    more etc passwd 每行第4个冒号后面的字母就是full name
  • 系统开发系列 之Java中打印日志的几种方式

    在Java 中实现记录日志的方式有很多种 xff1a 最简单的方式 xff0c 就是system println out error 这样直接在控制台打印消息了 Java util logging 在JDK 1 4 版本之后 xff0c 提
  • 如何获取Android设备唯一识别码

    来自 xff1a http syawlaus com remindme E5 A6 82 E4 BD 95 E8 8E B7 E5 8F 96android E8 AE BE E5 A4 87 E5 94 AF E4 B8 80 E8 AF
  • 对时间操作

    TextBox1 Text 61 DateTime Today ToString 34 yyyy年M月d日 34 点第一个BUTTON时 TextBox1 Text 61 DateTime Today AddDays 1 ToString
  • docker访问samba服务器做持久化

    需求 xff1a 在window上 xff0c 我们经常使用 192 168 24x 1xx xxx 这样的路径访问网络共享文件服务器 xff0c 测试人员将访该文件服务器做持久化给到类似rancher这样的k8s管理平台上的docker操
  • 数据库迁移思路梳理

    1 分析系统 xff1a 进一步分析系统的功能和需求确认 业务需求分析 应用分析 评估工作量 2 制定方案 xff1a 确定迁移的重点和难点 xff0c 制定迁移方案 2 1确定数据库结构 xff1a 明确数据表 表中字段和各字段的数据类型
  • Maven 国内镜像仓库

    镜像仓库目标 当我们未定义任何远程仓库时 xff0c 使用 Maven 更新依赖时 xff0c 其会去默认远程仓库中拉取 xff0c 默认远程仓库 是国外地址 xff0c 所以在国内访问特别慢 xff0c 想提升访问速度 xff0c 需要将
  • 命名难,难于上青天

    Photo by Jorik Kleen on Unsplash Quora 问答社区的一个开发者投票统计 xff0c 程序员最大的难题是 xff1a 如何命名 xff08 例如 xff1a 给变量 xff0c 类 xff0c 函数等等 x