代码注释掉还能执行_日志消息是可执行代码和注释
代碼注釋掉還能執行
盡管在一個人的代碼中應添加多少注釋之間存在意見分歧,但我認為可以肯定地說,大多數開發人員都同意以下代碼段中的注釋是多余的:
// increment the total total++;在該示例中,代碼很簡單,而且實際上是不言自明的,用標準的Java運算符遞增了一個體面命名的變量total 。 幸運的是,我現在沒有像以前那樣看到明顯不必要的評論類型。
我仍然比一般人更常看到多余注釋的地方是與導致解釋性日志語句的代碼情況相關。 尤其是當導致log語句的情況有些棘手時,似乎有時會希望向將來將要閱讀和維護該代碼的開發人員寫評論,并希望記錄相關信息以供使用。在以后調試特殊條件。 在大多數情況下,精心設計的日志消息(如其他精心設計的可執行代碼)可以說明一切,而無需其他注釋。
盡管編寫自我記錄的日志記錄代碼與編寫自我記錄的任何可執行代碼在很大程度上相似,但是日志記錄代碼具有能夠在日志消息中表達任意詳細信息的優點。 普通代碼受編程語言支持的結構的限制,并且有時語言的結構可能不如人們所希望的那樣表達意圖。 記錄的消息在可表達的內容方面的限制要少得多。 不利的一面是,更改代碼后,記錄的消息通常更容易被忽略。 必須進行代碼更改,但是日志消息通常可以保持不變(即使它們應該已經更改),并且直到將來某個時候記錄該語句時,才會注意到這種遺漏。 不過,與注釋相比,已記錄的消息具有更好的機會來更改/更新,注釋僅在代碼讀取過程中才會公開/注釋。
使用日志消息來表達特殊條件而不是代碼注釋的附帶好處是,這可以導致編寫簡潔而透徹的日志消息時要遵守更多的紀律。 通過記錄的消息而不是代碼內注釋進行“注釋”的另一個好處是,可以在情況發生時在運行時編寫消息,并提供對代碼行為的寶貴見解,而這些行為在分析靜態代碼時根本不可用。
以下是兩個代碼清單,一個使用代碼內注釋,另一個使用日志記錄,以表達對將來維護此代碼的開發人員相同的看法。 在這兩種情況下,都記錄了業務邏輯考慮因素,即2016年美國國家橄欖球聯盟 (NFL)超級碗( 丹佛野馬隊獲勝)沒有使用傳統的羅馬數字命名約定來命名 。 它沒有像以前的超級碗那樣被冠以“ L”的稱號,而是被冠以“ 50”的稱號。 這是業務邏輯規則類型的精心設計的示例,通常以代碼注釋形式表示。 第10行是此處列出的每個代碼的重點。
private int convertToSuperBowlYear(final String superBowlNumber) {int superBowlYear;if (superBowlNumber == null || superBowlNumber.isEmpty()){superBowlYear = 0;}else if (superBowlNumber.equals("L")){// Super Bowl 50 was not named with the conventional Roman Numeral, so using '50' instead of 'L'superBowlYear = 2016;}else{superBowlYear = getSuperBowlYearFromNumber(getDecimalNumber(superBowlNumber));}return superBowlYear; }private int convertToSuperBowlYear(final String superBowlNumber) {int superBowlYear;if (superBowlNumber == null || superBowlNumber.isEmpty()){superBowlYear = 0;}else if (superBowlNumber.equals("L")){logger.fine("Super Bowl 50 was not named with the conventional Roman Numeral, so using '50' instead of 'L'.");superBowlYear = 2016;}else{superBowlYear = getSuperBowlYearFromNumber(getDecimalNumber(superBowlNumber));}return superBowlYear; }這里未顯示方法getSuperBowlYearFromNumber(int)和getDecimalNumber(String)實現,因為它們對本次討論不重要。 重要的是,“ L”不是有效的超級碗號碼,因此在確定超級碗的年份時必須使用“ 50”而不是“ L”。 如果開發人員不熟悉NFL或它的超級碗命名約定,并且不熟悉2016年超級碗的命名約定,則需要某種類型的注釋,以了解為什么一個超級碗與其他超級碗區別對待。
作為旁注并談到羅馬數字,令人驚訝的是,網絡上有多少Java代碼示例可在羅馬數字和基于十進制的整數之間進行轉換。 其中包括: 將羅馬數字轉換為十進制 , 將羅馬數字轉換為介于1到3999之間的 十進制,使用Java 將羅馬數字轉換為十進制,在Java中將羅馬數字轉換為十進制以及如何將羅馬數字轉換為整數 。 我懷疑有很多家庭作業問題會 激發大量的代碼示例。
Alexey最近發表了博客文章“ 用警告日志消息替換代碼中的TODO注釋? 他說,在他以前曾寫過“ TODO”注釋的情況下,他已經開始寫警告和錯誤級別的日志消息。 這是使用日志消息代替注釋的更具體,更明顯的示例。 就阿列克謝而言,他之所以這樣做,是因為他意識到自己“總是忘記”“待辦事項”,而且“很少被發現,而且幾乎永遠無法解決”。 Alexey的結論是:“這就是為什么我建議您嘗試通過在日志中寫下您的評論,您的想法甚至是您的疑問來嘗試這種方法:這將幫助您,甚至可以娛樂您和您的同事!”
在某些情況下,可能添加到源注釋中的內容可能不適合添加到日志消息中。 這種情況包括評論的冗長或評論的敏感性質。 還值得注意的是,某些注釋級別的日志消息可能永遠不會被記錄,因為它們的日志級別設置得如此具體,以致在代碼執行過程中永遠不會真正啟用日志級別。 但是,在許多情況下,使用簡潔而透徹的日志消息而不是代碼內注釋來與將來的開發人員和您將來的自己進行通信具有優勢。
翻譯自: https://www.javacodegeeks.com/2017/12/log-message-executable-code-comment.html
代碼注釋掉還能執行
總結
以上是生活随笔為你收集整理的代码注释掉还能执行_日志消息是可执行代码和注释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java使用缓冲区读取文件_在Java中
- 下一篇: 白盒测试方法静态分析_静态分析的教育方面