热门标签 | 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,欢迎访问原出处。


推荐阅读
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • 深入浅出:Google工程师的算法学习指南
    通过Google工程师的专业视角,带你系统掌握算法的核心概念与实践技巧。 ... [详细]
  • Valve 发布 Steam Deck 的新版 Windows 驱动程序
    Valve 最新发布了针对 Steam Deck 掌机的 Windows 驱动程序,旨在提升其在 Windows 环境下的兼容性、安全性和性能表现。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文深入探讨了 Python 列表切片的基本概念和实际应用,通过具体示例展示了不同切片方式的使用方法及其背后的逻辑。 ... [详细]
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社区 版权所有