译者按: 关于代码风格,不同的人有不同的偏好,其实并没有什么绝对的对错。但是,有2条原则应该是对的: 少数服从多数;用工具统一风格。

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

我曾经以为,程序员有自己独特的代码风格挺好的。因为,一个成熟的程序员应该清楚,好的代码应该是怎样的。

我的大学教授告诉我,他的学生在用我的代码,因为我的代码风格不一样。我想了一下,也许是因为我的代码至少是有风格的,而其他人的代码一团糟。

一些示例

示例1:

读了The Programmers’ Stone之后,我把大括号这样写:

  1. if (food === 'pizza')
    {
    alert('Pizza ;-)');
    }
    else
    {
    alert('Not pizza ;-(');
    }

但是,我意识到在前端社区里,也许只有我一个人这样写的。而其他人都是这样写的:

  1. if (food === 'pizza') {
    alert('Pizza ;-)');
    } else {
    alert('Not pizza ;-(');
    }

或者这样:

  1. if (food === 'pizza') {
    alert('Pizza ;-)');
    }
    else {
    alert('Not pizza ;-(');
    }

于是,我改变了风格,采用了最后一种写法。

示例2

将多个方法链接起来时,我喜欢这样写:

  1. 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写法更加易于重构:

  1. const food = [
    'pizza',
    'burger',
    'pasta',
    ]

但是,这种写法非常少见。我审查过的代码中,没人这样写。于是,我只能放弃这种写法,向现实世界低头。

示例4

我还有一个不合群的习惯。在行尾写代码注释之前,我习惯敲2个空格:

  1. const volume = 200; // ml

我觉得这样写好看些。但是,这会导致代码不一致,因为其他人只敲一个空格。

JavaScript开发者是怎样做的

很遗憾,JavaScript没有官方的代码风格。业界有一些流行的代码风格,比如AirbnbStandard。使用它们的话,团队成员之间的代码会更易读。

你也可以使用ESLint来统一风格。但是它并不能保证代码100%一致。比如,ESLint的Airbnb配置,只能统一示例1的代码风格,而不能统一后面两者。

JavaScript开发者应该怎么做?

有一些语言有非常严格的代码风格,并且有工具可以用于统一风格。因此,开发者不需要浪费时间去争论代码风格的优劣。例如,Reason语言的Refmt,和Rust语言的Rustfmt

现在,JavaScript终于有了一个解决方案。有一个新工具,叫做Prettier,它运用自身的规则将你的的代码重新格式化。无论你之前的代码风格是怎样。

我们不妨试用一下Prettier

输入代码是这样的:

  1. if (food === 'pizza')
    {
    alert('Pizza ;-)');
    }
    else
    {
    alert('Not pizza ;-(');
    }
  2.  
  3. function foo(items) {
    return items
    .filter(item => item.checked)
    .map(item => item.value)
    ;
    }
  4.  
  5. const food = [
    'pizza',
    'burger',
    'pasta',
    ]

Prettier处理之后的代码是这样的:

  1. if (food === "pizza") {
    alert("Pizza ;-)");
    } else {
    alert("Not pizza ;-(");
    }
  2.  
  3. function foo(items) {
    return items.filter(item => item.checked).map(item => item.value);
    }
  4.  
  5. const food = ["pizza", "burger", "pasta"];

也许,你并不喜欢这种风格。比如,我不喜欢else放在大括号后面,也不喜欢把链式方法全部写在同一行。但是,我发现使用Prettier有很多益处:

  • 几乎不需要做决定,因为 Prettier的配置选项很少。
  • 团队成员不需要为规则去争论。
  • 开源代码开发者不需要去学习项目的代码风格。
  • 不需要去修复ESLint报告的风格问题。
  • 保存文件的时候可以自动统一风格。

结论

Prettier已经被一些非常流行的项目比如React和Babel采用了。对于我自己的项目,我已经开始从自己的个性化风格全部转为Prettier风格。相比于Airbnb代码风格,我更推荐Prettier。

刚开始,我会觉得Prettier风格非常差。但是,当我发现自己需要手动去调整代码风格时,我意识到Prettier真的非常好用。

Prettier可以在保存文件的时候可以自动统一风格:

感兴趣的话,可以按照这个教程配置Prettier

  1. 版权声明:
  2. 转载时请注明作者Fundebug以及本文地址:
  3. https://blog.fundebug.com/2017/10/23/format-code-use-Prettier/

