代码大全学习-14-变量名的力量(Power of Variables Names)

代码大全学习-34-自注释的代码(Self-Documenting Code) 说到注释,总是有争论要不要注释,有人喜欢尽可能多的注释,有人根本不写注释。作者的意见是适当的注释是需要的,但不要重复代码,不好的注释还不如不注释。总结性的,描述意图的注释是好的注释,它会告诉读者代码所没有提供的信息,是我们的目标。而另一大目标就是写出自注释的代码,无比清晰,根本不需要注释。这样可以大大节省读注释的时间,分析注释与代码是否一致的时间,从而提高效率。 具体的方法有很多, 篇 阅读详情

这一章对变量名的讲述是相当的具体,作为一本手册真是名符其实。我不想在这里再重复那些具体详细的方法,可以去翻书,或者按照后面附上的checklist一条一条去检查。这里主要讲讲为什么要有那么多方法。

原因就是增强程序的可读性,从而降低程序的复杂性。所有的种种方法都围绕这一目的展开。像变量名要能准确完整的描述这个变量表示的内容,要描述它是什么(what),而不是怎么做(how),越具体越好,这样我们一看到变量名,就知道它是什么,增强可读性。再比如要制定一些命名规则,区分不同类型的变量,用什么样的前缀,用什么样的缩写,具体是什么样的具体分析,关键是要大家一起遵守,这样程序就会看起来像一个人写的,可读性大大增强。还有像要避免一些问题也都是为了方便阅读代码,理解代码。因为程序里全是各种各样的变量,变量的可读性好了,程序就容易看懂,复杂性就低,就不容易出错,维护性也好,质量就高。

相信这个原因有经验的同行都不存在什么疑问,直接附上checklist,要用的时候去查吧。

Checklist: Power of Variables Names

General Naming Considerations

  • Does the name fully and accurately describe what the variable represents? 
  • Does the name refer to the real-world problem rather than to the programming-language solution? 
  • Is the name long enough that you don't have to puzzle it out? 
  • Are computed-value qualifiers, if any, at the end of the name? 
  • Does the name use Count or Index instead of Num?

Naming Specific Kinds Of Data

  • Are loop index names meaningful (something other than i, j, or k if the loop is more than one or two lines long or is nested)? 
  • Have all "temporary" variables been renamed to something more meaningful? 
  • Are boolean variables named so that their meanings when they're True are clear? 
  • Do enumerated-type names include a prefix or suffix that indicates the category-for example, Color_ for Color_Red, Color_Green, Color_Blue, and so on? 
  • Are named constants named for the abstract entities they represent rather than the numbers they refer to?

Naming Conventions

  • Does the convention distinguish among local, class, and global data? 
  • Does the convention distinguish among type names, named constants, enumerated types, and variables? 
  • Does the convention identify input-only parameters to routines in languages that don't enforce them? 
  • Is the convention as compatible as possible with standard conventions for the language? 
  • Are names formatted for readability?

