摘要:但是,有條原則應(yīng)該是對的少數(shù)服從多數(shù)用工具統(tǒng)一風(fēng)格。我曾經(jīng)以為,程序員有自己獨(dú)特的代碼風(fēng)格挺好的。業(yè)界有一些流行的代碼風(fēng)格,比如和。你也可以使用來統(tǒng)一風(fēng)格。比如,的配置,只能統(tǒng)一示例的代碼風(fēng)格,而不能統(tǒng)一后面兩者。相比于代碼風(fēng)格,我更推薦。
譯者按: 關(guān)于代碼風(fēng)格,不同的人有不同的偏好,其實(shí)并沒有什么絕對的對錯。但是,有 2 條原則應(yīng)該是對的: 少數(shù)服從多數(shù);用工具統(tǒng)一風(fēng)格。
原文: Why robots should format our code for us
譯者: Fundebug
為了保證可讀性,本文采用意譯而非直譯。另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。
我曾經(jīng)以為,程序員有自己獨(dú)特的代碼風(fēng)格挺好的。因?yàn)?,一個成熟的程序員應(yīng)該清楚,好的代碼應(yīng)該是怎樣的。
我的大學(xué)教授告訴我,他的學(xué)生在用我的代碼,因?yàn)槲业拇a風(fēng)格不一樣。我想了一下,也許是因?yàn)槲业拇a至少是有風(fēng)格的,而其他人的代碼一團(tuán)糟。
一些示例 示例 1:讀了The Programmers’ Stone之后,我把大括號這樣寫:
if (food === "pizza") { alert("Pizza ;-)"); } else { alert("Not pizza ;-("); }
但是,我意識到在前端社區(qū)里,也許只有我一個人這樣寫的。而其他人都是這樣寫的:
if (food === "pizza") { alert("Pizza ;-)"); } else { alert("Not pizza ;-("); }
或者這樣:
if (food === "pizza") { alert("Pizza ;-)"); } else { alert("Not pizza ;-("); }
于是,我改變了風(fēng)格,采用了最后一種寫法。
示例 2將多個方法鏈接起來時(shí),我喜歡這樣寫:
function foo(items) { return items .filter(item => item.checked) .map(item => item.value) ; }示例 3
讀了Why you should enforce Dangling Commas for Multiline Statements,我意識到了trailing commas寫法更加易于重構(gòu):
const food = [ "pizza", "burger", "pasta", ]
但是,這種寫法非常少見。我審查過的代碼中,沒人這樣寫。于是,我只能放棄這種寫法,向現(xiàn)實(shí)世界低頭。
示例 4我還有一個不合群的習(xí)慣。在行尾寫代碼注釋之前,我習(xí)慣敲 2 個空格:
const volume = 200; // ml
我覺得這樣寫好看些。但是,這會導(dǎo)致代碼不一致,因?yàn)槠渌酥磺靡粋€空格。
JavaScript 開發(fā)者是怎樣做的很遺憾,JavaScript 沒有官方的代碼風(fēng)格。業(yè)界有一些流行的代碼風(fēng)格,比如Airbnb和Standard。使用它們的話,團(tuán)隊(duì)成員之間的代碼會更易讀。
你也可以使用ESLint 來統(tǒng)一風(fēng)格。但是它并不能保證代碼 100%一致。比如,ESLint 的 Airbnb 配置,只能統(tǒng)一示例 1的代碼風(fēng)格,而不能統(tǒng)一后面兩者。
JavaScript 開發(fā)者應(yīng)該怎么做?有一些語言有非常嚴(yán)格的代碼風(fēng)格,并且有工具可以用于統(tǒng)一風(fēng)格。因此,開發(fā)者不需要浪費(fèi)時(shí)間去爭論代碼風(fēng)格的優(yōu)劣。例如,Reason 語言的Refmt,和 Rust 語言的Rustfmt。
現(xiàn)在,JavaScript 終于有了一個解決方案。有一個新工具,叫做Prettier,它運(yùn)用自身的規(guī)則將你的的代碼重新格式化。無論你之前的代碼風(fēng)格是怎樣。
我們不妨試用一下 Prettier。
輸入代碼是這樣的:
if (food === "pizza") { alert("Pizza ;-)"); } else { alert("Not pizza ;-("); } function foo(items) { return items .filter(item => item.checked) .map(item => item.value) ; } const food = [ "pizza", "burger", "pasta", ]
Prettier 處理之后的代碼是這樣的:
if (food === "pizza") { alert("Pizza ;-)"); } else { alert("Not pizza ;-("); } function foo(items) { return items.filter(item => item.checked).map(item => item.value); } const food = ["pizza", "burger", "pasta"];
也許,你并不喜歡這種風(fēng)格。比如,我不喜歡 else 放在大括號后面,也不喜歡把鏈?zhǔn)椒椒ㄈ繉懺谕恍?。但是,我發(fā)現(xiàn)使用Prettier有很多益處:
幾乎不需要做決定,因?yàn)??Prettier 的配置選項(xiàng)很少。
團(tuán)隊(duì)成員不需要為規(guī)則去爭論。
開源代碼開發(fā)者不需要去學(xué)習(xí)項(xiàng)目的代碼風(fēng)格。
不需要去修復(fù) ESLint 報(bào)告的風(fēng)格問題。
保存文件的時(shí)候可以自動統(tǒng)一風(fēng)格。
結(jié)論Prettier 已經(jīng)被一些非常流行的項(xiàng)目比如 React 和 Babel 采用了。對于我自己的項(xiàng)目,我已經(jīng)開始從自己的個性化風(fēng)格全部轉(zhuǎn)為 Prettier 風(fēng)格。相比于 Airbnb 代碼風(fēng)格,我更推薦 Prettier。
剛開始,我會覺得 Prettier 風(fēng)格非常差。但是,當(dāng)我發(fā)現(xiàn)自己需要手動去調(diào)整代碼風(fēng)格時(shí),我意識到 Prettier 真的非常好用。
Prettier 可以在保存文件的時(shí)候可以自動統(tǒng)一風(fēng)格:
感興趣的話,可以按照這個教程配置 Prettier。
關(guān)于FundebugFundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java線上應(yīng)用實(shí)時(shí)BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計(jì)處理了10億+錯誤事件,付費(fèi)客戶有Google、360、金山軟件、百姓網(wǎng)等眾多品牌企業(yè)。歡迎大家免費(fèi)試用!
版權(quán)聲明轉(zhuǎn)載時(shí)請注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/10/23/format-code-use-Prettier/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/102775.html
摘要:由于本身不能個性化配置,有時(shí)可能會引起不適,但是至少保證團(tuán)隊(duì)成員可以輕易統(tǒng)一代碼風(fēng)格。就是將多于一個字母的合成一個字形。自從年雙十一正式上線,累計(jì)處理了億錯誤事件,得到了金山軟件等眾多知名用戶的認(rèn)可。 譯者按: IDE是生產(chǎn)力的保證! 原文:Visual Studio Code Settings and Extensions for Faster JavaScript Develop...
摘要:官網(wǎng)地址推薦指數(shù)顆星推薦理由自動化部署和集成部署的好工具,操作簡單,顯示友好,具備多種插件,應(yīng)有盡有,支持多類型語言的項(xiàng)目集成和部署。官網(wǎng)地址如果你有其他好用的工具,不妨也分享一下原博客鏈接前端開發(fā)團(tuán)隊(duì)的工具鏈 匯集前端開發(fā)團(tuán)隊(duì)中經(jīng)常使用的好工具,分享給大家! 注:都是開源工具 showImg(https://segmentfault.com/img/remote/1460000019...
摘要:整個代碼檢查和格式化流程應(yīng)該規(guī)范為如下步驟使用并且嘗試自動修復(fù)所有問題有提示,可以進(jìn)行修復(fù),按照配置文件來進(jìn)行修復(fù)。參考文檔如何花分鐘解決產(chǎn)生的各種錯誤的記憶現(xiàn)場本文轉(zhuǎn)載自我的更新版梳理前端開發(fā)使用和來檢查和格式化代碼問題 更新版,之前的版本可以看這里:梳理前端開發(fā)使用eslint和prettier來檢查和格式化代碼問題 一、問題痛點(diǎn) 在團(tuán)隊(duì)的項(xiàng)目開發(fā)過程中,代碼維護(hù)所占的時(shí)間比重...
摘要:但是關(guān)于代碼風(fēng)格,我們很難區(qū)分誰對誰錯,不同的人有不同偏好,唯有強(qiáng)制要求才能規(guī)避爭論。所以,團(tuán)隊(duì)關(guān)于代碼風(fēng)格必須遵循兩個基本原則少數(shù)服從多數(shù)用工具統(tǒng)一風(fēng)格。本文將介紹,如何使用來統(tǒng)一我們的前端代碼風(fēng)格。 加分號還是不加分號?tab還是空格?你還在為代碼風(fēng)格與同事爭論得面紅耳赤嗎? 正文之前,先看個段子放松一下: 去死吧!你這個異教徒! 想起自己剛?cè)胄械臅r(shí)候,從svn上把代碼checko...
摘要:忍無可忍只能拔槍相見了。而只關(guān)心格式化文件最大長度混合標(biāo)簽和空格引用樣式等。可見,代碼格式統(tǒng)一的問題,交給再合適不過了。和配合使用,風(fēng)味更佳。我的配置文件如下到此,安裝完畢,使用就可格式化代碼。兩者配合才能使項(xiàng)目代碼優(yōu)雅健壯 試想一個多人開發(fā)的項(xiàng)目,每次同步代碼,看到各個風(fēng)格迥異,換行空格混亂,4格,2格縮進(jìn)交替上演的代碼文件,分分鐘逼死強(qiáng)迫癥啊。忍無可忍只能拔槍相見了~~。統(tǒng)一的代碼...
閱讀 1756·2021-11-18 10:02
閱讀 2270·2021-11-15 11:38
閱讀 2729·2019-08-30 15:52
閱讀 2266·2019-08-29 14:04
閱讀 3288·2019-08-29 12:29
閱讀 2135·2019-08-26 11:44
閱讀 1059·2019-08-26 10:28
閱讀 903·2019-08-23 18:37