《代码整洁之道》读后总结 -- 关于注释

关于注释的简单思考:

  • 注释的目的,在于使代码查看者能够快速的理解代码表达意思
  • 而表达意思的有:代码 + 注释 + 程序结构 + ...
  • 程序的结构一定有安排好,取决于分类管理,组织能力。
  • 代码的表达力:通过命名,清晰的逻辑,适当的模块化表现出来。
  • 注释一方面用来弥补代码表达力的缺陷(KEY),另一方面用来自然语言快速表达意思。但注释本身就存在着一些缺陷,比如说:让程序的结构混乱,自然语言表达的不准确引起错误理解。


摘自《代码整洁之道》


1.注释总述

1.1.注释的恰当用法 是弥补我们在 用代码表达意图时遭遇的失败

1.2 .注释会撒慌

  • 注释存在的越久,离其所描述的代码越远,越来越变得错误。 ( reason :程序员不能坚持维护注释)
  • 代码在变动,演化。但是注释不一定。导致代码与注释演化的不同步,从而给程序员造成理解上的错误。

1.3.我们要尽量减少注释量

  • 将更多的精力放在代码表达力上。
  • 代码忠实告诉我们它做的事情
  • 注释不能美化糟糕的代码。
  • 与其花时间为糟糕的代码注释不如花时间 清洁糟糕的代码


2. 好的注释

例子 : 标准java库中的javadoc是好注释的例子。(学习其注释的风格,但不要在自己程序上全部注释)

2.1.法律信息

  • 一般,公司代码规范要求编写与法律相关的注释。(如:版权,著作权)

2.2.提供信息的注释

  • 用注释来提供基本的信息也有其用处。

2.3.对于意图的解释

  • 注释不仅体现了有关现实的有用信息【功能,用法等】,并且体现了某个决定后面的意图【目的】。

2.4.阐释

  • 注释把某些晦涩难懂的参数或返回值的意义 解释 为 某种可读形式。
  • 尽量使用命名来表达意思,若不能修改参数名等(库函数),在考虑使用阐释。

2.5.警示

  • 用于警告其他程序员会出现某种后果的注释。(比如说:某个方法会消耗大量时间)

2.6.TODO注释

  • 用来在源码中放置要做的工作列表。(将来打算做什么?为什么还没做?)

2.7.放大

  • 注释可以用来放大某种不合理之物的重要性。


3.坏的注释

3.1. 喃喃自语

  • 如果需要添加注释,就有必要写出最好的注释。【表意清晰】
  • 如果作者喃喃自语,表达不清楚自己的想法(对于作者来说可能有意义),对于后续工作者来说将是一个谜团。

3.2.多余的注释

  • 注释若不能提供比代码本身更多的信息,并且读它并不比读代码容易。
  • 注释不如代码精确,甚至可能误导读者。

3.3.误导性注释

  • 不精确的注释有误导作用。所以代码的注释,一定要反复斟酌。

3.4.循规式注释

  • 每个函数都有javadoc , 每个变量  都有注释的 规矩是愚蠢可笑的。(这种注释让代码变的散乱,不易让人理解)

3.5日志式注释

  • 每次编辑代码,都在文件头部写注释。(类似于日志)【因为版本控制器的存在,应该抛弃这种方式】

3.6.废话注释

  • java语法中包含的信息(再次用注释表现)等,重复已经众所周知的内容。

3.7.能用函数或者变量时就不要注释

3.8.归属与签名

  • 已经被版本控制系统替代。

3.9.注释掉的代码

  • 直接把代码注释掉很让人恶心,造成混乱。
  • 会导致后来的代码维护者 不敢 删除注释掉的代码。(越累计越多)
  • 有些注释代码可能后来确实会用到,但是现在 版本控制器 可以做到。

3.10.信息过多

  • 代码中注释的信息,应该是简单的,有针对性的。
  • 不要在注释中讲故事,以及一些不相关的事情。

3.11.不明显的联系

注释和代码之间的联系,应该是显而易见的。



深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值