继上一篇笔记之后,今天我们讨论一下 代码中是存在注释是否是一件好的事情。

在我们开发的过程中讲究“名副其实,见名识意”,这也往往是很多公司的要求,但是有了这些要求是不是我们的代码中如果存在注释是不是意味着我们的 函数,变量,以及类 的命名就不符合了“名副其实,见名识意”。

我们先区分一下注释的类别,注释一般分为以下几种:

  • 1, 单行注释
  • 2, 多行注释
  • 3, 文档注释
  • 4, #region 折叠注释,可以将 代码折叠

注释的类别

1, 单行注释:

在以 “//” 开头,用以说明一行代码的作用放置位置 看习惯或者公司要求合理就行。常用于函数内部,在很多的开源代码中文件的头部我同样见到很多人使用单行注释进行说明,灵活就好。
体现形式如下:

 public List<string> getVipUserNameByUserType()
          {
            // Vip user name list
            var vipUserNames = new List<string>();

            foreach (var user in Users)
            {

                if (user.Type = "VIP")

                    vipUserNames.Add(user.Name);
            }
            return vipUserNames;

          }

2, 多行注释:

以“/*”开头 “*/” 结尾 常用于描述说明一段代码以及类注释或者说代码块常用于文件的顶部。说明作者信息,时间如果是开源的这包含开源的更多说明。
通常使用如下:

/*
    * 作者:〈版权〉
    * 描述:〈描述〉
    * 创建时间:YYYY-MM-DD
    * 作用:
*/

3, 文档注释:

也就是常用的XML 注释:它的说明性更加的强烈,多用于类以及函数上,当然属性上同样可以使用:
如下所示:

        /// <summary>
        /// MyClass
        /// </summary>
        public class MyClass
        {
            /// <summary>
            /// MyProperty
            /// </summary>
            public int MyProperty { get; set; }
            /// <summary>
            /// MyMethod
            /// </summary>
            public void MyMethod(){  }
        }

以下是官方建议的文档标记 点击标签会制动跳转

4, #region : 折叠注释,常用于描述多个函数的基本作用

书中最喜欢的话

好的注释不能美化糟糕的代码,真正好的注释是你想尽办法不去谢的注释。怀注释都是糟糕代码的支撑或借口,或者是对错误决策的修正。

下面看一个例子

       //Check to see if the employee is eligible for full benefits
()If((employee.flags & HOURLY_FLAG)&& (employee.age>))

()If(employee.isEligibleForFullBenefits()))

  这两个你更喜欢哪个

好的注释的特征:

1:表示法律信息(这样的注释一般出现在文档顶部说明作用以及协议)

// Copyright (c) .NET Foundation. All rights reserved
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

2:提供信息的注释(指无法通过命名提供信息如要 注释辅助的)

public void ConfigureServices(IServiceCollection services)
{

// These two middleware are registered via an IStartupFilter in UseIISIntegration but you can configure them here.

services.Configure<IISOptions>(options =>
{});

}

3:对意图的解释

4: 警示:告知其他人会出现某种后果的注释

5: TODO注释: 主要描述应该做的目前还没有做的事情。

6: 放大:提示不合理之物的重要性。

应避免的注释

应该避免以下几点:

1: 误导性注释

2: 日志式注释

3: 废话注释

4: 标记位置的注释

5: 括号后的注释

6: 归属与签名

7: 注释掉的代码

8: Html 注释

以上没有一一举例的原因是我的PPT是一份演示的PPT,里面很多公司的代码不便贴出,抱歉。

不足之处还请指出

