84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
和朋友聊,面向过程的开发中代码有大量的IF ELSE,在java中可以用一些设计模式替换掉这些逻辑。不过我还没用很明白。 是否在js中也有类似的方法减少if else的使用
欢迎选择我的课程,让我们一起见证您的进步~~
if else多就多呗,只要可读性强,维护起来方便。jQuery.fn.init里就是一堆if else判断,难道要质疑jQuery作者的水平了?并不是说if else多就不好,关键是看用的地方,jQuery.fn.init里除了if else判断简洁点,难道要改成switch?就算用工厂模式,还不是得做大量的if判断。
举个简单的例子,后端返回数据,前端根据状态进行不同操作
$.ajax().done(function (res) { if (res.state === 'SUCCESS') { //TODO } else if (res.state === 'FAIL') { //TODO } else { //TODO } });
这里用if else不挺好的么,有啥问题么?不过我个人倾向于switch
$.ajax().done(function (res) { switch (res.state) { case 'SUCCESS': //TODO break; case 'FAIL': //TODO break; default : //TODO } });
在比如我有一个方法根据类型获取名称,用if else会这样
function getName(type) { if (type === 'monkey') { return 'monkey name'; } else if (type === 'cat') { return 'cat name'; } else { return 'dog name'; } }
要我的话就不会这样写,改成下面的会更好
function getName(type) { var data = { monkey: 'monkey name', cat: 'cat name', dog: 'dog name' } return data[type] ? data[type] : data['dog']; }
硬要把设计模式添加到JS里不是不可以,但是要看情况。生搬硬套过来的东西然并卵啊。写代码记住三个字即可,短简易。代码短,读起来简单,维护容易,如果在性能和代码长度上二选一,我肯定选代码短,性能不行,加台服务器就是了。而冗长的代码并不是加个程序员就能搞定的。保持着这个心态写代码,写出的东西离设计模式也不会差太多了。多说一句:存在必有其价值,不能说if else多了就不好,凡事无绝对,适合A的未必就适合B,每个东西都有其实现的场景。同理改写设计模式未必就是最棒的,听起来高大上点而已。
代码整洁强迫症患者必须要来个抛砖引玉:1.
if(a为真){ a=a }else{ a=b }
可写成:a = a || b
2.
if(a==b){ a=c }else{ a=d }
可写成:a = (a==b) ? c : d
3.后台接口通常会返回这种数据:fruit: 0 //0=苹果,1=梨子,2=桔子,3=柠檬,4=芒果...这时写if...else是最痛苦的。我从同事那偷来个方法:
var _f = ['苹果','梨子','桔子','柠檬','芒果']; shuiguo = _f[fruit];
我决定先扔一篇王yin的好文:《编程的智慧》
------ 看文上面的文章,下面的回答就不重要了 ------
设计模式跟语言没有多大关系,javascript也可以引入设计模式来解决if else逻辑,举一个例子:
假设现在要做一个登录跳转的逻辑,验证过程是这样三个步骤:(只是假设场景,可能不真实,但是能描述问题)
验证localStorage
验证Cookie
验证Url
场景a:先验证localStorage里有有无authed字段,假如有的话再验证cookie里有无userid字段,如果有,则验证通过。
场景b:先验证localStorage里有有无authed字段,假如有的话再验证cookie里有无userid字段,如果无,则验证Url中有无参数token,如果有token则验证通过,如果没有则不通过
so,我们引入职责链模式:
if(getLocalStorage.after(getCookie).after(getUrl)) { // auth success callback } else { // auth fail callback }
请题主尝试自行实现:
Function.prototype.after = function(fn) { // do something }
if else多就多呗,只要可读性强,维护起来方便。jQuery.fn.init里就是一堆if else判断,难道要质疑jQuery作者的水平了?
并不是说if else多就不好,关键是看用的地方,jQuery.fn.init里除了if else判断简洁点,难道要改成switch?就算用工厂模式,还不是得做大量的if判断。
举个简单的例子,后端返回数据,前端根据状态进行不同操作
这里用if else不挺好的么,有啥问题么?不过我个人倾向于switch
在比如我有一个方法根据类型获取名称,用if else会这样
要我的话就不会这样写,改成下面的会更好
硬要把设计模式添加到JS里不是不可以,但是要看情况。生搬硬套过来的东西然并卵啊。
写代码记住三个字即可,短简易。代码短,读起来简单,维护容易,如果在性能和代码长度上二选一,我肯定选代码短,性能不行,加台服务器就是了。而冗长的代码并不是加个程序员就能搞定的。
保持着这个心态写代码,写出的东西离设计模式也不会差太多了。
多说一句:存在必有其价值,不能说if else多了就不好,凡事无绝对,适合A的未必就适合B,每个东西都有其实现的场景。同理改写设计模式未必就是最棒的,听起来高大上点而已。
代码整洁强迫症患者必须要来个抛砖引玉:
1.
可写成:a = a || b
2.
可写成:a = (a==b) ? c : d
3.
后台接口通常会返回这种数据:
fruit: 0 //0=苹果,1=梨子,2=桔子,3=柠檬,4=芒果...
这时写if...else是最痛苦的。我从同事那偷来个方法:
我决定先扔一篇王yin的好文:《编程的智慧》
------ 看文上面的文章,下面的回答就不重要了 ------
设计模式跟语言没有多大关系,javascript也可以引入设计模式来解决if else逻辑,举一个例子:
假设现在要做一个登录跳转的逻辑,验证过程是这样三个步骤:(只是假设场景,可能不真实,但是能描述问题)
验证localStorage
验证Cookie
验证Url
场景a:先验证localStorage里有有无authed字段,假如有的话再验证cookie里有无userid字段,如果有,则验证通过。
场景b:先验证localStorage里有有无authed字段,假如有的话再验证cookie里有无userid字段,如果无,则验证Url中有无参数token,如果有token则验证通过,如果没有则不通过
so,我们引入职责链模式:
请题主尝试自行实现: