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