Clean Code 笔记 之 第四章 如何应用注释的更多相关文章

  1. 【NPDP笔记】第四章 文化组织与团队

    此为临时链接,仅用于预览,将在短期内失效.关闭 [NPDP笔记]第四章 文化组织与团队 小康 小康哥的产品之路 9月6日 4.1 文化和氛围对创新的重要性 文化:信念,价值观,假设,与期望 氛围:直接 ...

  2. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化 学习目标 对Direct 3D编程在 ...

  3. Clean Code 笔记 之 第二章

    你是否真正的会命名 前言 这是我第二次看这本书了(Clean Code)的时候,第一次看的时候是,看到某世界五百强在他们的代码中我竟然看不到一句注释,现在我还记得当时的情景,当我Download 下第 ...

  4. 代码整洁之道Clean Code笔记

    @ 目录 第 1 章 Clean Code 整洁代码(3星) ?为什么要整洁的代码 ?什么叫做整洁代码 第 2 章 Meaningful Names 有意义的命名(3星) 第 3 章 Function ...

  5. win32多线程程序设计笔记(第四章下)

    上一笔记讲了同步机制中的临界区域(Critical Sections).互斥器(Mutexes),下面介绍同步机制中的另外两种. 信号量(Semaphores) 举个例子: 现在有人要租车,接待他的代 ...

  6. 05 技术内幕 T-SQL 查询读书笔记(第四章)

    第四章 子查询:在外部查询内嵌套的内部查询(按照期望值的数量分为,标量子查询 scalar subqueries,多值子查询multivalued subqueries)(按照子查询对外部查询的依赖性 ...

  7. Linux内核分析 读书笔记 (第四章)

    第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间.进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限 ...

  8. 《深入理解java虚拟机》读书笔记三——第四章

    第四章 虚拟机性能监控与故障处理工具 1.JDK命令行工具 jps命令: 作用:列出正在运行的虚拟机进程. 格式:jps [option] [hostid] 选项:-q 只输出LVMID(Local ...

  9. 《机器学习实战》学习笔记第十四章 —— 利用SVD简化数据

    相关博客: 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA) <机器学习实战>学习笔记第十三章 —— 利用PCA来简化数据 奇异值分解(SVD)原理与在降维中的应用 机器学习( ...

随机推荐

  1. PHPStorm 10 配置PHPUnit

    PHPStorm 10 配置PHPUnit PHPUnit的安装 自己用的是Xampp,PHPUnit好像自带不好用. 不说废话: 自己看 According to official site htt ...

  2. Java网络编程(一)Socket套接字

    一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...

  3. 修改linux系统history命令的条数和格式

    在一次测试环境遇到的情况,发现服务莫名其妙挂了,以为服务有bug,查了一下午,后来一个同事说,是我把服务关了啊.... 是可忍孰不可忍,原生的history命令,只能看到输入的命令历史,看不到什么时候 ...

  4. 第五篇 Flask 中内置的 Session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from ...

  5. vue项目如何在node启动

    首先将vue项目通过命令npm run build 打包,然后创建start.js,代码如下: // const userApi = require('./api'); const fs = requ ...

  6. 【重构】AndroidStudio中代码重构菜单Refactor功能详解

    代码重构几乎是每个程序员在软件开发中必须要不断去做的事情,以此来不断提高代码的质量.Android Stido(以下简称AS)以其强大的功能,成为当下Android开发工程师最受欢迎的开发工具,也是A ...

  7. 转:nginx和php-fpm的两种通信方式

    原文地址:https://segmentfault.com/q/1010000004854045 Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP,一种是UNIX Domain Sock ...

  8. 分布式id生成方案总结

    本文已经收录自 JavaGuide (60k+ Star[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.) 本文授权转载自:https://juejin.im/post/ ...

  9. csp-s模拟测试101的T3代码+注释

    因为题目过于大神所以单独拿出来说.而且既然下发std了颓代码貌似也不算可耻233 很难讲啊,所以还是写在代码注释里面吧 因为比较认真的写了不少注释,所以建议缩放到80%观看,或者拿到gedit上 1 ...

  10. [考试反思]1104csp-s模拟测试100: 终结

    这么好的整数场,就终结了我连续莫名考好的记录. 功德圆满了... 还是炸了啊.而且炸的还挺厉害(自己又上不去自己粘的榜单啦) 说实在的这场考试做的非常差劲.虽说分数不算特别低但是表现是真的特别差. T ...