当前位置:首页 > 每日看点 > 正文内容

为什么很多程序员不用switch,而是大量的if……elseif?

卡卷网1年前 (2025-01-08)每日看点194

不会吧还有人用ifelse和switchcase?三目运算符?

不会吧?不会吧?大佬都是全都不用的!以JA为例

条件判断语句的四种写法,茴字的四种写法大家不会不知道吧

<>1.正常人写法:

privatestaticStringMAN="man"; privatestaticStringWOMAN="woman"; @Data staticclassPerson{ privateStringgender; privateStringname; } pulicstaticvoidmain(String[]args){ Personp=newPerson(); p.setGender(MAN); p.setName("张三"); if(Ojects.equals(p.getGender(),MAN)){ System.out.println(p.getName()+"应该去男厕所"); } if(Ojects.equals(p.getGender(),WOMAN)){ System.out.println(p.getName()+"应该去女厕所"); } } //输出:张三应该去男厕所

<>2.Lamda策略模式写法:

某些大公司P6级别以上(年薪30w-50w)标准写法,写ifelse是要被骂的

privatestaticMap<String,Consumer<String>>FUNC_MAP=newConcrentHashMap<>(); privatestaticStringMAN="man"; privatestaticStringWOMAN="woman"; static{ FUNC_MAP.put(MAN,person->{System.out.println(person+"应该去男厕所");}); FUNC_MAP.put(WOMAN,person->{System.out.println(person+"应该去女厕所");}); } @Data staticclassPerson{ privateStringgender; privateStringname; } pulicstaticvoidmain(String[]args){ Personp=newPerson(); p.setGender(MAN); p.setName("张三"); Personp2=newPerson(); p2.setGender(WOMAN); p2.setName("张三他老婆"); FUNC_MAP.get(p.getGender()).accept(p.name); FUNC_MAP.get(p2.getGender()).accept(p2.name); } //输出: //张三应该去男厕所 //张三他老婆应该去女厕所

<>3.DDD领域驱动设计思想+策略模式写法:

某些大公司P7级别以上(年薪40w-70w)标准写法(笑)

privatestaticStringMAN="man"; privatestaticStringWOMAN="woman"; @Data staticclassPerson{ privateStringgender; privateStringname; privatestaticMap<String,Consumer<String>>FUNC_MAP=newConcrentHashMap<>(); static{ FUNC_MAP.put(MAN,person->{System.out.println(person+"应该去男厕所");}); FUNC_MAP.put(WOMAN,person->{System.out.println(person+"应该去女厕所");}); } pulicvoidgoToWC(){ FUNC_MAP.get(gender).accept(name); } } staticclassPersonFactory{ pulicstaticPersoninitPerson(Stringname,Stringgender){ Personp=newPerson(); p.setName(name); p.setGender(gender); retnp; } } pulicstaticvoidmain(String[]args){ Personp=PersonFactory.initPerson("张三",MAN); Personp2=PersonFactory.initPerson("张三他老婆",WOMAN); p.goToWC(); p2.goToWC(); } //输出: //张三应该去男厕所 //张三他老婆应该去女厕所

某些奇葩公司就是喜欢这种语法,看起来够,实际上效率并没有高多少,可读性差了很多,而且Deug较麻烦

<>4.Actor模型+领域驱动设计+策略模式+事件响应式架构

正的P8年薪百万架构师级写法,逼王才这么写代码,的极限,内卷的奥义

Men依赖:

依赖Akka框架Actor模型,懂得都懂,大数据分布式计算Spark框架RDD依赖的框架,很复杂,源码是Scala语言,逼王必学。也可以Scala做架构,Ja做上层,有兴趣可以了解一下,反正管他是什么,够就完了。哎,就是得有牌面。ifelse什么的太low,应届毕业生水平才写ifelse(魔怔领导原话)。

<dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-actor_2.12</artifactId> <version>2.5.2</version> </dependency>

代码

