We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
最近在研究代码重构之路,发现自己的一些代码写得有点丑陋而且可读性不强,于是去学习了一些经验,整理如下
可读性强而且简洁的代码让人有阅读的欲望,也可以显示出代码的一种美感,同时便于后期的维护和扩展。如何让其他人看到你的代码不难受、易接受,是开发者的一种能力,也是一种修养~
通过对变量取有含义的名字,不仅可以免除注释带来的代码不美观的弊端,还能提高可读性。所谓顾名思义,就是这个道理。
//Bad const yyyymmdstr = moment().format('YYYY/MM/DD'); //Good const currentDate = moment().format('YYYY/MM/DD'); //遍历的情况 //Bad tagList.forEach(i=>{ doSomething(i); }) //Good tagList.forEach(tag=>{ doSomething(tag); })
在代码中,我们常常需要使用一些常量(配置项),这些常量不宜直接出现在代码中,否则会难以知晓它的意思,也不便于之后的管理。最好是将这些常量使用全大写字符串命名,并将其抽取到一个配置项文件中,防止日后更改~
//Bad setTimeout(blastOff, 86400000); //Good //在 config.js 中配置 MILLISECONDS_IN_A_DAY = 86400000; import { MILLISECONDS_IN_A_DAY } from 'config.js' setTimeout(blastOff, MILLISECONDS_IN_A_DAY);
对于一些有默然参数的函数,最好把参数的默认值直接写上,而不是在函数体里面写条件语句,如下:
//Bad function queryUser(userId) { const userId = userId || '11111'; // do something } //Good function queryUser(userId = '11111') { // do something }
当需要给一个函数传递一个对象结构的参数时,可以使用 ES6 的解构语法,使用解构有如下好处:
//Bad function queryUser(userId, userName, age, sex) { // ... } //Good function queryUser({userId, userName, age, sex}){ // ... } queryUser({'11111', '恬竹', '18', 'woman'})
在给某个函数传递一个引用对象时,可能会给该引用对象带来一些副作用
//Bad const addItemToCart = (cart, item) => { cart.push({ item, date: Date.now() }); }; //Good const addItemToCart = (cart, item) => { return [...cart, { item, date: Date.now() }]; };
组件中的函数最好使用箭头函数,可以避免手动绑定 this 上下文
//Bad export default class MyContainer extends Component { contructor (props) { super(props) this.state = { stateItemA: undefined, stateItemB: 'default string' } this.someMethod = this.someMethod.bind(this) this.anotherMethod = this.anotherMethod.bind(this) } someMethod () { // ... } anotherMethod () { // ... } render () { return ( <SomeComponent /> ) } } //Good export default class MyContainer extends Component { state = { stateItemA: undefined, stateItemB: 'default string' } someMethod = () => { // ... } anotherMethod = () => { // ... } render () { return ( <SomeComponent /> ) }
在给组件传递 props 时,为每个 props 或者 state 进行单个声明显然和冗余,可以直接使用扩展运算符进行传递:
//Bad class MyContainer extends Component { state = { itemA: 'A', itemB: 'B', itemC: 'C' } _onPress = () => { // ... } render () { return ( <MyComponent itemA={this.state.itemA} itemB={this.state.itemB} itemC={this.state.itemC} onPress={this._onPress} /> ) } } //Good class MyContainer extends Component { state = { itemA: 'A', itemB: 'B', itemC: 'C' } _onPress = () => { // ... } render () { return ( <MyComponent {...this.state} onPress={this._onPress} /> ) } }
持续更新中~
The text was updated successfully, but these errors were encountered:
No branches or pull requests
可读性强而且简洁的代码让人有阅读的欲望,也可以显示出代码的一种美感,同时便于后期的维护和扩展。如何让其他人看到你的代码不难受、易接受,是开发者的一种能力,也是一种修养~
变量
起有含义的变量名
通过对变量取有含义的名字,不仅可以免除注释带来的代码不美观的弊端,还能提高可读性。所谓顾名思义,就是这个道理。
对于常量使用全大写字符串命名
在代码中,我们常常需要使用一些常量(配置项),这些常量不宜直接出现在代码中,否则会难以知晓它的意思,也不便于之后的管理。最好是将这些常量使用全大写字符串命名,并将其抽取到一个配置项文件中,防止日后更改~
函数
使用默认参数而不是条件语句
对于一些有默然参数的函数,最好把参数的默认值直接写上,而不是在函数体里面写条件语句,如下:
将对象作为参数传递时使用解构
当需要给一个函数传递一个对象结构的参数时,可以使用 ES6 的解构语法,使用解构有如下好处:
防止副作用
在给某个函数传递一个引用对象时,可能会给该引用对象带来一些副作用
使用箭头函数
组件中的函数最好使用箭头函数,可以避免手动绑定 this 上下文
组件
使用扩展运算符传递 props 给组件
在给组件传递 props 时,为每个 props 或者 state 进行单个声明显然和冗余,可以直接使用扩展运算符进行传递:
持续更新中~
The text was updated successfully, but these errors were encountered: