// I have a comment ----Delphi 研发人员谈注释 (翻译版)

Claude4.6科研指令协议:多跳推理链与结构化输出的工程实践 科研大模型交互正从模糊问答迈向可验证、可协作、可审计的学术生产范式。其核心在于支持多跳推理链的显式声明与过程锁定,结合上下文锚定、硬约束执行和机器可读输出格式,实现推理路径可追溯、结论可证伪、结果可复现。这种能力依托于领域定制的指令协议——而非通用提示词——将隐性科研经验转化为结构化数字资产,显著提升跨学科协作效率与学术严谨性。本文聚焦Claude4.6在真实科研场景中的落地逻辑与高鲁棒性指令构建方法。 阅读详情

 

 

摘要:Robert Kozak, 来自Delphi R&D, 讨论关于正确的代码编写方法.

// 我的注释

by Robert Kozak (Delphi R&D)

两个月以前,我有机会去回顾一下第一次为Delphi工作的时候所编写的一些代码。我实在是不愿意承认那是我写的-因为实在是太糟糕了。这当然是一段令人羞辱的经验。我的技术自从那个时候以来已经有了长足的进步。事实上,我注意到了在这几个月里我的改变。不知道你是否曾经回过头去看看半年前你写的代码。我敢打赌你脑海中一定是“我在想什么呢?我肯定不会这样写的。”

如果你曾经不得不维护你上一个项目的代码,我敢打赌那一定是很痛苦的。更令人痛苦的是你不得不去维护其他人的代码。唯一一种可以使这种痛苦减轻的方法就是代码具有好的注释。注意我说的是“好的”注释。不好的注释实际上还不如没有注释。举例来说,我们看看下面这段代码,它都做了些什么?



上面的这段注释没有任何意义,它无法告诉你这段代码的功能。还有更好的吗?




写出好的注释的诀窍就是问问自己为什么要写这段注释。在你的注释里,不要试图去写代码是怎么工作的,而是要解释你为什么要写它。特别是,你写的注释如果走对了路的话,它们会很精简。


(* 注释的种类 *)

注释分五个基本的类型。我会按照由差到好的顺序解释他们


重复代码

这种类型的注释只是用另外一种方式重新描述了一便代码,而没有任何其他的附加信息。这种注释要绝对避免。

解释代码

这种类型的代码常常是解释一段复杂的或是技巧性的代码。这种类型的注释比较容易理解,它们对于重写这段代码一般是比较有帮助的。

标记

标记一般是为你自己或者是你小组里的其他成员所做的一段临时的信息。现在Delphi 5的编译器可以识别//TODO 注释。最初,我使用 //rk: 而我的一个朋友使用 //// 来标记代码,这些标记在项目完成以后都是应当去掉。

代码功能的概括

这种类型的注释以简短的语言概念了代码的功能。这比仅仅简单的重复代码要好的多,因为它可以让一些不熟悉你的代码的人快速的浏览你的代码。

描述代码的目的

这种是解释代码的意图,换句话来说,是解释为什么这样写代码。这种类型的注释很容易阅读,并且提供了理解代码的必要信息。



{注释的方法}

好,现在我们知道应该使用后两种类型的注释(代码的总结和描述代码目的)。让我们来看一些可以适当的使用它们的技术。这里有5个基本的区域可以使用注释: 只有一行的代码,代码段,数据结构,函数,单元和工程。


只有一行的代码

如果希望写出好的注释(这正是我们的目的所在,不是吗?),那么在只有一行的代码中只能使用两种注释。第一种,这行代码很复杂,需要进行解释。尽管重新编写一段复杂的函数来澄清它的意图是比较容易的,但是对于一行代码来说却很难。第二种,这行代码有错误,你想记录下来以便以后修改。

我一般会在在一行代码后面紧接一段注释。就象下面这样:




