为什么程序员不喜欢写注释？
有没有一个好的办法，让程序员乐意写注释呢？
注释不是翻译，谁都不想写这种注释：

            counter += 1  # 让计数器加一        # 如果道具不在背包里，就在背包里加上这个道具    if item not in inventory:        inventory.append(item)

这也是为什么有时候一提注释，就会听到「好的代码应该是自解释的」的说法。

需要注释的，往往是没法从代码里面直接看出来的内容。

比如为什么你要用这种奇怪的写法：

            class Widget {    public:        // 把 fixture 里部分内容的初始化移到了这里        // 否则无法在 Visual Studio 2017 中编译，见 #12345        Widget() {            fixture[TYPE_FOO].value = Foo();            fixture[TYPE_BAR].value = Bar();        }        private:        struct DataEntry {            int type;            Variant value;        } fixture[TYPE_MAX] = {            { TYPE_X, 1 },            { TYPE_Y, "Hello" },            { TYPE_FOO, nullptr },            { TYPE_BAR, nullptr },        };    };    

或者解释算法的一部分（需要通读大段代码才能总结出的东西）：

            int line_start = 0;    int line_end = 0;  // 当前行最后一个单词的末尾    int word_start = 0;  // 尚未遇到单词时置 -1，但每行开头的空格应算作单词的一部分    int word_length = 0;    

函数前的注释是有功能性的，理论上不应该算作注释，而应该是文档的一部分，和喜不喜欢写无关。