我为什么推荐Prettier来统一代码风格的更多相关文章

  1. Prettier来统一代码风格

    prettier是一款解决代码风格问题的代码格式化工具,功能强大,简单易用,支持多语言,减少配置项. 前端开发过程中每个人写JavaScript的代码风格都不一样,又不能说别人写的代码有问题,这都是习 ...

  2. 统一代码风格工具——editorConfig

    前面的话 在团队开发中,统一的代码格式是必要的.但是不同开发人员的代码风格不同,代码编辑工具的默认格式也不相同,这样就造成代码的differ.而editorConfig可以帮助开发人员在不同的编辑器和 ...

  3. VSCode 使用 ESLint + Prettier 来统一 JS 代码

    环境: VSCode 1.33.1 Node.js 8.9.1 一.ESLint 1.介绍 ESLint是最流行的JavaScript Linter. Linter 是检查代码风格/错误的小工具.其他 ...

  4. Visual Studio 代码风格约束

    团队内部若能统一代码风格对于日后的项目维护大有裨益,但面对厚达十几甚至几十页的代码风格规范,开发人员难免产生抵触心理.Python和Go等在语言层面就对代码风格作了一定的约束,但C#并没有,为解决这个 ...

  5. 《码处高效:Java开发手册》之代码风格

    流水淡,碧天长,鸿雁成行.编码风格,简捷清爽,反引无限风光. 在美剧<硅谷>中有这样一个经典镜头,主人公 Richard 与同为开发工程师的女友闹分手,理由是两人对缩进方式有着截然不同的编 ...

  6. Visual Studio Code 使用 ESLint 增强代码风格检查

    前言 在团队协作开发中,为了统一代码风格,避免一些低级错误,应该设有团队成员统一遵守的编码规范.很多语言都提供了Lint工具来实现这样的功能,JavaScript也有类似的工具:ESLint.除了可以 ...

  7. 用 Prettier 统一团队的代码风格~

    使用 prettier 自動調整 JavaScript 樣式 GFM 格式说明 为什么你不能缺少Linter(以及代码美化工具) 使用 prettier 自動調整 JavaScript 樣式 Reac ...

  8. 使用ESLint+Prettier来统一前端代码风格

    Prettier 简单使用 ESLint 与 Prettier配合使用 首先肯定是需要安装 prettier ,并且你的项目中已经使用了 ESLint ,有 eslintrc.js 配置文件. npm ...

  9. 03.ElementUI源码学习:代码风格检查和格式化配置(ESlint & Prettier)

    书接上文.在团队协作中,为避免低级Bug.以及团队协作时不同代码风格对彼此造成的困扰与影响,会预先制定编码规范.使用 Lint工具和代码风格检测工具,则可以辅助编码规范执行,格式化代码,使样式与规则保 ...

随机推荐

  1. 前端开发掌握nginx常用功能之server&location匹配规则

    nginx主要是公司运维同学必须掌握的知识,涉及到反向代理.负载均衡等服务器配置.前端开发尤其是纯前端开发来说对nginx接触的并不多,但是在一些情况下,nginx还是需要前端自己来搞:例如我们公司的 ...

  2. 透彻讲解,Java线程的6种状态及切换

    Java中线程的状态分为6种. 1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法.2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running) ...

  3. 超实用的 Nginx 极简教程,覆盖了常用场景

    概述 什么是 Nginx? Nginx (engine x) 是一款轻量级的 Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向代理? 反向代理(Reverse ...

  4. 第58节:Java中的图形界面编程-GUI

    欢迎到我的简书查看我的文集 前言: GUI是图形用户界面,在Java中,图形用户界面我们用GUI表示,而GUI的完整英文为: Graphical User Interface(图形用户接口), 所谓图 ...

  5. java中this的N种使用方法

    this可能是几乎所有有一点面向对象思想的语言都会引用到的变量,java自然不例外.只是,this有多少种用法,我也不知道了,让我们来see see. 由简入奢! 易. 来个例子说明下: public ...

  6. jsp进阶

    Jsp,前段的数据读取到后端 获取前段输入框数据 request.getParameter(前段输入框的name值) Request.代表转发,(代码在服务器内部执行的一次性请求,url地址不会发生改 ...

  7. Python中parameters与argument区别

    定义(define)一个带parameters的函数: def addition(x,y): return (x+y) 这里的x,y就是parameter 调用addition(3,4) 调用(cal ...

  8. Python - 一些值得阅读的PEP

    1- PEP简介 PEP是Python增强提案(Python Enhancement Proposal)的缩写.社区通过PEP来给Python语言建言献策,每个版本的新特性和变化都是通过PEP提案经过 ...

  9. RIPng配置(第十三组)

    拓扑如下 配置rip指令和ipv6包允许路由指令以r1为例 在r1上配置拓扑上对应网段的ip,r1上两个连接路由器的端口手动设置ip,同网段的路由器端口ip自动获取. r2配置 r3 配置完后查看路由 ...

  10. java多线程(2)---生命周期、线程通讯

    java生命周期.线程通讯 一.生命周期 有关线程生命周期就要看下面这张图,围绕这张图讲解它的方法的含义,和不同方法间的区别.    1.yield()方法 yield()让当前正在运行的线程回到就绪 ...