privatestaticStringMAN="man"; privatestaticStringWOMAN="woman"; privatestaticStringWC_="想上厕所"; @Data staticclassPersonextendsUntypedActor{ privateStringgender; privateStringname; pulicstaticPropsprops(finalStringname,finalStringgender){ retnProps.create(newCreator<Person>(){ privatestaticfinallongserialVersionUID=1L; @Override pulicPersoncreate()throwsException{ Personp=newPerson(); p.setGender(gender); p.setName(name); retnp; } }); } @Override pulicvoidonReceive(Ojectmessage)throwsThrowale{ Pair<String,ActorRef>m=(Pair<String,ActorRef>)message; System.out.println(name+m.getLeft()); m.getRight().l(this,ActorRef.noSender()); } } @Data staticclassToiletextendsUntypedActor{ privatestaticMap<String,Consumer<String>>FUNC_MAP=newConcrentHashMap<>(); static{ FUNC_MAP.put(MAN,person->{System.out.println(person+"应该去男厕所");}); FUNC_MAP.put(WOMAN,person->{System.out.println(person+"应该去女厕所");}); } pulicvoidwc(Personp){ FUNC_MAP.get(p.getGender()).accept(p.getName()); } pulicstaticPropsprops(){ retnProps.create(Toilet.class); } @Override pulicvoidonReceive(Ojectmessage)throwsThrowale{ Personp=(Person)message; wc(p); } } pulicstaticvoidmain(String[]args){ ActorSystemactorSystem=ActorSystem.create(); ActorRefperson=actorSystem.actorOf(Person.props("张三",MAN),"ZhangSan"); ActorReftoilet=actorSystem.actorOf(Toilet.props(),"Toilet"); Pair<String,ActorRef>message=Pair.of(WC_,toilet); person.l(message,ActorRef.noSender()); } //输出 //张三想上厕所 //张三应该去男厕所

<>5.Actor模型+领域驱动设计+策略模式+事件响应式架构+动态类模板构建+运行时编译

为什么要写ifelse?为什么要创建类?为什么要写方法?正的大佬()根本不需要写ifelse,也不需要创建class,甚至不需要命名方法。我上厕所就要写Toilet类,开车就要写Car类,还得继承Actor的抽象类,太low,正的Ja不需要类型,不需要类,不需要ifelse,不需要命名方法,什么都不需要,便是Ja的极致。我悟了。

Men依赖:

咱还得整新活,jassist动态类加载,框架级代码才会用,运行时调编译器搞起,类型什么的根本不需要,咱就是要颠覆Ja的根基,什么class,小孩才写class,大人都是玩编译器。

<dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-actor_2.12</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>org.jassist</groupId> <artifactId>jassist</artifactId> <version>3.25.0-GA</version> </dependency>

代码:

importakka.actor.ActorRef; importakka.actor.ActorSystem; importakka.actor.Props; importakka.actor.UntypedActor; importakka.japi.Creator; importjassist.*; importorg.apachemons.lang3.tuple.Pair; importja.util.HashMap; importja.util.Map; importja.util.function.iConsumer; importja.util.function.Consumer; pulicclassDynamicActor{ privatestaticStringMAN="man"; privatestaticStringWOMAN="woman"; privatestaticStringWC_="想上厕所"; privatestaticStringWC_OVER_="上完厕所了"; privatestaticActorSystemactorSystem=ActorSystem.create(); /** *创建一个动态类,并实例化为对象,该方根据参数动态构建Class *@paramname动态类名 *@paramfunctionactor模型消息处理方法两个参数一个是自身,一个是消息 *@paramattrAndValues动态类的属性和属性值 *@retnactor引用 *@throwsException */ pulicstaticActorRefcreateDynamicClassImpl(Stringname,iConsumerfunction,Pair<String,String>...attrAndValues)throwsException{ ClassPoolpool=ClassPool.getDefault(); //动态定义包名瞎几把写就行 StringclassName="com.xxx.xxx.xxx."+name; //创建一个空类 CtClasscc=pool.makeClass(className); //动态继承抽象类UntypedActor cc.setSuperclass(pool.get(UntypedActor.class.getName())); //动态根据参数创建类的属性 for(Pair<String,String>attrValue:attrAndValues){ CtFieldparam=newCtField(pool.get(String.class.getName()),attrValue.getLeft(),cc); //访问级别是PULIC param.setModifiers(Modifier.PULIC); cc.addField(param,CtField.Initializer.constant(attrValue.getRight())); } //创建类一个属性叫function类型是iConsumer CtFieldparam=newCtField(pool.get(iConsumer.class.getName()),"function",cc); //访问级别是PRIVATE param.setModifiers(Modifier.PRIVATE); cc.addField(param); //创建模板方法方法是执行iConsumer对应的lamda表达式 CtMethodm=CtNewMethod.make( "pulicvoidonReceive(Ojectmessage){function.accept($0,message);}", cc); cc.addMethod(m); //动态添加构造函数 CtConstructorcons=newCtConstructor(newCtClass[]{pool.get(iConsumer.class.getName())},cc); //构造函数内容就是给function参数赋值 cons.setody("{$0.function=$1;}"); cc.addConstructor(cons); //-----------动态Actor类构建完毕------------ //实例化Actor Propsp=Props.create(newCreator<UntypedActor>(){ @Override pulicUntypedActorcreate()throwsException{ //反射创建对象 retn(UntypedActor)cc.toClass().getConstructor(iConsumer.class).newInstance(function); } }); retnactorSystem.actorOf(p); } pulicstaticvoidmain(String[]args)throwsException{ //class什么的根本不需要,直接动态创建类,对于复杂场景可以搞分布式remoteActor //创建一个Car类(领域对象),并实例化,定义他的消息处理方法(或者你乐意叫领域驱动事件也可以) ActorRefcar=createDynamicClassImpl("Car",(self,message)->{ System.out.println(message); System.out.println("开车走咯~"); }); //创建一个Toilet类,并实例化,定义他的消息处理方法(或者你乐意叫领域驱动事件也可以) ActorReftoilet=createDynamicClassImpl("Toilet",(self,message)->{ try{ Map<String,Consumer<String>>FUNC_MAP=newHashMap<>(); FUNC_MAP.put(MAN,person->{System.out.println(person+"应该去男厕所");}); FUNC_MAP.put(WOMAN,person->{System.out.println(person+"应该去女厕所");}); //因为是无类型取值使用反射 Stringgender=message.getClass().getField("gender").get(message).toString(); Stringname=message.getClass().getField("name").get(message).toString(); FUNC_MAP.get(gender).accept(name); car.l(name+WC_OVER_,ActorRef.noSender()); }catch(Exceptione){ System.out.println("厕所不太欢迎这位"); } }); //创建一个Person类,具有两个属性name和gender,并实例化,定义他的消息处理方法(或者你乐意叫领域驱动事件也可以) ActorRefperson=createDynamicClassImpl("Person",(self,message)->{ Pair<String,ActorRef>pair=(Pair<String,ActorRef>)message; System.out.println(pair.getLeft()); pair.getRight().l(self,ActorRef.noSender()); },Pair.of("name","张三"),Pair.of("gender",MAN)); //告诉张三想上厕所了让他找厕所去 person.l(Pair.of(WC_,toilet),ActorRef.noSender()); } } //输出: //想上厕所 //张三应该去男厕所 //张三上完厕所了 //开车走咯~

这样写代码,基本会被开除,你已经无敌了公司已经容不下你了。

总结,代码还是正常写就得了,能实现业务不出ug好的就是好代码,切勿为了使用各种奇技巧,ifelse没啥不好的。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/7300.html

分享给朋友:
返回列表

上一篇:现在开发一个小型物联网平台大概需要投入多少资金?

下一篇:思源和Osidian哪个更适合做笔记?

相关文章

每天5点就下班了,闲着也是闲着,有哪些副业可以推荐?

每天5点就下班了,闲着也是闲着,有哪些副业可以推荐?

今天整理了36个搞钱APP可以先接触学习看看,然后选定一个感兴趣的方向去精进要知道机会不是一下子来临的,而一定是你前期做了很多准备每天进步一点点,就像滚雪球一样希望所以女生,能够在2024年提升自己,立下一个新的搞钱Flag吧实用APP安利...

有了Istio,开发还需要微服务架构吗?

有了Istio,开发还需要微服务架构吗?

Istio 是一个开源的服务网格(Service Mesh),通过它可以实现对服务间通信的管理和监控。对于那些本身没有设计为具备安全功能的传统应用程序,Istio 可以提供一个“透明”的安全保护层,而不需要对应用本身进行任何代码修改。 I...

网易云音乐上看到过最触动的热评是什么?

网易云音乐上看到过最触动的热评是什么?

1.“昨天晚上洗澡的时候,我忘记拿毛巾了,喊了声妈妈帮我拿下毛巾,正当我伸出左手准备接毛巾的时候,我愣了一下,又换了右手。”希望你永远不会听懂这句话,永远都不要懂。——网易云热评《关键词》2.小时候跟着父亲去城里卖西瓜,害怕同学会看到我,就...

为什么神经网络可以解偏微分方程,是什么原理?

为什么神经网络可以解偏微分方程,是什么原理?

题主一直比较关心神经网络在其他科学领域的应用,比如数学、物理学还有生物学,比如AlphaFold。本次带来的这篇文章傅里叶神经网络算子解偏微分方程就是一个很有意思的方向,其实我自己去年在给美国一个客户做兼职预测数字货币期权价格的时候就用到过...

程序员都有自己的服务器吗?

程序员都有自己的服务器吗?

2024.9. 24,有朋友咨询功耗,我没有单独给服务器弄智能插座,系统做的 esxi 也看不到,所以只能用其他角度判断供大家参考。我有一个餐边柜改的机柜,里面白裙两盘,黑群晖 4 机械 1 mvme,一个爱快硬路由,一个联通光猫,一个 2...

客观的讲,华为是不是真的遥遥领先?

客观的讲,华为是不是真的遥遥领先?

最近,华为上市了最新款的三折叠屏手机,于是很多大V们把这款手机吹上了天,吹成是技术上遥遥领先于全世界。谁要是敢质疑华而不实,就会被人扣上一顶汉奸卖国贼美狗的帽子。把一个商品捧成了宗教和菩萨,你只能说好,不能说不好。其实这个世界上,只要是人和...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。