摘要:優(yōu)秀的代碼注釋可以提高代碼可讀性,當(dāng)然優(yōu)秀的命名規(guī)范也可以啦。表示函數(shù)是異步的。行注釋行注釋的話,應(yīng)該不用做太多的解釋,直接用注釋相關(guān)信息就啦。
前言
可能現(xiàn)在不管大家去面試還是在公司上班都會(huì)涉及到代碼可讀性,或者是代碼規(guī)范。優(yōu)秀的代碼注釋可以提高代碼可讀性,當(dāng)然優(yōu)秀的命名規(guī)范也可以啦。我們這里就討論一下代碼注釋。代碼注釋可能就相當(dāng)于產(chǎn)品使用說(shuō)明書,當(dāng)別人看到你的代碼的時(shí)候,知道你的代碼是干嘛的,是怎么使用的。我們所熟悉的可能就是 // 是單行注釋,/***/ 是多行注釋,下面我們就來(lái)聊一聊代碼注釋!
文件注釋關(guān)于文件注釋可能很多同學(xué)都沒(méi)有用過(guò),但大家都多多少少有看過(guò)文件注釋。
比如我們熟悉的jQuery/vuejs/reactjs的文件注釋:
// jQuery的文件注釋 /*! * jQuery JavaScript Library v1.11.3 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2015-04-28T16:19Z */ // vuejs的文件注釋 /*! * Vue.js v2.6.10 * (c) 2014-2019 Evan You * Released under the MIT License. */ // reactjs的文件注釋 /** @license React v16.8.6 * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /* Modernizr 3.0.0pre (Custom Build) | MIT */
在這里我們可以大概了解到版權(quán)或者作者,又或者開源協(xié)議等信息。
在日常工作中我們也經(jīng)??吹竭@樣的文件注釋:
/* * @Description: Description * @Author: js-say * @Date: 2019-05-23 17:57:10 * @LastEditTime: 2019-05-23 17:57:10 * @LastEditors: js-say */
這樣的注釋包括了描述、作者、創(chuàng)建時(shí)間、更新時(shí)間等。這樣大家一眼就能知道這個(gè)文件大概實(shí)現(xiàn)了什么功能,開始是誰(shuí)寫的,最后維護(hù)的是誰(shuí)。文件注釋其實(shí)可以看自己公司要求和規(guī)范來(lái)寫!使用 vs-code 的話有一個(gè)插件可以快捷生成文件注釋,當(dāng)然方法注釋也是可以的。這里就只給插件名字啦,具體怎么使用大家可以自己研究一下!
插件:koroFileHeader
其實(shí)文件注釋也有一些規(guī)范的:
/** * @file 對(duì)文件的描述,用于文件的頭部 * @author[ ] 代碼的作者,在姓名后面用尖括號(hào)加上郵箱會(huì)被自動(dòng)轉(zhuǎn)成 mailto: 的鏈接 * @copyright 與@file結(jié)合使用,說(shuō)明版權(quán)相關(guān)的信息 * @license 說(shuō)明許可證相關(guān)的信息 * @version 版本號(hào) */
大致一個(gè)文件注釋可以是這樣子的,還可以有很多比如 @desc 描述之類的,大家可以參考 jsDoc
代碼塊注釋代碼塊注釋,也可以說(shuō)是方法注釋,可以提現(xiàn)出方法的用處,已經(jīng)所需參數(shù),返回值等;大大提高代碼的可讀性!
下面就是一個(gè)簡(jiǎn)單的方法注釋:
/** * Represents a book. * @constructor * @param {string} title - The title of the book. * @param {string} author - The author of the book. */ function Book(title, author) { // ... }
下面我就舉幾個(gè)例子:
class 的注釋:
/** Class representing a point. */ class Point { /** * Create a point. * @param {number} x - The x value. * @param {number} y - The y value. */ constructor(x, y) { // ... } /** * Get the x value. * @return {number} The x value. */ getX() { // ... } /** * Get the y value. * @return {number} The y value. */ getY() { // ... } /** * Convert a string containing two comma-separated numbers into a point. * @param {string} str - The string containing two comma-separated numbers. * @return {Point} A Point object. */ static fromString(str) { // ... } }
class 繼承
/** * Class representing a dot. * @extends Point */ class Dot extends Point { /** * Create a dot. * @param {number} x - The x value. * @param {number} y - The y value. * @param {number} width - The width of the dot, in pixels. */ constructor(x, y, width) { // ... } /** * Get the dot"s width. * @return {number} The dot"s width, in pixels. */ getWidth() { // ... } }
module 注釋
/** @module color/mixer */ /** The name of the module. */ export const name = "mixer"; /** The most recent blended color. */ export var lastColor = null; /** * Blend two colors together. * @param {string} color1 - The first color, in hexadecimal format. * @param {string} color2 - The second color, in hexadecimal format. * @return {string} The blended color. */ export function blend(color1, color2) {} // convert color to array of RGB values (0-255) function rgbify(color) {} export { /** * Get the red, green, and blue values of a color. * @function * @param {string} color - A color, in hexadecimal format. * @returns {Array.} An array of the red, green, and blue values, * each ranging from 0 to 255. */ rgbify as toRgb }
通過(guò)上面幾個(gè)例子是不是很快的知道各代碼的作用是什么,需要的參數(shù)是什么,這樣子一來(lái)代碼就可以很容易的被同事或者說(shuō)下一個(gè)接手維護(hù)的人看懂!對(duì)于方法描述,參數(shù)描述就可以看團(tuán)隊(duì)公司來(lái)定是寫成英語(yǔ)還是中文了。
下面是一些常用的注釋標(biāo)簽
/** * @author? 作者,方便定位? ? * @class(同義詞:@constructor)標(biāo)記類和構(gòu)造函數(shù)? ? * @constant @const常量標(biāo)記? ? * @description(同義詞:@desc) 對(duì)內(nèi)容進(jìn)行描述???? * @module 模塊名稱? ? * @enum 枚舉類型標(biāo)記? ? * @global 全局對(duì)象標(biāo)記? ? * @param 函數(shù)參數(shù)標(biāo)記? ? * @returns(同義詞:@return)函數(shù)返回標(biāo)記? ? * @this this指向標(biāo)記? ? * @see 參考鏈接? ? * @memberof 標(biāo)記模塊間的從屬關(guān)系? ? * @event 在模板中標(biāo)記可以被觸發(fā)的事件,與@fire配合使用 * @alias 將成員視為具有不同的名稱。 * @Async 表示函數(shù)是異步的。 * @augments(同義詞:@extends)指示符號(hào)從父符號(hào)繼承并添加到父符號(hào)。 * @borrows 此對(duì)象使用來(lái)自另一個(gè)對(duì)象的內(nèi)容。 * @callback 回調(diào)函數(shù)。 * @copyright 版權(quán)信息。 * @default (同義詞: @defaultvalue) 默認(rèn)值。 * @example 示例。 */
還有很多,大家可以去 jsDoc 看相應(yīng)的一些規(guī)范。
行注釋行注釋的話,應(yīng)該不用做太多的解釋,直接用 // 注釋相關(guān)信息就OK啦。當(dāng)然 // TODO 習(xí)慣用這個(gè)的話也是非常不錯(cuò)的喲!
有趣的注釋(無(wú)關(guān)主題,純屬娛樂(lè),這條可以無(wú)視)/** * _ooOoo_ * o8888888o * 88" . "88 * (| -_- |) * O = /O * ____/`---"\____ * . " | |// `. * / ||| : |||// * / _||||| -:- |||||- * | | - /// | | * | \_| ""---/"" | | * .-\__ `-` ___/-. / * ___`. ." /--.-- `. . __ * ."" "< `.___\_<|>_/___." >""". * | | : `- `.;` _ /`;.`/ - ` : | | * `-. \_ __ /__ _/ .-` / / * ======`-.____`-.___\_____/___.-`____.-"====== * `=---=" * * ............................................. * 佛祖保佑 永無(wú)BUG */ /** * 佛曰: * 寫字樓里寫字間,寫字間里程序員; * 程序人員寫程序,又拿程序換酒錢。 * 酒醒只在網(wǎng)上坐,酒醉還來(lái)網(wǎng)下眠; * 酒醉酒醒日復(fù)日,網(wǎng)上網(wǎng)下年復(fù)年。 * 但愿老死電腦間,不愿鞠躬老板前; * 奔馳寶馬貴者趣,公交自行程序員。 * 別人笑我忒瘋癲,我笑自己命太賤; * 不見滿街漂亮妹,哪個(gè)歸得程序員? */ /** * _ooOoo_ * o8888888o * 88" . "88 * (| -_- |) * O = /O * ___/`---"\____ * . " | |// `. * / ||| : |||// * / _||||| -:- |||||- * | | - /// | | * | \_| ""---/"" | | * .-\__ `-` ___/-. / * ___`. ." /--.-- `. . __ * ."" "< `.___\_<|>_/___." >""". * | | : `- `.;` _ /`;.`/ - ` : | | * `-. \_ __ /__ _/ .-` / / * ======`-.____`-.___\_____/___.-`____.-"====== * `=---=" * ............................................. * 佛曰:bug泛濫,我已癱瘓! */ /*** * ┌─┐ ┌─┐ + + * ┌──┘ ┴───────┘ ┴──┐++ * │ │ * │ ─── │++ + + + * ███████───███████ │+ * │ │+ * │ ─┴─ │ * │ │ * └───┐ ┌───┘ * │ │ * │ │ + + * │ │ * │ └──────────────┐ * │ │ * │ ├─┐ * │ ┌─┘ * │ │ * └─┐ ┐ ┌───────┬──┐ ┌──┘ + + + + * │ ─┤ ─┤ │ ─┤ ─┤ * └──┴──┘ └──┴──┘ + + + + * 神獸保佑 * 代碼無(wú)BUG! */ /*** * ___====-_ _-====___ * _--^^^#####// #####^^^--_ * _-^##########// ( ) ##########^-_ * -############// |^^/| ############- * _/############// (@::@) ############\_ * /#############(( // ))############# * -############### (oo) //###############- * -################# / VV //#################- * -###################/ //###################- * _#/|##########/######( / )######/##########|#_ * |/ |#/#/#// #/## | | /##/#/ /#/#/#| | * ` |/ V V ` V #| | | |/#/ V " V V | " * ` ` ` ` / | | | | " " " " * ( | | | | ) * __ | | | | /__ * (vvv(VVV)(VVV)vvv) * 神獸保佑 * 代碼無(wú)BUG! */ /*** * * * __----~~~~~~~~~~~------___ * . . ~~//====...... __--~ ~~ * -. \_|// ||| ~~~~~~::::... /~ * ___-==_ _-~o~ / ||| _/~~- * __---~~~.==~||=_ -_--~/_-~|- | _/~ * _-~~ .=~ | -_ "-~7 /- / || / * .~ .~ | -_ / /- / || / * / ____ / | ~-_/ /|- _/ .|| / * |~~ ~~|--~~~~--_ ~==-/ | ~--===~~ . * " ~-| /| |-~~~ __--~~ * |-~~-_/ | | ~\_ _-~ / * / \__ /~ \__ * _--~ _/ | .-~~____--~-/ ~~==. * ((->/~ ".|||" -_| ~~-/ , . _|| * -_ ~ ~~---l__i__i__i--~~_/ * _-~-__ ~) --______________--~~ * //.-~~~-~_--~- |-------~~~~~~~~ * //.-~~~-- * 神獸保佑 * 代碼無(wú)BUG! */又到小廣告時(shí)間
我自己運(yùn)營(yíng)的公眾號(hào),記錄我自己的成長(zhǎng)!
公眾號(hào):前端曰
公眾號(hào)ID:js-say
ps:是(yue)不是(ri)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109791.html
閱讀原文 showImg(https://segmentfault.com/img/remote/1460000013763036?w=196&h=257); 1. 代碼應(yīng)當(dāng)易于理解 唯一標(biāo)準(zhǔn):讓別人理解的時(shí)間最小 2. 把信息裝到名字里 選擇專業(yè)的詞 避免泛泛的名字 使用具體的名字代替抽象的名字 為名字?jǐn)y帶更多的信息 名字的作用域越大,最好名字越長(zhǎng) 丟掉沒(méi)用的詞 單詞 更多選擇 ...
摘要:的黑客與設(shè)計(jì)剖析設(shè)計(jì)之美的秘密,英文原版在這里,還有一套免費(fèi)教程。的代碼整潔之道程序員的職業(yè)素養(yǎng),英文原版的學(xué)習(xí)如何為他人寫文檔我們與同事或者其他人溝通的很大一部分都是通過(guò)文字來(lái)的。 作者:Artem Sapegin 編譯:胡子大哈 翻譯原文:http://huziketang.com/blog/posts/detail?postId=58aaa33bfc5b7f63e8c23f68...
摘要:剛才看了下一個(gè)新特性,這是干啥用的呢過(guò)去在屬性鏈的調(diào)用中,很容易因?yàn)槟硞€(gè)屬性不存在而導(dǎo)致之后出現(xiàn)的錯(cuò)誤。要注意操作符是,而不是單獨(dú)的。類似的,如果需要取屬性鏈中某函數(shù)并執(zhí)行,就應(yīng)該是。 剛才看了下一個(gè) JS 新特性——「Optional Chaining」,這是干啥用的呢? 過(guò)去在 Object 屬性鏈的調(diào)用中,很容易因?yàn)槟硞€(gè)屬性不存在而導(dǎo)致之后出現(xiàn)Cannot read proper...
摘要:你還在用方式加密密碼嗎引入了函數(shù),內(nèi)核自帶無(wú)需安裝擴(kuò)展。加密方法再好,原始密碼設(shè)置的過(guò)于簡(jiǎn)單都容易被破解,設(shè)置復(fù)雜的密碼才是王道。 你還在用md5+salt方式加密密碼嗎?PHP5.5引入了Password Hashing函數(shù),內(nèi)核自帶無(wú)需安裝擴(kuò)展。在PHP5.4下測(cè)試了下也可是可以的,使用前最好確認(rèn)一下你當(dāng)前的環(huán)境是否支持這些函數(shù)。 Password Hashing主要提供了4個(gè)函數(shù)...
摘要:閱讀原文把錯(cuò)誤打印出來(lái)斷開的原因有很多,最好在斷開時(shí),將錯(cuò)誤打印出來(lái)。的字段表示了斷開的原因。有三個(gè)字段需要注意通過(guò)分析這三個(gè)字段,一般就可以找到斷開原因是錯(cuò)誤碼,是整數(shù)類型是斷開原因,是字符串表示是否正常斷開,是布爾值。 閱讀原文:https://wdd.js.org/websocket-... 1. 把錯(cuò)誤打印出來(lái) WebSocket斷開的原因有很多,最好在WebSocket斷開時(shí)...
閱讀 3975·2021-10-09 09:43
閱讀 2883·2021-10-08 10:05
閱讀 2744·2021-09-08 10:44
閱讀 889·2019-08-30 15:52
閱讀 2819·2019-08-26 17:01
閱讀 3026·2019-08-26 13:54
閱讀 1657·2019-08-26 10:48
閱讀 815·2019-08-23 14:41