1. 程式人生 > >你用過這種奇葩的C#註釋嗎?如何看待

你用過這種奇葩的C#註釋嗎?如何看待

  本人雖然不是專業開發人員,也非專業出身,但一直使用C#堆碼,解決自己日常的小問題。包括自己的研究,也是用C#來實現和測試。對C#是情有獨鍾。雖然C#的很多高階技術不會用,也不太懂,但總歸是知道,耳聞目染,都多多少少了解一點。因為研究開源元件和技術比較多的原因,經常翻別人的程式碼(大部分是國外的),免不了要翻譯,所以我也是經常翻譯和總結,例如我前2個翻譯的一些機器學習的文章:

  其實翻譯一直在進行,也完成很多了,但還沒有時間整理和發表上來給大家分享。但是前不久在看程式碼(也是翻譯的一部分)過程中,發現了一個非常奇葩的註釋,所以順手就搜尋引擎翻了翻,總結一下,同時大家也談談如何看待這種寫法。

  由於對程式碼的註釋很多人都有不同見解,包括前段時間,部落格園新聞裡面有篇文章,大概意思是說有註釋,說明本身程式碼就很爛,所以用註釋來補充。當然我並不認同這種觀點,雖然也有一點點道理。

宣告:有可能本人見識比較少,可能很多人見過,也用過,我第一次見到,反正有點震驚,當然肯定是符合語法要求的,所以寫出來,請輕拍。

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#註釋?如何看待

  本人雖然不是專業開發人員,也非專業出身,但一直使用C#堆碼,解決自己日常的小問題。包括自己的研究,也是用C#來實現和測試。對C#是情有獨鍾。雖然C#的很多高階技術不會用,也不太懂,但總歸是知道,耳聞目染,都多多少少了解一點。因為研究開源元件和技術比較多的原因,經常翻別人的程式碼(大部分是國外的),免不了要

從“窮逼VIP”論註釋規範,哪些奇葩註釋

點選有驚喜 最近的“窮逼VIP”事件想必大家有所耳聞!詳細的我就不說了大家可以去看看,當然了出於好奇,我在網上也看到了很多的奇葩的程式設計師寫的註釋來看看吧! 高富屌絲型程式猿 挨批受挫型程式猿 填坑吐槽型程式猿 言語混亂型程式猿 基情講解型

java.text.DecimalFormat

在java專案開發中,我們經常會對數字操作,尤其是對小數的操作很頻繁。如果是對小數保留一定的小數位,或者以百分比顯示,那麼我們自己也許能夠實現這些功能。但是自己實現的效能和健壯性就需要考量,其實jdk已經給我們提供了很多完成這些需求的方法。下面我們就來簡單介紹下java.text包下的De

媒體查詢,或針對移動端的佈局/CSS

