为什么有人代码不写注释

观点

        写注释是一种习惯,有些时候是一个程序员基本素养,甚至是职业道德体现。但是有些人就是不写,跟人、开发经验、性格等很多因素有关。和上班年限也有关,比如:

  • 上班一年不写注释,我命个名都费劲,还写毛注释?
  • 上班三年写注释,代码量有些积累,不写注释不是担心别人看不懂,而是担心自己看不懂
  • 上班五年不写注释,我写的这么牛逼的代码,肯定不能写注释让别人看懂,这是我的核心技术
  • 上班八年不写注释,公司离开我就会倒闭,我写的bug,只有我自己看得懂,我就是大湿
  • 上班10年写注释,格局打开,日行一善

不写注释的原因有哪些

原因1:有一种代码本身写得很牛,行文风格流畅,让人一看就是大家风范,这种代码就不要注释。通俗讲你看他代码就知道代码作者的意图,举个例子,以下是ORB-SLAM2源码:  链接:orm-slam2代码块

MapPoint::MapPoint(const cv::Mat &Pos, Map* pMap, Frame* pFrame, const int &idxF):
    mnFirstKFid(-1), mnFirstFrame(pFrame->mnId), nObs(0), mnTrackReferenceForFrame(0), mnLastFrameSeen(0),
    mnBALocalForKF(0), mnFuseCandidateForKF(0),mnLoopPointForKF(0), mnCorrectedByKF(0),
    mnCorrectedReference(0), mnBAGlobalForKF(0), mpRefKF(static_cast(NULL)), mnVisible(1),
    mnFound(1), mbBad(false), mpReplaced(NULL), mpMap(pMap)
{
    Pos.copyTo(mWorldPos);
    cv::Mat Ow = pFrame->GetCameraCenter();
    mNormalVector = mWorldPos - Ow;
    mNormalVector = mNormalVector/cv::norm(mNormalVector);

    cv::Mat PC = Pos - Ow;
    const float dist = cv::norm(PC);
    const int level = pFrame->mvKeysUn[idxF].octave;
    const float levelScaleFactor =  pFrame->mvScaleFactors[level];
    const int nLevels = pFrame->mnScaleLevels;

    mfMaxDistance = dist*levelScaleFactor;
    mfMinDistance = mfMaxDistance/pFrame->mvScaleFactors[nLevels-1];

    pFrame->mDescriptors.row(idxF).copyTo(mDescriptor);

    // MapPoints can be created from Tracking and Local Mapping. This mutex avoid conflicts with id.
    unique_lock lock(mpMap->mMutexPointCreation);
    mnId=nNextId++;
}

原因2:有些代码不注释就是作者懒猪,呵呵,过了半个月,自己都看不懂自己写得bug了。过了一个月,看到自己的写得代码,一时半会没认出来,内心:这是哪个沙雕写的bug。哈哈哈哈

原因3:所谓教会徒弟,饿死师傅,只要我代码不写注释,公司永远就要需求我,出了bug只有我能解决,我永远立于不败之地。哈哈哈。

如何才能写出漂亮的注释

代码注释是有固定格式的,以上面那个构造函数为例子。可以参考下。

/**
* @brief 该函数实现了地图点管理功能
* @in   Pos  输入图像
* @out  pMap 地图点
* @out  pFrame 关键帧
* @in   idxF 帧ID
*/
MapPoint::MapPoint(const cv::Mat &Pos, Map* pMap, Frame* pFrame, const int &idxF)
{
    // 代码省略
}

你可能感兴趣的:(opencv,人工智能,计算机视觉,c++,程序人生)