这种方法一般会因为没有的足够空间来澄清代码的意图而演变为重复代码。它也因为很难保持代码的排列和对齐而趋向于使用缩写词。唯一一种合适的用途是用来解释数据声明、维护注释或者是一段代码的结束标记(例如 //end if, //end while 等)。数据声明会因为这种注释而尽量短,因为这样可以留出更多的空间来注释。如果在每一个数据声明的上面都加上这种注释的话,会难以保持数据声明的连贯性。维护注释一般要尽量的短,主要是记录初始化信息、数据和错误数目。它一般并不是真正的注释代码的意图,所以用这种方式(代码后紧跟注释)是比较合适的。

代码段

这是最常用的(也是最好的)一种方法来注释你的代码。用这种方式注释要描述清楚代码的意图。不要忘记,要集中描述“为什么”而不是“怎么做”。这种类型的注释要为读它的人说明接下来要做什么,他们可以通过注释搞清楚代码在做什么。

数据结构声明

这里的注释用来描述变量声明以及描述变量的名字所不能表达出来的东西。例如变量的单位(公里、英尺、磅等)。变量注释应当出现在变量声明的地方,如果你有一些标记型变量(flag bariables),它们每一位都有不同的含义,那么它们都需要注释。

函数

有些人会告诉你,每一个函数都需要一个巨大的统一风格的注释,这真是可笑。简单的来说,这样会使注释很难以阅读,并且距离它所描述的代码也很远。好的注释应当在它所描述的代码的附近,而且一般来说几行就足够了。如果要经常考虑到函数的细节问题,就需要稍微多一点详细信息,看下面这个例子:



我经常会在这段代码上遇到麻烦,因为我总是忘记哪一个是 Sender 哪一个是Target。即使在我自己的代码里面,在带有这种 Sender 和 Target的函数里,我仍然会忘记哪一个是导入的变量,哪一个是导出的变量。这里加上注释可以在很大程度上减轻这种混乱。还有其他一些可以放在函数注释里面的是(如果需要的话):接口设想,修改历史记录,函数的限制,全局的影响,算法的来源以及使用的设计模式。


单元和工程

最后,我们讨论到单元和工程。当给一个单元和工程文件注释的时候,可以用简短的语言描述每一个文件的目的,也可以包含修改历史记录、主要对象的描述和使用的设计模式。也可以包含你的名字和联系方式(电话号码或email),这样如果有人维护你的代码的时候,他们可以和你联系。另外,如果有版权信息的话,也可以加进去。


//end file

如果你认为我说的有道理,你就应当好好提高写注释的技巧。编写注释不是一件困难和费时费力的事情。只要记住,代码说明“怎么做”,而注释说明“为什么”。如果能一直记住这一点的话,我想就连我也能看懂你的程序。


{ TODO: 更多的信息请看 Code Complete by Steve McConnell, Microsoft Press }



广义标签多伯努利滤波器(GLMB):多目标跟踪中的动态身份维护理论与算法解析 目标集表示Xx1l1x2l2xNlNX{(x1​l1​x2​l2​xN​lN​)}xi∈Rdxi​∈Rd为目标状态(如位置、速度),li∈Lli​∈L为唯一标签(可数无限集,如自然数序列),N 为目标数(允许N0N=0N0,即空集)。GLMB 通过广义化标签多伯努利分布,将多目标跟踪从 “状态估计” 提升至 “动态身份 - 状态联合建模”,成为复杂场景下精准跟踪的核心技术。 阅读详情

相关推荐

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码)

本文详细介绍了如何使用Python爬虫快速抓取东方财富网的股票数据,包括环境配置、API分析、核心代码实现及优化技巧。通过简单的requests和pandas库,5分钟内即可获取高质量股票数据,适合量化交易和数据分析初学者。

weixin_29040367的博客 1183

// I have a comment ----Delphi 研发人员谈注释 (翻译版) (转)

// I have a comment ----Delphi 研发人员谈注释 (翻译版) (转)[@more@] 摘要:Robert Kozak,来自Delphi R&D, 讨论关于正确的代码编写方法. /...

csd3176的博客 213

第二次 PX4仿真环境搭建过程全记录

参考链接 https://blog.youkuaiyun.com/yanwumuxi/article/details/80097294 https://www.ncnynl.com/archives/201709/2013.html 一、安装依赖项 我们使用Debian / Ubuntu LTS 作为Linux的标准支持版本,但是也支持Cent OS 和 Arch Linux的发行版本。 权限设置 警告:永远...

