程序员:这10种糟糕的程序命名,你遇到过几个?

点击上方“dotNET全栈开发”,“设为星标”

加“星标”,每天11.50,好文必达

全文约2300字,预计阅读时间4分钟

有人问:规范的命名风格真的能让你程序员少出bug?当遇到这方面的教训时,就会想到这句话还是有点道理的。工作快三年多了,从刚开始的什么都不懂,到慢慢发现积累知识点的重要性。关于程序的命名规范之前也做过一些笔记,只是感觉不全面,就一直没有写出来。

直到前段时间看了邹溪源老师的这篇我认真写下9段如翔一般的代码,只为等你来品鉴引发了我的感触,再不总结,都快2020年了,头发都掉了不少。

曾经刚工作的时候,命名也挺随意的,现在看起来,都有点想打过去的自己。总有这样的一个过程,有些知识点,在潜意识里并不知道要去了解深入它。

看看这些10中诡异的程序命名你遇到几个?
01

01 措不及防的缩写

一般来说如果单词过长的话,会采用缩写的方式,比如number 》num CurrentUser>currUser。可是工作中,经常会遇到这种“便秘式”命名,给人一种措不及防的感觉。有时候还要利用想象的空间的,猜一下这个命名到底是个什么玩意。写完整的算了,他不他偏要来个缩写,缩写后,我就看不懂(本身就不长,干就万事了。) 这是一段xaml引入命名空间的代码,一个6个字符,缩写后成功地变成5个字符,最终为大家节省了点击一个键的卡路里。common完美缩写成comon

xmlns:comon="clr-namespace:SGS.SIO.Common.Utilities;assembly=SGS.SIO.Common"

建议:缩写干脆点,实在想不到好的缩写,那就直接写完整的单词

02 中文命名

(ps:无法展示类似代码.png)不要觉得中文命名不可思议,我以前也是这样觉得居然还有中文命名的,上一家公司就有这样的例子。工作一段时间后,你可能会遇到一些几年前甚至十年前的代码,什么是工作啊?工作嘛...... 每一种存在,都有他的存在的理由(ps:不管是好还是坏)。我的思考是,上一家公司采用中文命名是有一定的原因的,那些名词如果英文来翻译的话,非常容易歧义、难以理解、甚至跑偏,工作嘛,不能改变的时候,就只能去接受它。 

建议:不要使用中文命名,万不得已的情况下也不要,打上注释也行啊

03 自己的姓名来命名类和方法

这一case来自邹溪源老师文章我认真写下9段如翔一般的代码,只为等你来品鉴的第一段落 用自己姓名来命名,我是真没遇到过,邹老师是一位80后程序员,见多识广。所以碰到过这样case,我就分享一下

/// <summary>
/// author:zhangsan
/// </summary>
class ZhangsanTest
{private void TestGetData(){int a, b, c;}private int ZhangsanGet(int s1, int s2){int s3 = s1 + s2;return s3;}private List<string> GetData(){return null;}
}

这是一个喜欢用自己的姓名来命名类和方法的作者,在他的代码中,经常可以看到这样奇怪的对象定义,而且他还喜欢用a,b,c,d,e,f或者s1,s2这样的命名,仿佛他的代码自带混淆特效。这样的代码嗅起来会不会觉得充斥着奇怪的味道?

建议:名字来命名这事儿挺严肃的,毕竟后面接手的人可能会认识你这个沙雕

04 加了魔幻的方法命名

    private void GetData(){int a, b, c;}

这个我是真的见过,看到邹老师分享,我抽了根烟,相见恨晚.png。

另外,有没有发现有许多开发者喜欢用 GetData() 来定义获取数据的方法?然后这个方法就成为一个万金油的方法,不管是爬虫采集、或者数据绑定,无论是 C# 写的后端或者 Java 写的后端代码,或者用 vue 写的前端代码,仿佛在任何场景、任何数据应用都可以看到这样的方法。如果一个项目中,有十几个地方都出现了这个** GetData() **方法,那种感觉一定非常难受

熟悉的名字,却是千变万幻的味道。 

建议:这不是写那个GetData的码农吗?你品,你细品!

05 歧义的命名

这也是我遇到的真实案例,为此付出了无意义的1个小时调试。将一个页面的命名成this,可能觉得this好用,this挺喜欢好用。比如这个:

x:Name="this"

调用的时候

Command="{Binding Source={x:Reference this},Path=BindingContext.EditCmd}" 

当时就有点懵逼,这个this到底指的是什么。这种以关键字来命名的,估计是想报复同事。良好的命名如这样的:

<CheckBox x:Name="chkBoxChinese" /><Label Text="chinese"><Label.Triggers><DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference chkBoxChinese}, Path=IsChecked}" Value="true"><Setter Property="FontAttributes" Value="Italic, Bold" /> <Setter Property="FontSize" Value="Large" /></DataTrigger></Label.Triggers></Label>

建议:禁止使用关键字来命名

06 数字化的命名

不要觉得,这事我最多也就上学时候干过。全面发展,数字一体化。的确挺全面,曾经做xamarin的时候,在一个activity的里面有5,6个按钮,点了一个其他按钮显示不同状态,于是每个按钮变成dialog1、dialog2、dialog3

