zoukankan      html  css  js  c++  java
  • 千万要避免的五种程序注释方式

    你是否有过复查程序时发现有些注释毫无用处?程序注释是为了提高代码的可读性,为了让原作者以外的其他开发人员更容易理解这段程序。

    我把这些让人郁闷的注释方式归为了五类,同时把写出这些注释的程序员也归为了五类。我希望读了这篇文章后你感觉自己不属于其中的任何一种类型。如果你有兴趣的话可以读一下另外一篇文章 五种程序员(英文),和这篇讲到的五种程序员对比一下。

    1. 高傲的程序员

    public class Program
    {
        static void Main(string[] args)
        {
            string message = “Hello World!”;  // 07/24/2010 Bob
            Console.WriteLine(message); // 07/24/2010 Bob
            message = “I am so proud of this code!”; // 07/24/2010 Bob
            Console.WriteLine(message); // 07/24/2010 Bob
        }
    }

    这种程序员是如此的欣赏自己的程序,以至于不得不在每行代码上都署上自己的大名。应该让版本控制系统来提供程序变更的信息,他这样做一眼看去并不能说明谁对这行代码负责。

    2. 过时的程序员

    public class Program
    {
        static void Main(string[] args)
        {
            /* 这段程序已经不再有用
             * 因为我们发现千年虫问题只是一场虚惊
             * 我们的系统不会恢复到1/1/1900 */
            //DateTime today = DateTime.Today;
            //if (today == new DateTime(1900, 1, 1))
            //{
            //    today = today.AddYears(100);
            //    string message = “The date has been fixed for Y2K.”;
            //    Console.WriteLine(message);
            //}
        }
    }

    如果一段程序不再有用(比如废弃了),那就删了它吧——不要被几行没用的注释搞的程序混乱不堪。即使你可能以后重用这段代码,你也可以使用版本控制系统,用它把你的程序恢复到以前的样子。

    3. 天真的程序员

    public class Program
    {
        static void Main(string[] args)
        {
            /* 这个程序是用来在屏幕上
             * 循环打印1百万次”I Rule!”
             * 每次输出一行。循环计数
             * 从0开始,每次加1。
             * 当计数器等于1百万时,
             * 循环就会停止运行*/
            for (int i = 0; i < 1000000; i++)
            {
                Console.WriteLine(“I Rule!”);
            }
        }
    }

    基本的编程语法规则我们大家都知道——我们不需要“编程入门”。你不需要浪费时间来解释一个显而易见的东西,我们更希望知道的是你的程序功能——那是浪费空间了。

    4. 传奇的程序员

    public class Program
    {
        static void Main(string[] args)
        {
           /* 有一天我在大街上的一家星巴克里
            * 和销售部的Jim讨论问题,他告诉我
            * 销售代表是依据以下的比例提取佣金的。
            * 周五: 25%
            * 周三: 15%
            * 其它日期: 5%
            * 我是否告诉你过我点了一个卡拉梅
            * 铁咖啡和两份的Espresso? 
           */
            double price = 5.00;
            double commissionRate;
            double commission;
            if (DateTime.Today.DayOfWeek == DayOfWeek.Friday)
            {
                commissionRate = .25;
            }
            else if (DateTime.Today.DayOfWeek == DayOfWeek.Wednesday)
            {
                commissionRate = .15;
            }
            else
            {
                commissionRate = .05;
            }
            commission = price * commissionRate;
        }
    }

    如果你不得不在注释里写明需求,那也不要提到人名。销售员Jim很可能在公司里不再是销售。而且大多数读到这段注释的程序员未必都知道Jim是谁。你描述的是实际情况但跟我们的内容不相干,所以就省掉吧。

    5. 未来程序员

    public class Program
    {
        static void Main(string[] args)
        {
           //TODO: 将来我会修复这个问题 – 07/24/1995 Bob
           /* 我知道这个问题很难解决而且
            * 我现在依赖于这个Contains函数,但
            * 我以后会用一种更有意义,更
            * 优雅的方式打印这段代码。
            * 我只是现在没时间。
           */
           string message = “An error has occurred”;
           if(message.Contains(“error”))
           {
               throw new Exception(message);
           }
        }
    }

    这种注释是一种集大成者,它包含了上面所说的注释的所有问题。TODO注释在一个项目最初的开发阶段是非常有用的,但这个注释看起来是在好几年前的产品程序里的——它证明了程序有问题。如果程序有问题需要解决,马上解决,不要拖到日后再解决。

    如果你不幸是生成这些类型注释的人,或者你想学习注释用法的最佳实践,我推荐你阅读Steve McConnell写的Code Complete(《代码大全》)。这是一本我建议程序员必读的书籍,CSDN 地址 http://blog.csdn.net/justjavac/article/details/7865418

    你是否在自己的代码中看到了其它类型多余或扰人的注释?请不吝分享。

    扩展阅读:十大注释技巧教你如何书写容易阅读的代码

  • 相关阅读:
    Python Revisited Day 13 (正则表达式)
    Python Revisited Day 06 (面向对象程序设计)
    Python Revisited (变量)
    Python Revisited Day 05(模块)
    Python Revisited Day 04 (控制结构与函数)
    Python Revisited Day 03 (组合数据类型)
    Numpy
    Python Revisited Day 01
    Python3使用openpyxl读写Excel文件
    Python3操作YAML文件
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468244.html
Copyright © 2011-2022 走看看