移步换景的博客 2262

// I have a comment ----Delphi 研发人员谈注释 (转)

// I have a comment ----Delphi 研发人员谈注释 (转)[@more@] Abstract:Robert Kozak, from Delphi R&D, talks about proper...

cuiji1279的博客 334

基于STM32的多路火灾报警系统设计

本文设计了一款基于STM32的多路火灾报警系统,利用多个传感器组合(如烟雾传感器、温度传感器等)进行数据采集与处理,精确判断火灾情况,并及时发出报警信号,保障生命与财产安全。本系统设计了一款基于STM32的多路火灾报警系统,通过结合烟雾传感器和温度传感器,提升了火灾检测的准确性和可靠性。未来,系统可以进一步集成更多传感器,如气体传感器、湿度传感器等,进一步提升火灾报警系统的智能化水平。本系统采用STM32F103单片机作为核心处理单元,结合烟雾传感器、温度传感器和报警模块,实现多通道火灾报警功能。

stm32d1219的博客 2029

手把手教你用手机号注册的Apple ID成功登录Developer账户(避坑指南)

本文详细解析了使用手机号注册的Apple ID登录开发者账户时常见的'不符合使用条件'报错问题,并提供了从添加可验证邮箱到设置主账号的四步解决方案。特别针对Apple Developer账户的验证机制,帮助开发者避免因邮箱缺失导致的登录失败,提升账户激活成功率。

z5a6b的博客 1220

编译器 | 从工业实现到极简设计 —— 编译器的多元形态与实践

……

u013669912的博客 888

ComfyUI的G-Dino模型加载器报错解决方案:从崩溃到重生

遇到G-Dino模型加载器报错不要慌,按照本文的步骤操作,99%的问题都能解决。模型文件正确下载到指定位置segment_anything节点安装完整且无冲突需要补充更多细节或故障排除方法吗?可以随时告诉我。

2301_78150483的博客 4023

【数据结构】基于比较的排序算法 - 交换排序

本文介绍交换排序中的冒泡排序与快速排序。冒泡排序通过相邻元素比较交换,实现升序,时间复杂度最坏为O(N²),空间复杂度O(1),稳定且适合小规模有序数据。快速排序采用分治思想,以基准值划分区间,平均时间复杂度O(N log N),空间复杂度O(log N),但不稳定,实际应用中性能优异,可通过随机基准、小区间优化等提升效率。

careathers的博客 340

NVIDIA Isaac Sim 入门教程 - 运动生成控制器(Motion Generators)

机器人任务通常在任务空间中根据所需的末端执行器轨迹进行定义,而控制动作则在关节空间中执行。这自然会产生关节空间和任务空间(操作空间)控制方法。然而,要利用运动控制成功执行交互任务,往往需要对机械臂及其环境都建立精确的模型。虽然可以知道足够精确的机械臂模型,但很难获得详细的环境描述 [SSVO09]。可以通过在交互过程中引入顺应行为来克服这种不匹配造成的规划错误。虽然顺应性可以通过机器人的结构(如弹性致动器、软机械臂)被动实现,但我们对侧重于主动交互控制的控制器设计更感兴趣。这些设计大致分为注释。

2506_90492529的博客 1578

OKX 欧易 交易机器人开发基础

接口文档: https://www.okx.com/docs-v5/zh/#overview REST API 常用请求 查看账户余额 结果数据格式: 获取限价 结果格式: 获取指数行情 数据结构: 下单 结果数据: 获取未成交订单列表 返回结果: 撤单 结果结构:

Willin Wang 的全栈升级指南 2万+

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 177

振镜控制卡硬件接口揭秘:XY2-100/SL2-100协议对比

本文对比分析了工业振镜控制领域两种主流数字通信协议XY2-100和SL2-100的硬件接口差异与应用场景。XY2-100作为开放式协议兼容性强,采用LVDS差分信号传输,适用于激光打标等中高精度场景;SL2-100为半封闭协议,采用RS485差分信号,专为高速响应场景设计。文章详细解析了两种协议的引脚定义、通信机制和性能参数,指出XY2-100适配多品牌振镜且调试简单,SL2-100则更适合Nutfield专用设备的高速高精度需求。最后提供了接口调试的实操建议和选型逻辑,强调应根据具体应用场景的精度、速度和

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 639