建议:根据实际的作用进行命名。

07 考验眼神的命名

int materialFirstNum = 8;
int materialSecondNum = 11;
int materialSumNum = materialFirstNum + materialSecondNum ;

欢迎大家来找茬,良好的命名变量是让人一看就明白,顾名思义。把不同的部分写在中间,书写时容易了,但是不容易检查。(ps:这里指的书写容易指的是写material时,各种IDE会有提示) 比如这样:

int firstMaterialNum = 8;
int secondMaterialNum = 11;
int sumMaterialNum = firstMaterialNum + secondMaterialNum ;

建议:如果有相似的名字,请把他们不同的部分卸载开头,其次是结尾。

08 直接以类型来命名

List<MaterialModel> list =new  List<MaterialModel>();
string[] array = { "","",""};

这种名字不好的地方有两个

  • 命名根本就不知道代表什么意思,毫无意义

  • IDE提示也容易混淆,不容易输入 有经验的程序员肯定会写出这个变量是代表什么意思的,比如这样的

List<MaterialModel> materialList =new  List<MaterialModel>();
string[] titleIdArray = { "","",""};

建议:不要写与系统定义类型关键字的命名,命名要有意义。

09 不规范的方法名

比如这个命名:

public static int TwoNumSubtraction(int firstNum,int secondNum){return firstNum - secondNum;
}

最好改成 动词+名词格式,subtraction的缩写sub,这样的好处是合适的缩写顾名思义,SubTwoNum就知道是做两个数的减法运算。

public static int SubTwoNum(int firstNum,int secondNum){return firstNum - secondNum;
}

建议:方法名最好动词+名词格式

10 单词拼错的命名

SendMassage(...)看到这个,我感觉当时这哥们应该压力挺大的。

data和date 组合拳式混写,可能当时这个当事人自己也写蒙了吧!

form、from 。这个我也曾经常容易写错,傻傻分不清!

dataOne, dataTwo, dataThree, DataFour (手动捂脸) 

建议:这个我真没啥建议的.....

结语:林子大了,什么鸟都有!最后问一句,什么是工作啊?下篇会写到,代码命名方式有哪些?代码规范会写成一个系列

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

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

相关文章

评测OJ时间复杂度

平日里做OJ题时&#xff0c;先看数据范围能帮助自己选择算法 &#xff08;可能更多时候是看暴力能骗到几分qwq) 一般而言&#xff0c;评测OJ在1s内能接受的算法时间复杂度是10e8-10e9之间&#xff0c;这里取折中值5*10e8。 对于不同的算法&#xff0c;能够接受的最大数据如下&…

.Net Core使用Ocelot网关(一) -负载,限流,熔断,Header转换

1.什么是API网关API网关是微服务架构中的唯一入口&#xff0c;它提供一个单独且统一的API入口用于访问内部一个或多个API。它可以具有身份验证&#xff0c;监控&#xff0c;负载均衡&#xff0c;缓存&#xff0c;请求分片与管理&#xff0c;静态响应处理等。API网关方式的核心要…

[Asp.net core 3.1] 通过一个小组件熟悉Blazor服务端组件开发

通过一个小组件&#xff0c;熟悉 Blazor 服务端组件开发。github:https://github.com/git-net/NBlazors一、环境搭建vs2019 16.4, asp.net core 3.1 新建 Blazor 应用&#xff0c;选择 asp.net core 3.1。根文件夹下新增目录 Components&#xff0c;放置代码。二、组件需求定义…

【STM32】STM32学习笔记-TIM定时中断(13)

00. 目录 文章目录 00. 目录01. TIM简介02. 定时器类型03. 基本定时器04. 通用定时器05. 高级定时器06. 定时中断基本结构07. 预分频器时序08. 计数器时序09. 计数器无预装时序10. 计数器有预装时序11. RCC时钟树12. 附录 01. TIM简介 TIM&#xff08;Timer&#xff09;定时器…

开源.Net Standard版华为物联网北向接口SDK

说明最近用到了华为的物联网平台API&#xff0c;但是官方没有.Net版的SDK&#xff0c;所以就自己封装了一个&#xff0c;开源出来给有需要的朋友&#xff0c;同时也算是为.Net Core的发展做点小贡献~源码地址&#xff1a;https://github.com/iamoldli/HuaWei.IoT.NorthApi.Sdk同…

你知道怎么使用DebugView查看调试信息吗?

简介 DebugView是sysinternals工具集中的一款用来查看调试信息的工具。不管你是内核开发人员还是应用程序开发人员&#xff0c;都会用到这款神器。先简单看看DebugView可以干什么吧。可以查看应用程序输出的调试信息。可以查看驱动程序输出的调试信息。可以查看本地机器的调试信…

使用ASP.NET Core 3.x 构建 RESTful API - 3.3.3 ProblemDetails

当ASP.NET Core 大约在 2.1 版本的时候&#xff0c;它引入了 ProblemDetails。ProblemDetails是基于 RFC7807 这个规范&#xff0c;目的是让 HTTP 响应可以携带错误的详细信息&#xff0c;而不是只返回一个错误的状态码。 在 ASP.NET Core 2.2的时候&#xff0c;如果Controller…

