「標準」的 JS風格(規範)
首先,這份 JS風格指南已經在我司的前端團隊實行半年多了;
其次,在程式設計師的世界裡,從入行到資深都需要面對幾個世界級的難題,如:
- 世界上最好的編輯器是什麼?
- 是用空格還是 TAB?用空格還特麼衍生出 2空格 VS 4空格。
- JS到底要不要寫分號?
- …
最後,PHP是世界上最好的語言。
一、規範VS自由
對程式設計師的每個個體來說,有程式碼規範其實不一定是好事,因為肯定會影響到寫碼的自由。
比如某程式設計師習慣用 Tab,團隊引入了某規範說都要換成 Spaces,這對於 Tab黨來說這不是“噩耗”麼。
尤其是對於老程式設計師,如果習慣多年的程式碼風格需要改變(先且不論好壞),確實是件很擰巴的事情。
但是對整個團隊來說,有程式碼規範肯定是大好事。而且由於好處實在太多,比如方便管理、好維護、易閱讀等等,所以我也別一條條去羅列了,大家都懂:)
如果,某套程式碼規範甚至程式碼流程,能讓團隊中的成員都相對滿意,而且還能切實的去執行…我想說:請好好珍惜這美好的時光。
目前,各個大廠、各種開源專案都有多種 JS的寫法規範。今天本文介紹的 JS 規範號稱“Standard Style”,絕對是使用最廣的寫法之一(star 7800+),而且有提供配套的工具、外掛可以方便的使用。
二、介紹“JS Standard Style”
standardjs就是這個這個專案的名稱。
對了,它的作者叫 Feross,建議程式設計師們去了解一下,你會知道程式設計師世界的“猛人”到底能有多凶殘。
請仔細看看這篇 JS規範要點,The Rules:
- 2 spaces – for indentation
- Single quotes for strings – except to avoid escaping
- No unused variables – this one catches tons of bugs!
- No semicolons – It’s fine. Really!
- Never start a line with (, [, or `
- This is the only gotcha with omitting semicolons – automatically checked for you!
- Space after keywords if (condition) { … }
- Space after function name function name (arg) { … }
-
Always use === instead of == – but obj == null is allowed to check null undefined. - Always handle the node.js err function parameter
- Always prefix browser globals with window – except document and navigator are okay
- Prevents accidental use of poorly-named browser globals like open, length, event, and name.
- And more goodness – give standard a try today!
沒錯,先不管這個規範帶來了多大的好處和優點,但是我標註的兩個條件確實有點要命:沒有分號;2空格。
有關是否有分號的討論可以寫許多篇論文了;
至於用 tab還是用空格…都可以引發程式設計師的聖戰啦。
所以這裡看看就好,想了解更多的同學,強烈建議你私下去搜索些更多資料。ps:為毛要私下搜尋?請參考下圖,我其實只是想為你的安全考慮:)
三、先簡單用起來!
官方的 demo 是使用 npm script 來展示的。一句話表述:先全域性安裝 standard這個包,然後使用 CLI是實現後續的操作和展示。
$ npm install standard –global
這種方式很適合用作 JS程式碼的校驗稽核。如下圖:
但是如果想配合日常開發用上,達到自動提醒,甚至自動格式化的程度,我非常推薦配合著對應的編輯器外掛來使用。
四、配合編輯器外掛
我喜歡和推薦這個規範的主要原因就是 —— 不用配置!
ps:如果你有了解過 ESLint,面對那各種各樣的 Configuring 和 Rules,特麼有幾個人能堅持去看完的,反正我是放棄了。
但是使用 standardjs,它已經把規則都定好了,所以如果你接受它的規則,那麼直接無腦使用就行了。如下圖:
支援 standardjs外掛的編輯器還是很多的,幾乎前端常用的編輯器都覆蓋到了:
Sublime Text、Atom、Vim、Emacs、Brackets、Visual Studio Code、WebStorm/PhpStorm。
篇幅有限,僅介紹下在 Atom編輯器下的使用和效果吧。Atom需要安裝對應的兩款外掛:
- linter-js-standard - Linter plugin for JavaScript Standard Style
- standard-formatter - Format file contents using JavaScript Standard Style
效果如下圖:
啊~這是個美好的時代。
五:如何在專案中實現統一的程式碼風格
不是每個程式設計師都有程式碼潔癖,也不是每個程式設計師都偏執的想寫好程式碼,更多的普通人其實只是想少折騰的把工作完成就好。
所以對於在團隊內推行程式碼規範這種事情,順其自然就好。
但是,使用以下這套方案可以讓這套規範推行的更順暢些。
第一步:專案中使用 ESLint,安裝對應的包:
- eslint
- eslint-config-standard
- eslint-plugin-promise
- eslint-plugin-standard
第二步:編輯器安裝對應外掛,以 Atom舉例:
- linter-js-standard
- linter
- linter-eslint
- standard-formatter
最後一步:在專案中增加的 .eslintrc,只需要一行即可
extends: standard
開發時自動格式化就這麼實現了,想想是不是還有點小激動呢。
ps:希望你有顆包容的心,因為在這半年來,我們也確實遇到了一些小問題,善用 stackoverflow 和開源專案對應的 Issue,各種問題你都能找到答案。
六、小結:聊幾句優、缺點
對著這套 JS規範本身,一直都在泛泛而談,優點和缺點的論述到處散落著,我在這簡單梳理下我個人理解吧。
有關優點:
- 閱讀程式碼的心情會變好 - 工作年限越長越能理解這句話的含義,這也是我最在意的一點,誰會有好心情去讀第一眼糟糕的程式碼;更沒有人願意去讀一個幾百行,但是有幾套程式碼風格的程式碼。
- 不用學習麻煩的 ESLint,無配置。
- 規範中有一條“No unused variables”沒有細說,但確實非常有用。未使用的變數會進行提示,方便你優化、縮減程式碼,甚至定位問題。
- 想一想,如果團隊有新人加入,不用過於擔心他的程式碼風格了,不管他的工作年限。
- 有套路、好維護。
有關缺點:
- 如果對“JS Standard Style”的某條規範有異議,能否去修改呢?答:不能。
- 會影響少數人自由。單方面會冒犯到其他程式設計師,比如 Tab黨、4空格黨。
- 我們全團隊使用 Atom,配合著對應的外掛,偶爾會有點小問題。萬能的 stackoverflow 和Issue 會幫助到我們。
- 對了,別被這套規範的名稱給騙了,這其實不是真正的 JS標準,真正的 JS標準現在還在討論的沒玩沒了呢。
以上就是我使用這套規範的感受吧。
最後,感謝已經離職的、優秀的德森同學(阿里花名“全棧”,我就問你們怕不怕)。是他強行在我們的 Nodejs Docker專案裡面加上了這套玩意,讓我們不得不用上了,哈哈哈哈哈哈哈哈。
這篇文章確實有點長了,那麼再長點也無所謂了吧,於是我找到了下面這幅圖…
七、看圖,講一個悲傷的故事
如果你沒有尷尬癌,強烈推薦你看這個圖片的出處 —— 《矽谷》。
真的很多搞笑的點只有程式設計師才能正確 Get。
就這樣,over.
comments powered byDisqus相關推薦
「標準」的 JS風格(規範)
首先,這份 JS風格指南已經在我司的前端團隊實行半年多了; 其次,在程式設計師的世界裡,從入行到資深都需要面對幾個世界級的難題,如: 世界上最好的編輯器是什麼?是用空格還是 TAB?用空格還特麼衍生出 2空格 VS 4空格。JS到底要不要寫分號?…最後,PHP是世界上最好的語言。 一、規範VS自由 對程式
「標準」的 JS風格
首先,這份 JS風格指南已經在我司的前端團隊實行半年多了; 其次,在程式設計師的世界裡,從入行到資深都需要面對幾個世界級的難題,如: 世界上最好的編輯器是什麼? 是用空格還是 TAB?用空格還特麼衍生出 2空格 VS 4空格。 JS到底要不要寫分號? ... 最後,PHP是世界上最好的語言。 一、規範V
Chapter5-標準I/O庫(補充)-「APUE讀書筆記」
實現 每個標準I/O流都有一個相關聯的檔案描述符,可以用fileno函式來獲取。 #include<stdio.h> int fileno(FILE* fp); //POSIX支援的擴充套件,函式dup和fcntl需要此函式 one
LOJ #2719. 「NOI2018」冒泡排序(組合數學 + 樹狀數組)
git stderr 好的 sizeof 序列 下界 deb efi 如果 題意 給你一個長為 \(n\) 的排列 \(p\) ,問你有多少個等長的排列滿足 字典序比 \(p\) 大 ; 它進行冒泡排序所需要交換的次數可以取到下界,也就是令第 \(i\) 個數為 \(a_
「深入Java虛擬機(2)」:Class類文件結構
1.5 trac 三種 type 類構造 face 方法 class throw Java是與平臺無關的語言,這得益於Java源代碼編譯後生成的存儲字節碼的文件,即Class文件,以及Java虛擬機的實現。不僅使用Java編譯器可以把Java代碼編譯成存儲字節碼的Class
「深入Java虛擬機(4)」:類加載機制
來講 合並 field 數字 對象 例如 二進制 種類 jar 類加載過程 類從被加載到虛擬機內存中開始,到卸載出內存為止,它的整個生命周期包括:加載、驗證、準備、解析、初始化、使用和卸載七個階段。 其中類加載的過程包括了加載、驗證、準備、解析、初始化五個階段。在這五個階段
「深入Java虛擬機(6)」:Java語法糖
拆裝箱 重載 jdk1 支持 名稱 不存在 語法糖 pub 簽名 語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家Peter.J.Landin發明的一個術語,指在計算機語言中添加的某種語法,這種語法對語言的功能並沒有影響,但是更方便程序員使用。Ja
【Java】「深入理解Java虛擬機器」學習筆記(1) - Java語言發展趨勢
這本書寫的比較早,現在這些功能都已經不同程度的實現了。 1、模組化 JDK9之前的版本都是一個整體,使用者可能只需要使用一個小功能,但他不得不下載整個JDK。不能滿足定製化需求,顯然Java語言的發展因此大大受限。 所以,Sun公司在OpenJDK建立了一個Jigsaw(拼圖)的專案來推動模
【Java】「深入理解Java虛擬機器」學習筆記(2)-記憶體管理
一、執行時資料區 JVM在執行Java程式的時候,將其執行時資料區劃分為若干不同區域。它們的用途和建立及銷燬的時間不同。 1、程式計數器(Program Counter Register) 是一塊很小的記憶體空間。當執行緒執行的是Java方法,它記錄的是當前正在執行的
【Java】「深入理解Java虛擬機」學習筆記(4)- 類文件結構
jruby idt this 原因 cal constant borde ESS groov 我為什麽喜歡Java,另重要原因就是跨平臺,就是WORA。 程序員是爽了,但肯定有人要為你遮風擋雨,解決WORA的基石就是字節碼+虛擬機。 ?Tip Java生
「深入Java虛擬機器(6)」:Java語法糖
語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家Peter.J.Landin發明的一個術語,指在計算機語言中新增的某種語法,這種語法對語言的功能並沒有影響,但是更方便程式設計師使用。Java中最常用的語法糖主要有泛型、變長引數、條件編譯、自動拆裝箱、內部類等。虛擬機器並不支援這些語法
Js學習(7)標準庫-object物件
Js原生提供Object物件,O大寫,所有的其他物件都繼承自Object物件,都是Object的例項 Object物件的原生方法分為兩類: 本身的方法:直接定義在Object物件的方法 例項方法:定義在Object原型物件Object.prototype上的方法,可以被Object例項直接使用 凡是定
#520. 「LibreOJ β Round #3」緋色 IOI(開端) 貪心
媽耶,沒臉見人了。巨水,想出來不寫,人生重來算了。 就是個找規律題,相鄰一個連一下,但是我沒注意到是IOI賽制,以為是OI賽制所以沒打,感覺70分好打但是懶得了。。 證明就是把相鄰3個列一下式子就出
[結論] LibreOJ #520. 「LibreOJ β Round #3」緋色 IOI(開端)
題意 戳這裡 題解 這是一道結論題。 我們先把數放到數軸上考慮。定義兩個點的距離為幾何上的距離的平方。 我們可以把一個迴路看作兩條從 1 到 n 的不相交的路徑。 有一種經典的二路取數的 O
#LOJ2541. 「PKUWC2018」獵人殺(分治+NTT)
題意 有 n n n個人,每個人有一個權值
「學習筆記」請求轉發(Forward)與請求重定向(Redirect)的區別
通過一個比喻來簡單理解: 請求轉發:A向B傳送一次請求,想讓他完成某項工作,當B接受到請求時,發現自己完成不了,又請求C幫忙,C接收到B請求之後最終完成了該項工作,並把最後的結果交給了A。在此期間,A只發送了一次請求,他只知道把任務交給了B,至於B是如何完成的,A並不知道,他只等待最終的
「PKUSC2018」真實排名(排列組合,數學)
前言 為什麼隨機跳題會跳到這種題目啊? Solution 我們發現可以把這個東西分情況討論: 1.這個點沒有加倍 這一段相同的可以看成一個點,然後後面的都可以。 這一段看成一個點,然後前面的不能對他造成影響的都可以。 2.這個點加倍了 這一段相同的看做一個點,然後前面的都可以
loj #2000. 「SDOI2017」數字表格 (莫比烏斯)
程式碼: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=1e
Loj#6432「PKUSC2018」真實排名(二分查找+組合數)
變化 printf 情況 == ron while 排序 改變 type 題面 Loj 題解 普通的暴力是直接枚舉改或者不改,最後在判斷最後對哪些點有貢獻。 而這種方法是很難優化的。所以考慮在排序之後線性處理。首先先假設沒有重復的元素 struct Node { int p
js -- ES6(一)-- 簡介(根據阮一峰ES6標準入門整理)
目前正在學習ES6,根據阮一峰的ES6入門2,學到哪更新到哪裡,都是基本的知識,複雜的目前還不會,涉及的程式碼都是親自執行過的,若發現錯誤請指正。 ES6 提供了許多新特性,但是並不是所有的瀏