通過媒體查詢可以為不同大小和尺寸的媒體定義不同的css,適合相應的裝置顯示;即響應式佈局 @media screen and (min-width: 400px) and (max-width: 700px) { … } @media handheld and (mi

6到飛起的Java診斷工具Arthas,

記得前段時間遇到了一個頁面載入過長的問題,當時就想排查下在哪一步消耗的時間比較長,由於是線上問題,第一反應就是有沒有什麼辦法可以無

作為一個Java開發Jib

## 1. 前言 ![Jib,容器化你的Java應用](https://asset.felord.cn/blog/20200625112856.png) **Jib**是**Google**開發的可以直接構建 **Java**應用的**Docker**和**OCI**映象的類庫,以**Maven**和**

面試官問:Mybatis中的TypeHandler

持續原創輸出,點選上方藍字關注我吧 目錄 前言環境配置什麼是TypeHandler? 如何自定義?如何將其新增到Mybatis中?XML檔案中如何指定TypeHandler? 原始碼中如何執行TypeHandler? 入參如何轉換?結果如何轉換?總結 總結 前言 相信大家用Mybatis這個框架至

這些Linux數據恢復工具,哪幾個

linux數據恢復不論你運用的是臺式電腦仍是筆記本,需求重視的要點之一都是怎麽保護好你的名貴數據。由於總會有各種突發狀況使你的系統潰散,然後你要做的就是恢復數據。不論你怎麽想,要是我失去了一切的數據卻無法恢復的話,我會分分鐘肢解了這臺破電腦。不過幸虧的是,如今商場上有不少的數據恢復工具,能協助咱們從體系的硬盤

目前最受歡迎的12個Python開源框架,幾個?

python 爬蟲 web 入門 開源 今天給大家帶來了12個在GitHub等開源網站中最受歡迎的Python開源框架。如果你正在學習python,那麽這12個開源框架,千萬別錯過,這些框架包括事件I/O,OLAP,Web開發,高性能網絡通信,測試,爬蟲等。雖說不上是全都有,但也足夠滿足你

5 個非常有用的 Laravel Blade 指令,哪些?

內容 def upload user 兩個 doc 系統 使用 hub 接下來我將帶大家認識下五個 Laravel Blade 指令,這些指令將讓你在解決特定問題時如虎添翼。如果你是剛接觸 Laravel 的用戶,這些小技巧能帶你認識到 Laravel Blade 模板引

8個最高效的Python爬蟲框架,幾個?

python 爬蟲 入門 詳細 官網 小編收集了一些較為高效的Python爬蟲框架。分享給大家。1.ScrapyScrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。。用這個框架可以輕松爬下來如亞馬遜商品信息之

不寫代碼就能完成一個簡單模塊的組件麽?

object dpa 搜索 就是 pub ror ping 開始學習 ini 開篇四連問 你是否懶得寫普通的增刪改查方法? 你是否不喜歡代碼生成插件的重復代碼? 你是否渴望一個沒有冗余代碼的項目? 你是否渴望一行代碼都不用寫就能完成一個簡單的模塊? 組件由來 作為後端程

聽說原生 HTML 組件?(轉載)

掘金 標簽 取出 高內聚 搭建 鏈接 性能 pos 工具 嘿!看看這幾年啊,Web 前端的發展可是真快啊! 想想幾年前,HTML 是前端開發者的基本技能,通過各式各樣的標簽就可以搭建一個可用的網站,基本交互也不是問題。如果再來點 CSS,嗯,金黃酥脆,美味可口。這時候再

瞭解jsp中的c:forEach

       最近由於業務需求,幫同事把jsp頁面上的select控制元件進行了改動。但是在改完程式碼之後,在某幾個擁有大量select元件的頁面下出現了報錯資訊:_jspService超過了65535位元組的限制。 // 舊的程式碼 <form:opti

2018年最火熱的十個Python開源專案!哪些?

  過去一個月,MyBridge 從將近 250 個 Python 開源專案中選擇出了最好的 10 個專案: 這些專案在 GitHub 上平均獲得 1140 個 star 專案涵蓋話題包括效能分析、圖表提取、HTTP 框架、HTTP API、程式碼重構和論文爬取等

這八個爬蟲框架是目前最牛逼的!哪幾個呢?

小編收集了一些較為高效的Python爬蟲框架。分享給大家。 1.Scrapy Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。。用這個框架可以輕鬆爬下來如亞馬遜商品資訊之類的資料。  

程式設計師程式設計入門必備的7大工具,幾個?

作為入門級別的程式設計師,幾款趁手的程式設計軟體是最需要的。除了Git、Visual Basic……等等,其實還有很多很很酷的程式設計工具。接下來就給大家看7款不一樣的程式設計工具,如有心動,純屬巧合。 0.Warp,一款非常簡單且由於共享的工具。 Warp允許任何人共享他們的終端。只

聽說反摩爾定律

相信很多人聽說過摩爾定律,但是你聽說過反摩爾定律嗎? 可能你會以為反摩爾定律就是與摩爾定律相反的定律,甚至認為這兩個定律相互矛盾,那你就大錯特錯了,其實兩種定律可以說是針對同一種現象的不同說法。 摩爾定律是由英特爾(Intel)創始人之一戈登·摩爾(Gordon Moore)提出來的

Unity哪些設計模式?熟悉的設計模式有哪幾種呢?

以前寫過幾篇設計模式的詳細解釋,今天在這裡不詳細介紹,有興趣瞭解的可以去看前幾篇隨筆,今天就簡單的介紹我們常用的設計模式. (1)工廠模式 簡單工廠模式解決的問題是如何去例項化一個合適的物件. 簡單工廠模式的核心思想就是:有一個專門的類來負責例項過程,正規化出現大量產品需要建立,並且具有共同的介面時,可

這10個Python最新又好的庫,幾個

對於碼農來說,關注的永遠是新近有什麼流行的、既能解決問題又好用的利器。本文就為你盤點十大新開源Python庫。 本文福利:加vx ;tanzhouyiwan 免費領取Python學習資料 1、Pipenv 第一名非它莫屬,這個工具2017年初才釋出,但它已經