• Code Annotation


    好的注释风格:

    一、注释Why

    注释应该是注释Why,而不是How和What。代码告诉你How,而注释应该告诉你Why。但大多数的程序并不知道什么是好的注释,那些注释其实和code是重复的,毫无意义。



    应该避免的代码注释

    一、自恋型注释

    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
        }
    }

    这样的程序员对于自己的代码改动非常骄傲和自恋,所以,他觉得需在在这些自己的代码上标上自己的名字。其实,一个版本控制工具(如:CVS或Subversion)可以完整地记录下所有的关于代码的改动的和作者相关的一切信息,只不过不是那么明显罢了。

    二、废弃代码的注释

    public class Program
    {
        static void Main(string[] args)
        {
            /* This block of code is no longer needed
             * because we found out that Y2K was a hoax
             * and our systems did not roll over to 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);
            //}
        }
    }

    如果某段代码不再使用了,那就应该直接删除。我们不应该使用注释来标准废弃的代码。同样,我们有版本控制工具来管理我们的源代码,在版本控制工具里,是不可能有代码能被真正的物理删除的。所以,你总是可以从以前的版本上找回你的代码的。

    三、明显的注释

    public class Program
    {
        static void Main(string[] args)
        {
            /* This is a for loop that prints the
             * words "I Rule!" to the console screen
             * 1 million times, each on its own line. It
             * accomplishes this by starting at 0 and
             * incrementing by 1. If the value of the
             * counter equals 1 million the for loop
             * stops executing.*/
            for (int i = 0; i < 1000000; i++)
            {
                Console.WriteLine("I Rule!");
            }
        }
    }

    看看上面的例子,代码比注释还容易读。是的,大家都是程序员,对于一些简单的,显而易见的程序逻辑,不需要注释的。而且,你不需要在你的注释中教别人怎么编程,你这是在浪费时间去解释那些显而易见的东西。你应该用注释去解释你的代码功能,原因,想法,而不是代码本身。


    四、故事型注释

    public class Program
    {
        static void Main(string[] args)
        {
           /* I discussed with Jim from Sales over coffee
            * at the Starbucks on main street one day and he
            * told me that Sales Reps receive commission
            * based upon the following structure.
            * Friday: 25%
            * Wednesday: 15%
            * All Other Days: 5%
            * Did I mention that I ordered the Caramel Latte with
            * a double shot of 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,如果有不懂的,你可以去问他。其实,这根本没有必要在注释中提到一些和代码不相干的事。

    五、“TODO”注释

    public class Program
    {
        static void Main(string[] args)
        {
           //TODO: I need to fix this someday – 07/24/1995 Bob
           /* I know this error message is hard coded and
            * I am relying on a Contains function, but
            * someday I will make this code print a
            * meaningful error message and exit gracefully.
            * I just don’t have the time right now.
           */
           string message = "An error has occurred";
           if(message.Contains("error"))
           {
               throw new Exception(message);
           }
        }
    }

    当你在初始化一个项目的时候,TODO注释是非常有用的。但是,如果这样的注释在你的产品源码中出现了N多年,那就有问题了。如果有BUG要被fix,那就Fix吧,没有必要整一个TODO。

    作者:Angelo Lee
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    TP框架模板中IF Else 如何使用?
    Append 后如何使用 fadein淡入效果
    ThinkPad如何修改fn键默认操作
    TP框架ajax U方法不解析怎么办?
    thinkphp session如何取数组
    FTP服务搭建
    Linux系统学习之字符处理
    如何使用zabbix初级监控
    项目同步部署
    巡检常用命令
  • 原文地址:https://www.cnblogs.com/yefengmeander/p/2888003.html
Copyright © 2020-2023  润新知