(译)An introduction to Kubernetes

原文&#xff1a;https://www.jeremyjordan.me/kubernetes/&#xff08;博客园团队推荐的&#xff09;这篇博客文章将对Kubernetes进行介绍&#xff0c;以便您了解该工具背后的动机&#xff0c;含义以及使用方式。在后续文章中&#xff0c;我将讨论如何使用更具体的&#xff08…

WeihanLi.Npoi 支持 ShadowProperty 了

WeihanLi.Npoi 支持 ShadowProperty 了Intro在 EF 里有个 ShadowProperty (阴影属性/影子属性)的概念&#xff0c;你可以通过 FluentAPI 的方式来定义一个不在 .NET model 里定义的属性&#xff0c;只能通过 EF 里的 ChangeTracker 来操作这种属性。在导出 Excel 的时候&#x…

RNN循环神经网络概述

RNN与普通神经网络的区别&#xff1a;能够更好的处理序列的信息 RNN结构图 如图所示&#xff0c;St的值不仅取决于输入X的值&#xff0c;还取决于St-1的值。同时&#xff0c;St-1的值还取决于St-2的值&#xff0c;因此S1,S2,…,St-1的值都与St的值直接或间接相关&#xff0c;…

使用ASP.NET Core 3.x 构建 RESTful API - 3.3.1 HTTP状态码

HTTP状态码会告诉API的消费者以下事情&#xff1a; 请求是否执行成功了 如果请求失败了&#xff0c;那么谁为它负责 HTTP的状态码有很多&#xff0c;但是Web API不一定需要支持所有的状态码。HTTP状态码一共分为5个级别&#xff1a; 1xx&#xff0c;属于信息性的状态码。Web AP…

解决import tensorflow时的报错 Passing (type, 1) or ‘1type‘ as a synonym of type is deprecate

问题 在Pycharm中运行import tensorflow as tf时报错。 解决方案 此时点开报错中的dtypes.py文件&#xff0c;对其进行修改。 从# hard-coding of names.这里开始&#xff0c;修改所有以_np_q开头的代码行&#xff0c;同时也要修改最后一行的np_resource。 # hard-coding of …

解决module ‘tensorflow‘ has no attribute ‘optimizers‘报错

一般出现此类问题的原因是包的更新导致有些用法发生了变化&#xff0c;因此在tensorflow中调用optimizer需要通过tf.keras调用。 将self.opt tf.optimizers.Adam(learning_rateself.lr)中的tf后面加个keras&#xff0c; 变成self.opt tf.keras.optimizers.Adam(learning_rat…

Dapr 运用

前置条件DockerWin10Dapr 部署本文将采用本地部署的方式。安装 Dapr CLI打开 Windows PowerShell 或 cmd &#xff0c;运行以下命令以安装 Dapr CLI&#xff0c;并添加安装路径到系统环境变量中。powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/…

微软将中止支持 .NET Core 2.2,建议开发者升级至 .NET Core 3.1

Current 版本 .NET Core 2.2 将在 12 月 23 日结束生命周期&#xff0c;开发者应更新到长期支持版本 .NET Core 3.1。.NET Core 2.2 于 2018 年 12 月 4 日发布&#xff0c;作为一个非 LTS 版本(“Current”)&#xff0c;它只在下一个版本发布后的三个月内受支持。.NET Core 3.…

LeetCode贪心 数组拆分I

Given an integer array nums of 2n integers, group these integers into n pairs (a1, b1), (a2, b2), …, (an, bn) such that the sum of min(ai, bi) for all i is maximized. Return the maximized sum. 思路 这道题要使得各最小值相加最小&#xff0c;就要使得的每一组…

使用.NET Core创建Windows服务 - 使用.NET Core工作器方式

原文&#xff1a;Creating Windows Services In .NET Core – Part 3 – The “.NET Core Worker” Way作者&#xff1a;Dotnet Core Tutorials译者&#xff1a;Lamond Lu译文&#xff1a;使用.NET Core创建Windows服务 - 使用.NET Core工作器方式使用.NET Core创建Windows服务…

LeetCode贪心 最长回文串

Given a string s which consists of lowercase or uppercase letters, return the length of the longest palindrome that can be built with those letters. Letters are case sensitive, for example, “Aa” is not considered a palindrome here. 思路 首先学习一个新单…

【译】Visual Studio 2019 中 WPF UWP 的 XAML 开发工具新特性

原文 | Dmitry翻译 | 郑子铭自Visual Studio 2019推出以来&#xff0c;我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能。在本周的 Visual Studio 2019 版本 16.4 和 16.5 Preview 1中&#xff0c;我们希望借此机会回顾一下全年的新变化。如果您错过了我们以前的…

numpy创建zeros数组时报错TypeError: Cannot interpret ‘8‘ as a data type

错误代码 xPoint np.zeros(pow(2, k), pow(2, k))改正方法 zeros括号内填数组行列数时&#xff0c;加一对括号。 正确代码 xPoint np.zeros((pow(2, k), pow(2, k)))