C# 数据结构和特殊类型

.NET Core(现称.NET)提供丰富数据结构,优化性能与开发效率。日常开发首选List<T>和Dictionary<TKey,TValue>;高性能场景推荐Span<T>与Memory<T>减少内存分配;并发环境使用ConcurrentDictionary等线程安全集合;避免非泛型集合如ArrayList。

cccloveforever的博客 673

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

pandas 深度入门:从数据结构到一份真实销售报表

本文系统讲解Pandas核心应用,从三分钟安装到完整月度报表生成,涵盖数据读取、清洗、筛选、分组聚合、表连接、透视表与时间序列等13个关键环节。强调“先看数据再动手”,掌握Series/DataFrame/Index结构本质,熟练运用loc/iloc、merge校验、agg/transform区别,通过真实案例实现高效报表自动化,告别手动Excel操作。最后提供性能优化与高频报错解决方案,助力读者快速上手,真正实现“写二十行代码,跑三秒出结果”。

信息安全领域优质创作者|操作系统领域专家 272

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

工单系统的数据结构化:故障分类体系设计与报表可用性

很多团队上完工单系统半年,会发现一个尴尬的事实:单子照常在走,报表却始终出不来。导出的 Excel 几千行,看不出趋势、算不出口径、答不了"哪类故障占大头"。问题几乎都不在系统,而在数据模型的第一层——。这篇文章把这件事拆开讲:自由文本为什么会失效、分类体系怎么分层、表怎么建、老数据怎么迁、上线前怎么验收。

ITyunwei0987的博客 283

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数据结构的基本概念和算法的初步认识

本文系统阐述数据结构与算法的基础概念,涵盖数据、数据元素、数据对象的层次关系,数据结构的三要素(逻辑结构、存储结构、数据运算),以及抽象数据类型。重点解析算法的特性与设计要求,并深入讲解时间复杂度分析的核心——大O表示法,通过“只保留最高阶项、忽略常数系数、取最坏情况”三大原则,结合实例剖析O(1)、O(n)等常见时间复杂度,揭示算法效率的本质评估方法。

ACH_YYX的博客 174

[C++高阶数据结构·图论下] 最短路径:为什么“挑最小的”一定正确?

本文系统对比最小生成树与最短路径的核心差异,聚焦三类最短路算法:Dijkstra(非负权、贪心确认)、Bellman-Ford(可负权、反复松弛)、Floyd(全源、分层中转)。核心区别在于:MST 关注“连通所有点”的最小代价(边数固定),而最短路关注“两点间路径最短”(边数可变)。关键反直觉点是:负权对 MST 无害,却使 Dijkstra 失效——因“绕远更近”破坏贪心前提。算法本质反映三种处理不确定性的策略:确认式(Dijkstra)、迭代修正(Bellman-Ford)、分层逼近(Floyd)。强

Tairitsu_青云 518

数据结构:9.Map和Set

有的讲解会说这里key是标识作用,这种说法其实没有太大意义,就算知道了他是标识value的作用又如何,在实际的使用过程中,我们只会根据具体的效果选择使用的方法等,不会执着于“标识”这种说法。2.由于哈希函数的设计原则太过理论,它仅仅是在认为:这些通过关键码算出来的index不同 的情况下设计的,然而这种理论化的设计原则在遇到冲突时,恰恰就出现了问题,而我们能做的,就是降低冲突率。虽然哈希表的使用过程中存在冲突,但是在实际的使用过程中,哈希表的冲突率是不高的,冲突的个数是可控的。

2602_95646088的博客 195

Redis 数据结构、单线程架构与 String 字符串详解

Redis采用单线程架构,通过事件循环(Event Loop)高效处理I/O事件,避免阻塞。其核心优势在于内存操作快、无上下文切换开销。数据结构支持多种内部编码(如ziplist、quicklist),自动根据场景优化存储与性能。字符串类型是基础且灵活,可存文本、数字或二进制数据,最大512MB,支持原子操作。命令如SET、GET、MGET、MSET等实现高效读写,适用于缓存、计数、会话管理等场景。

