阅读目录

  • 1.C#的注释方式
  • 2.这样注释奇葩么?
  • 3.对自己好用,那就用起来
  • 4.最后猜猜谁写的

  本人虽然不是专业开发人员,也非专业出身,但一直使用C#堆码,解决自己日常的小问题。包括自己的研究,也是用C#来实现和测试。对C#是情有独钟。虽然C#的很多高级技术不会用,也不太懂,但总归是知道,耳闻目染,都多多少少了解一点。因为研究开源组件和技术比较多的原因,经常翻别人的代码(大部分是国外的),免不了要翻译,所以我也是经常翻译和总结,例如我前2个翻译的一些机器学习的文章:

【原创】.NET平台机器学习组件-Infer.NET连载(一)介绍

【原创】.NET平台机器学习组件-Infer.NET连载(二)贝叶斯分类器

  其实翻译一直在进行,也完成很多了,但还没有时间整理和发表上来给大家分享。但是前不久在看代码(也是翻译的一部分)过程中,发现了一个非常奇葩的注释,所以顺手就搜索引擎翻了翻,总结一下,同时大家也谈谈如何看待这种写法。

  由于对代码的注释很多人都有不同见解,包括前段时间,博客园新闻里面有篇文章,大概意思是说有注释,说明本身代码就很烂,所以用注释来补充。当然我并不认同这种观点,虽然也有一点点道理。

声明:有可能本人见识比较少,可能很多人见过,也用过,我第一次见到,反正有点震惊,当然肯定是符合语法要求的,所以写出来,请轻拍。

回到目录

1.C#的注释方式

  搞C#的人应该都清楚,C#有3种标识注释的方式:

1.1 三斜杠(///)方式

一般用于类或者方法的前面,如下面的代码:

1 /// <summary>
2 /// 这里是注释。。。。。 3 /// Latent Dirichlet Allocation (LDA) model implemented in Infer.NET. 4 /// This version scales with number of documents. 5 /// </summary>

1.2 双斜杠(//)方式

  一般是对临时变量,属性等的注释,当然也可以用在类或者方法前面,反正都是注释,如下面的代码:

1 //---------------------------------------------
2 // The model 4 Range D = new Range(NumDocuments).Named("D");

3.块注释(/*XXXX*/)方式

  一般用于一段连续的注释代码块,如下面的代码:

  /* 这段程序已经不再有用* 因为我们发现千年虫问题只是一场虚惊* 我们的系统不会恢复到1/1/1900 */

  我印象中,C#的注释的标识符应该就是这3种把,当然其他的一些注释类型参数,我们不讨论。

回到目录

2.这样注释奇葩么?

  上面三种注释方式大家肯定都用过,估计也是和我一样(大部分),写在类,属性或者临时变量前面,另起一行。

  我这里说的奇葩,并不是脱离三种方式,而是其注释的位置,但是在浏览一段开源的代码的时候,发现了这个注释,当时吃惊,然后是思考,先看看:

  上面一段代码包括了前面提到的3种注释方式,红色框里面的就是我说的 奇葩注释,用的是 /* */块方式,写在数组定义的中间,毫无疑问,这肯定是可以运行的。只是以前没想到可以这样,可能局限于自己的思维方式。

根据我的理解,开发人员这样注释的目的,由于这段代码的变量包含的信息量很大,这样写更加直接明了。但是否多余,也可以直接在变量上面进行说明?

反过来想一想,在一些很复杂的问题中,变量的初始化可能非常复杂,这里的数组长度是2,如果是20,那怎么办?这样写优势就出来了,可以使得看代码的人,一目了然。

又在一个地方发现了一段类似注释的代码,是这样的:

回到目录

3.对自己好用,那就用起来

  刚开始有点接受不了,为了这个事情,我回忆了自己很多写过的代码,还特意翻了翻,最终我觉得以后在自己的代码中也可以逐步在合适的地方采用这种方式,一方面是由于以前没想到可以这样用,思维局限在哪里,习惯另起一行说明;另一方面的确是有很多代码需要这样明了的注释,可能自己的代码和架构能力不够,在很多地方耦合很严重,不得不通过很多的注释来表现自己的想法,而变量有特别多,像这种初始化的情况,的确是很很说明,看看我修改后的一段代码例子:

3.1 以前注释方式

  以前的一段代码中,有一个固定的有限列表,是公司编号,但实际开发的时候,经常要知道对应的名称,当然数据库里面可以去查找,但代码里面直接看不到,所以我这样写的:

//权威公司编号名称(顺序):"澳门","金宝博","立博","威廉希尔","伟德","10BET","bet 365","SNAI"
static List<Int32> AuthCompanyIdList = new List<int>(){ 247, 250, 251, 252, 253, 1, 469, 179};

  所以以前每次打开的时候,有错误或者手动排查一些信息,对着编号去注释找,虽然次数很少,但偶尔也要用到。所以看到上面的注释方式后,修改了一下。

3.2 现在的注释方式

  修改后的代码是这样的,不是特意去改,是这样改之后,我自己也觉得好多了,看到这个代码就知道意思了。

   internal static List<Int32> AuthCompanyIdList = new List<int>(){247/*澳门*/, 250/*金宝博*/, 251/*立博*/, 252/*威廉希尔*/, 253/*伟德*/, 1/*10BET*/, 469/*bet 365*/, 179 /*SNAI*/         };

  其实哪种都可以,重要的是你看得懂,方便看,所以如果你觉得有用,可以用上,觉得纯属无聊,那就跳过吐槽一下。

回到目录

4.最后猜猜谁写的

  敲代码应该是件轻松的事情,如果能把代码写得非常优雅,好懂,当然最好不过了。最后娱乐一下,猜猜这代码来自哪里?

  A:某商业机器学习算法软件的.NET例子;

  B:某国外开源机器学习算法的.NET实现博客例子;

  C:微软研究人员机器学习算法实现的例子;

  D:Python开源社区一个机器学习算法py实现的.NET版本;

  如何看待和这种注释,各抒其见把。。。。也可能是我小题大作了把。。。了解,不断改进细节,不断进步把。。

下午揭晓答案。。。。

第一段代码来自微软剑桥研究院,是Infer.NET的一个Demo代码

第二段代码来自开源机器学习组件Accord.NET Framework的实例代码

你用过这种奇葩的C#注释吗?如何看待相关推荐

  1. 10个奇葩的代码注释,笑出声!

    大家看到过的最奇葩搞笑的代码注释是什么样的?下面来总结几条: // 修改1 - 2016/6/7 产品经理要求跳转到详情页 // 修改2 - 2016/6/8 产品经理说还是跳转到列表页 // 修改3 ...

  2. 史上最良心程序员,在代码注释里,告诉这家公司有多坑

    程序员压力大,需要一个地方发泄,可又不能因此断了思路,于是代码注释成了绝佳的地方. 去年虾米音乐APP被爆出,代码注释中含有歧视侮辱性的词汇,将活动赠送的vip,标注为穷xvip.事件一曝光,就受到广 ...

  3. 有趣的html代码_千万别惹程序员,否则会在代码注释里,告诉这家公司有多坑...

    Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,都放在了文章结尾,欢迎前来领取! 每个程序员敲代码都 ...

  4. 代码注释也可以玩出花来

    1.这是一个被代码耽误的诗人 2.来一份1987年的代码看看 3.产品经理要对此负责 ‍4.不敢看,也不敢问 5.老实的程序员 6.程序员正确发牢骚的地方 7.阅读源码的人,心里一定的崩溃的 8.第一 ...

  5. android 动态申请权限_你真的了解Android权限机制吗?

    码个蛋(codeegg)第 610 次推文 作者:FeelsChaotic 原文:https://www.jianshu.com/p/a17c8bed79d9 前言 Android将安全设计贯穿系统架 ...

  6. .NET平台机器学习资源汇总,有你想要的么?(转)

    出处:http://www.cnblogs.com/asxinyu/p/4422050.html 阅读目录 1.开源综合类 2.开源.NET平台非综合类 3.其他资源与技术博客 4.我的100篇博客之 ...

  7. .NET平台机器学习资源汇总,有你想要的么?

    接触机器学习1年多了,由于只会用C#堆代码,所以只关注.NET平台的资源,一边积累,一边收集,一边学习,所以在本站第101篇博客到来之际,分享给大家.部分用过的 ,会有稍微详细点的说明,其他没用过的, ...

  8. 这么奇葩搞笑的代码注释你见过吗

    程序员作为一种"异类",虽然他们平时给人们的留下的印象并不太好,觉得他们只会写代码. 但是有的时候不得不佩服他们天马行空的想象力,他们可能会利用注释让你噗嗤一笑,下面我们来看看那些 ...

  9. 39个史诗级奇葩代码注释,程序不会崩,但程序员会

    导读:作为程序员,有没有让你感到既无语又崩溃的代码注释? StackOverflow 上有一个类似的问题,问大家见过哪些超秀的注释,不少程序员纷纷吐槽自己见过的那些逆天注释,我们一起来围观一下. 1. ...

最新文章

  1. ORB_SLAM2代码阅读(2)——tracking线程
  2. 高并发BUG排查,警惕高权限又不受监管的运维行为
  3. Nature:AI为什么总是歧视重重?
  4. 网络编程学习笔记(TCP回射服务器程序修订版)
  5. mysql数据库操作类
  6. 使用brew安装composer
  7. 什么是Thymeleaf?
  8. E - 娜娜梦游仙境系列——莫名其妙的插曲
  9. 华为HG255D超级管理员密码
  10. 分类、回归和聚类辨析
  11. dotnet C# 全局 Windows 鼠标钩子
  12. 广域网、局域网和城域网(ip城域网和因特网)
  13. 数据库的增删改查基本操作
  14. SIEBEL应用概述
  15. 【计算机视觉40例】案例10:隐身术
  16. Error response from daemon: Container 2c6d35b44a9862c63a6caf11a5622a33fe27979e12e51f9bd96f8dad98521c
  17. JavaScript - 简介
  18. 【Altium Designer21】DRC规则检查、错误、设置简析
  19. 小白学3D建模推荐3dsMax,这些功能你必须知道!
  20. Exp10 Final 类CTF(Webug3.0漏洞靶场—渗透基础)

热门文章

  1. IDEA mybatis-generator 逆向工程
  2. python数据结构与算法之list
  3. 归并排序(非递归,Java实现)
  4. Socket编程 - 网络基础知识
  5. [Machine Learning]kNN代码实现(Kd tree)
  6. jquery页面加载的时候加载函数
  7. 如果知道一个控件类型的对话框句柄是编辑框控件
  8. CUDA and cudnn 历史版本归档地址
  9. BZOJ3534:[SDOI2014]重建(矩阵树定理)
  10. HAProxy详解(二):HAProxy基础配置与应用实例