热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

良好编程风格的养成

编程风格不仅仅是关乎代码质量问题,更是一种艺术修养问题,糟糕的不良的丑陋的编程风使代码维护变得困难,而且无形中也增加了产生bug的频率。什么样的编程风格才是优秀的?养成一种良好的编程风格并长久坚持之。注释恰到好处。变量命名要合理。权衡可读性和效率。尽量用括号。

编程风格不仅仅是关乎代码质量问题,更是一种艺术修养问题,糟糕的不良的丑陋的编程风使代码维护变得困难,而且无形中也增加了产生bug的频率。

什么样的编程风格才是优秀的?

  • 养成一种良好的编程风格并长久坚持之。不管是平时代码练习,还是实际参与项目开发,都应该按那种编程风格编码,千万记住,好的编程风格不仅让你受益终身,更需要你坚持不懈。
  • 注释恰到好处。为每个函数编写前置条件和后置条件,前置条件说明调用此函数时候需要满足的条件,各个参数的取值范围;后置条件说明当前置条件成立时调用该函数产生的结果,也就是这个函数完成什么任务、有什么功能。为每个类写注释,说明这个类有多少个变量,多少个函数,完成什么任务,如果成员函数中有用到自由内存分配(new和delete),那么你注释应该准确的反应这些事实,以让有经验的程序员维护你的代码时能更方便。为每个类的私有成员写注释,为每个全局变量写注释,为每个不那么容易读懂的变量和算法写注释。
  • 变量命名要合理,尽量不要用拼音,尽量用英文,如果不懂英文请上Google。推荐用微软的匈牙利命名法,如果觉得麻烦,可以对其进行变式。整形变量前面加n,指针变量前加p,等等。用 GetFileName而不是getfilename,或者get_file_name,当然,这都只是建议,更具体的匈牙利命名法。
  • 权衡可读性和效率,比如,在效率要求不高的地方,尽量用可读性高的代码,for example,判断int型的变量a是否为偶数,可用if(a%2==0)或者if(!(a%2)),if(a&1)这些代码中,显然第一个可读性最好,第三个效率最高,在实际编程中采用哪个,各位自己权衡吧。
  • 尽量用括号,除非你对C中的的运算符的优先级非常熟悉,否则还是多打几个括号比较好,比如cout<<1&+!5^6;这个输出什么?在展示你的智商时,我希望你多花时间在提高代码的可维护性和低bug产生率上。
  • 如果if语句里面只有一条语句,也请加上{},这对于提高可读性有帮助的。真的。你试试?

匈牙利命名法

匈牙利命名法计算机程序设计中的一种命名规则,用这种方法命名的变量显示了其数据类型。匈牙利命名法有两种:系统匈牙利命名法和匈牙利应用命名法。

匈牙利命名法被设计成语言独立的,并且首次在BCPL语言中被大量使用。由于BCPL只有机器字这一种数据类型,因此这种语言本身无法帮助程序员来记住变量的类型。匈牙利命名法通过明确每个变量的数据类型来解决这个问题。

在匈牙利命名法中,一个变量名由一个或多个小写字母开始,这些字母有助于记忆变量的类型和用处,紧跟着的就是程序员选择的任何名称。这个后半部分的首字母可以大写以区别前面的类型指示字母。

系统命名法与应用命名法的区别在于前缀的目的。

在系统匈牙利命名法中,前缀代表了变量的实际数据类型。例如:

  • lAccountNum :变量是一个长整型("l");
  • arru8NumberList :变量是一个无符号8位整型数组("arru8");
  • szName :变量是一个零结束字符串("sz"),这是西蒙尼最开始建议的前缀之一。

匈牙利应用命名法不表示实际数据类型,而是给出了变量目的的提示,或者说它代表了什么。

  • rwPosition :变量代表一个行("rw")。
  • usName :变量代表一个非安全字符串("us"),需要在使用前处理。
  • strName :变量代表一个包含名字的字符串("str")但是没有指明这个字符串是如何实现的。

系统匈牙利命名法的优点

  • 从名字中就可以看出变量的类型
  • 拥有类似语义的多个变量可以在一个代码块中使用:dwWidth, iWidth, fWidth, dWidth
  • 变量名在仅仅知道他们的类型时可以被轻易记住
  • 可以使变量名更加一致
  • 决定一个变量名的时候可以更机械化,更快
  • 不合适的类型转换和操作可以在阅读代码的时候被检测出来
  • 在那些数字被当作字符串处理的基于字符串的语言中非常有用(例如Tcl)
  • 在匈牙利应用命名法中,变量名确保不会犯以下错误:heightWindow = window.getWidth()
  • 在使用动态类型语言或完全无类型的语言编程时,关于类型的修饰可以更简化。这种语言一般不包含类型修饰(或者可选),因此唯一可以看出哪些类型是被允许的只有名字本身、文档以及通过阅读代码来明白它们在做什么。在这些语言中,包含对于变量类型的指示可能会有助于程序员。就像上面提到的,匈牙利命名法扩展了这样的语言(BCPL)。
  • 在包含许多全局对象的复杂程序中(VB/Delphi Forms),拥有一个基本的前缀命名法可以简化在编辑器中查找组件的工作。按btn可以使编辑器弹出一个Button对象的列表。

本文地址:http://www.nowamagic.net/librarys/veda/detail/581,欢迎访问原出处。


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
author-avatar
Chilldon螴暁鼕
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有