Short Names

  • Does the code use long names (unless it's necessary to use short ones)? 
  • Does the code avoid abbreviations that save only one character? 
  • Are all words abbreviated consistently? 
  • Are the names pronounceable? 
  • Are names that could be mispronounced avoided? 
  • Are short names documented in translation tables? 
  • Common Naming Problems: Have You Avoided...
  • ...names that are misleading? 
  • ...names with similar meanings? 
  • ...names that are different by only one or two characters? 
  • ...names that sound similar? 
  • ...names that use numerals? 
  • ...names intentionally misspelled to make them shorter? 
  • ...names that are commonly misspelled in English? 
  • ...names that conflict with standard library-routine names or with predefined variable names? 
  • ...totally arbitrary names? 
  • ...hard-to-read characters?
代码大全学习-19-控制循环(Controlling Loops) 循环是相对来说复杂一些的控制结构。大体来说分为两类:For循环和While循环。像foreach之类的可以归到for类里,do-while之类的可以归到while循环类里。如何选择呢?一般来说,知道循环的次数,用for,否则用while。For循环相对来说比较简单些,所以尽量用它。 选好了之后,说说如何用。第一原则,简单!能写多简单就写多简单。简单才不容易出错,才易读,易维护。有了第一原 阅读详情

相关推荐

代码大全学习-25-开发人员测试(Developer Testing)

开发人员测试不同于测试人员测试,前者是白盒测试,后者是黑盒测试。开发人员测试主要包括单元测试,组件测试,集成测试等。不管哪一种,测试的目的都是为了发现缺陷。所以,既然测试,首先就要认为一定会发现缺陷,若是总想着找不到缺陷,就会真的找不到缺陷。测试这件事,要从一开始就考虑,像测试用例,早晚都是要写的,不如先写,想用就能用,还能更早发现需求是否有问题。 作者在书中通过一个例子详细的列出了各种

tyst08的专栏 1731

C++变量名 命名规则

C++提倡使用有一定含义的变量名。如果变量名表示差旅费,应将其命名为cost_of_trip或costOfTrip,而不要将其命名为x或者cot。且必须遵循几种简单的C++命名规则,如下: 1. 在名称中只能使用字母字符、数字和下划线(_); 2. 名称的第一个字母不能是数字; 3.区分大写字符和小写字符; 4.不能将c++关键字用作名称; 5.c++对于名称的长度没有限制。

GMLLYY的博客 2517

代码大全学习-12-伪码编程(The Pseudocode Programming Process)

伪码编程的概念相信大家都知道,就是用伪代码,也就是描述性的语句来表示一个程序的实现过程。遗憾的是,包括我自己在内,用的人不多,就算是用,用得也不好。看完这一章之后觉得,以后还是要好好用这个工具。 伪码编程有很多好处,首先,它是用类似于自然语言的陈述,有利于我们理清思路,到底这个类,这个函数要干什么,怎样做。伪码不要用程序语言的语法,尽量要用自然语言,这样可以把它翻译成任何程序语言。伪码的

tyst08的专栏 1726

[Code Complete] CH11 The Power of Variable Names 变量名力量

1.       为变量命名的时候重要的考虑事项是,名字要完全,准确描述出该变量所代 2.       问题导向,少使用计算机痕迹重的名字。例如sum就比calcVal要好。 3.       变量名字要在10到16个字母,比较合适。 Ø  没必要一定这么长,但是一般情况。 Ø  短的名字是和作用域比较小的变量。长的反之。 4.       变量名字中加入限定词 Ø  total, s

mumubaba的专栏 576

代码大全学习-35-个人性格(Personal Character)

凡事俱在人为,程序员也是人,人的性格会对程序员的工作产生不同的影响。 很多人认为聪明是程序员的一大优势,其实不然,往往是聪明反被聪明误。因为现代软件的复杂性,再聪明的程序员也无法在脑子里同时理清所有的问题,所以真正牛X的程序员是那些认识到了自己的脑子容量有限,而采取了对应措施的人,比如降低软件复杂性。这也就是说好的程序员要谦虚,认识到自己的不足,这样才能进步,这道理在哪里都是一样有效。

tyst08的专栏 2534

代码大全学习-11-防御式编程(Defensive Programming)

防御式编程,顾名思义,就是保护自己不受其他人错误的影响,防御那些意料之外的错误。比如对一个函数来说,即使它被传递了一个错误的数据,它还是可以继续正常工作,哪怕这个错误数据是其它函数的错,好的程序永远不会输出垃圾信息。防御式编程帮助我们更容易发现错误,改正错误,当然,最好是一开始就不要引入错误,也就是可以利用一些方法,规则尽可能减少错误的产生。好了,下面说方法。 首先,要抵御外来的侵略,也

tyst08的专栏 1542

代码大全学习-24-合作开发(Collaborative Construction)

这一章介绍了合作开发的一些常用方法。所有的合作开发都基于这样一个前提,即任何开发人员都有自己的盲点,大家的盲点不一样,所以合作起来就可以减少盲点,也就减少了开发缺陷出现的几率。合作开发的方法有很多,结对编程,正式审查(Formal Inspections),非正式审阅,读代码,读文档,几个人讨论等等,形式多样,不必拘泥。作者在书中重点讲了前面两种。 结对编程相信大家就算没用过也至少有所耳

tyst08的专栏 1458

代码大全学习-7-设计的实践

前面一节的启发主要专注于设计的属性,也就是最终的设计是什么样的,这一节的启发则专注于设计的实践,即通过怎样的步骤可以得到好的结果。同样是启发式,所以也有各种各样的方法。 1、迭代。一般来说第二次的设计都会比第一次的好,而且我们会从每一次设计中学到东西,从而提高整体的设计水平。 2、分而治之,各个击破(Divide and Conquer)。人脑的容量,处理能力都有限,对于大的问

tyst08的专栏 1379

代码大全学习-26-调试除错(Debugging)

调试,号称是软件开发过程中最耗时的工作,无数的开发人员在上面花费了无数的时间。毫无疑问,想办法提高调试的效率是非常有用的。那么关键在哪里呢?就是要用科学的方法。 相信所有的开发人员都有这样的经历:要改正一个缺陷,试试改掉这一句行不行,再试试改掉那一句行不行,试来试去,越改越多,最后自己都迷糊了,不知道改了些什么。也许一下子可以了,也许还是不行,还是不知道为什么行或者不行。这个过程会花费很

tyst08的专栏 1219

代码大全学习-18-使用条件语句(Using Conditionals)

这一章依然比较简单。条件语句主要有两类,if-else,和switch-case。 总体的原则都是要提高可读性,降低犯错率,提高效率等。 对于if-else语句来说,要注意的有这么几条:一、先写正常情况下会发生的条件,这样读的人一看就知道正常情况下会怎么样,可以很容易的知道这段代码的功能,同时执行效率也会提高,因为正常的情况会是最可能发生的情况。二、把正常的情况放在if后面而不

tyst08的专栏 1214

代码大全学习-31-系统集成(Integration)

集成是把各个分散的软件部分合并成一个统一的系统的过程。好的集成方法能带来很多好处,比如便于诊断错误,提高代码质量,更可靠的预测,更好的用户关系,更高的士气等等;而坏的集成方法可能导致最后系统无法完成。 集成的方法可分为两大类,一类是先把所有的部分都准备好,然后一起集成;另一类是增量集成,也就是先搭个架子,然后一部分一部分往上加。第一类的问题在于一下子引入了太多的耦合,关系太复杂,出了问题

tyst08的专栏 1157

代码大全学习-6-启发式设计

各种启发式设计的方法: 1、寻找真实世界中的对象 主要包括下面几个步骤: 确定对象以及它们的属性,包括方法和数据; 确定每个对象是干什么的; 确定每个对象可以对其他的对象做什么; 确定每个对象的哪些部分是公开的; 确定每个对象的接口。 这几个步骤不一定按这个顺序,可能是反复确认。 2、形成一致的抽象(Form consist

tyst08的专栏 1107

代码大全学习-28-代码调整策略和技巧(Code-Tuning Stategies and Techniques)

前面讲了重构,重构的目标是改善代码的可读性可维护性。这里讲的代码调整针对的主要目标是软件的性能。很多情况下,性能和可读性可维护性是相互矛盾的指标,所以在做代码调整之前,一定要想好它真的是需要的吗?提高软件的性能有很多种方法,列在下面的checklist中,代码调整是其他的方法都不行了才不得不用的方法。总之,慎用! Checklist: Code-Tuning Strategies Overa

tyst08的专栏 1038

代码大全学习-23-软件质量概述(The software-Quality Landscape)

软件质量可以分为两类,外部的和内部的。外部的软件质量是对用户来说的,包括正确,易用,高效,可靠,完整,适应各种环境,准确,健壮。内部的软件质量是用户不关心,只有程序员才关心的,包括可维护性,灵活性,可移植性,可重用性,可读性,可测试性,可理解性。当然,程序员不仅关心内部的质量,同时也关心外部的质量,而这内外的区分有时候也不是那么明显,因为内部质量可能会影响到外部质量。要注意的是列出来的这些指标有些

tyst08的专栏 983

YOLO26算法保龄球馆保龄球目标检测+训练好的模型+743张数据集+pyqt可视化界面.zip

数据集可视化效果可参见下方展示。 【数据集概况】 · 检测类别(中文):[保龄球(bowling)] · 训练集:594 张 · 验证集:75 张 · 测试集:74 张 · 总计:743 张 该数据集聚焦于室内保龄球馆场景,系统性采集了多角度、多姿态下保龄球在不同运动阶段的视觉特征,为保龄球运动过程中的球体识别与轨迹分析提供了高质量标注样本,具有明确的体育训练与智能辅助系统开发价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 100 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9938** mAP50-95 | 0.6966 Precision | 0.9740 Recall | 0.9974 train/box_loss | 0.9113 train/cls_loss | 0.2862 val/box_loss | 1.1516 val/cls_loss | 0.3116 【训练过程分析】 100 轮训练后 mAP50 达到 0.9938,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。但 mAP50-95 为 0.6966,和 mAP50 差距 0.30,定位精度仍有优化空间。 【模型性能评估】 Precision 0.9740、Recall 0.9974,精召双高,模型对保龄球的检测能力强。 【预测效果展示】 验证集预测效果较好,检测框基本准确覆盖保龄球,置信度整体偏高。 【改进建议】 1. 丰富场景多样性:补充不同光照、背景和遮挡条件下的样本。 2. 提升输入分辨率:640 ...

PaddleOCRApi面向 Windows 与 Linux 的轻量级 OCR 与YOLO目标检测 HTTP 服务

PaddleOCR 与YOLO目标检测 HTTP 服务。 项目通过 PaddleOCROnnx 原生库集成 OnnxRuntime加速能力,围绕 ONNX 模型部署, 以统一接口提供图像文字识别、YOLO 目标检测和 Tensor 数据输出。 功能概览 文字识别:支持图片 Base64、multipart/form-data 上传,以及文本和 JSON 结果。 目标检测:支持 YOLO 图片检测,返回检测框 JSON 或原始 Tensor。 浏览器演示:访问服务根地址,上传图片并切换 OCR、YOLO 模式。 健康检查:通过 /health 查看服务及 OCR、YOLO 引擎初始化状态。 并发处理:通过 OCR 引擎实例池处理并发请求,可调整实例数量。 体验与调用 启动后访问: 入口 地址 浏览器演示 http://localhost:5000/ 健康检查 http://localhost:5000/health 原生依赖 Windows:优先从 runtimes/win-x64/native/ 加载原生 DLL;该目录没有 PaddleOCROnnx.dll 时,尝试从可执行文件所在目录加载。主 DLL 与对应后端依赖应放在同一原生目录中,不要将同一组依赖分散到多个目录。 Linux:原生运行时位于 runtimes/linux-x64/native/,程序使用相对于可执行文件的运行时搜索路径查找随包部署的依赖。 后端选择:CoreOCROnnx 支持 ONNX Runtime、OpenVINO、TensorRT 后端。请使用与平台、进程架构、硬件和后端匹配的一整套运行时,不要混用不同后端或版本的依赖。

上一篇: 代码大全学习-13-如何使用变量(General Issue in Using Variables)
下一篇: 代码大全学习-15-基础数据类型(Fundamental Data Types)
tyst08
博客等级 码龄19年 1822粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值