2303_77004089的博客 341

[C++高阶数据结构·图论上] 最小生成树:为什么“选边”和“选点”是两条路?

本文系统讲解最小生成树(MST)的核心思想与两大算法:Kruskal与Prim。强调MST目标是用最小权值总和连接所有顶点形成一棵树,而非单边最小。通过三条构造准则(用图中边、恰n-1条边、无环)统一框架。Kruskal按边贪心,依赖并查集判环,适合稀疏图;Prim按点扩张,利用割集特性天然避免成环,需起点,适合稠密图。两算法本质差异在于“判环”机制与数据结构选择,且与最短路径问题在连通性、负权处理上截然相反,需分篇厘清。

Tairitsu_青云 222

笔记-论数据结构3(算法分析-时间复杂度)

i <= n;s = 0;次数1234ti1248?i2^02^12^22^32^t-1在遍历的过程中,2^t-1次方的增长率肯定大于n,可得出结论2^t-1 > n那么,为了得出t和n的关系,我们可以运用对数关系:log2为底2^t-1 > log2为底n消掉log2为底2t-1 > log2为底nt > log2为底n+1于是可以得出。

fish_zzzz的博客 224

Vue3 低代码移动表单设计器实战(二):缩放画布下的拖拽系统与树状级联数据结构

本文深入剖析Vue3低代码表单设计器在缩放画布下的拖拽失效问题,揭示SortableJS在CSS Transform下坐标崩溃的数学根源。通过自研独立视觉克隆壳层与逆向几何补偿算法,实现精准拖拽;采用扁平数据存储+运行时树状计算结构,解决级联依赖与深克隆难题,确保逻辑一致性与性能优化,为复杂低代码系统提供可复用的工程范式。

NanChen的博客 341

排序算法深度笔记(上):比较类排序的思想演进与代码实现

与。本文聚焦前者 —— 也就是通过元素间两两比较来确定相对顺序的排序算法,从最朴素的 O (n²) 基础排序,到工业级主流的 O (nlogn) 进阶排序,逐层拆解设计思想、带注释的代码实现与边界细节。当我们理解了比较排序的性能边界,也就自然引出了非比较排序的存在意义。所有代码均遵循统一的实现规范:入口函数前置空数组与单元素边界校验,基于数组原地修改,主函数附带可直接运行的测试用例,与练习代码风格完全对齐。

2401_87069538的博客 609

笔记-论数据结构2

typedef 数据类型 别名return 0;typedef也经常用在结构体上:每次声明结构体变量都要写struct关键字,很麻烦,而且逻辑上也很难受,typedef可以解决这个问题。int x;int y;p.x = 5;p.y = 10;return 0;而利用typedef解决有两种解法:typedef struct 结构体名数据类型 变量名;数据类型 变量名;……}别名;数据类型 变量名;数据类型 变量名;……}别名;实际的运用int x;

fish_zzzz的博客 105

【数据结构】树和二叉树(下):讲透四种遍历、递归返回值与经典题

🔥 星光编译者📚 学习专栏:《C/C++ 成长笔记》《Linux 实践手册》《数据结构与算法》🌄 向云端飞扬,编译属于自己的代码星河。☕ 写在开篇你好,这里是星光编译者。这里记录我在C/C++、Linux、数据结构与算法学习中遇到的真实问题、亲手验证过的代码,以及那些容易被忽略的实现细节。比起简单罗列结论,我更愿意从问题出发,把一个知识点的来由讲清楚,把“为什么会这样”和“应该怎样解决”说明白,让每一次踩坑都沉淀成可以复用的经验。如果这篇记录能帮你少绕一点路。

星光编译者的技术博客,专注 C/C++、Linux、数据结构与算法。 419
上一篇: 利用热键控制鼠标移动的一个程序
下一篇: SharpDevelop源码分析 (一、序+基本概念)
石榴刺猬
博客等级 码龄26年 62粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值