附带说明,本人93年毕业,目前还不顽固。顽固与年龄无关,与学习能力有关。
很多培训班刚毕业的,年纪轻轻,就已经很顽固,顽固到认为程序就是spring全家桶。
所以你这样写提高了生产力,还是提高了程序稳定性,还是提高了程序性能,还是语言本身有重大提升[我想静静]
提升稳定性,不存变量。减少变量错误改变引发问题。
A:先看下spring 框架,然后试着实现一下他的依赖注入。看看你这种写法会不会让你自己崩溃
A:考虑循环依赖。多种注入方式。各种加载方式
A:如果是简单业务,语法多写一两行没啥区别。复杂业务如果没有面向对象的支持,你写不出来。中间会崩。这就是为啥面向对象会被设计出来。为啥现在几个大的前端框架都用ts重构?不就是因为js太灵活了。不如ts吗。
B:1.楼主的写法,和js与ts完全两回事。ts只是给js这种动态类型加上静态类型而已,js支持的编程范式ts都支持。而且ts是结构类型语言(部分场景下也具备名义类型),这样的目的就是面向函数编程,与java那种名义类型语言也有很大区别。js项目改为ts,只是为了让编译器帮人做点事。和那些静态语言分析工具差不多。2. 题主的写法没问题,只要使用得当,能大幅度增加效率,说人家没入门太不应该了。
A:嗯,我没入门之前跟你想法一样。
A:我也没说一回事啊。语法本来就是末流的。编程最简单的就是输入代码。考虑代码是否简洁。就像是画画每天研究画笔是否漂亮,设计大楼每天研究混凝土的包装袋是否干净一样,重点完全搞错了。
A:ts的目的是面向对象编程
C:java也可以通过匿名函数去写这个闭包,只是根节点一定要是类,这是这门语言设计之处定下的哲学,不然用其他语言就好了。另外你这个闭包,要怎么继承?例如makeWoman怎么写?
D:不用继承,用组合。组合代替继承。
C:那大概跟javascript不走prototype的做法一样。只是真正代码写下来,那个关联关系大概不是那么显式。
D:关联关系不影响,继承关系没有了。我也是过了很久才接受了不要继承,用组合的想法。go语言、rust语言都把继承去掉了。业绩很早就有人在强调不要使用继承了,开始我不理解,但我不会抵制,改过来后,发现好多了。
C:组合可以,我意思是这种闭包的方式,没办法显性地标注组合关系。例如go里A组合B,是需要显性引用结构名的。
E:显性标注确实做不到,不过这种做法,本身就是想屏蔽内部结构。其实这个做法,最大问题是有多个造函数时,return的对象部分代码会重复。
闭包函数难道不是对象?
是对象,但是没存变量,可以减少错误。
未见得,这样,反而不容易阅读
只是显式无变量而已。
对,这样可以防止程序员不小心修改变量,或者忘了修改变量。减少变量使用,程序可靠性会提高很多。
闭包而已,无非是提供初始化接口,不提供更新接口
Java语法比较繁琐,虽然近几年在努力改进,但还是不如scala,kotlin这些基于jvm的后起之秀。文中这样写自己玩玩可以,如果是团队开发,这种写法显然不好。真想要追求语法简洁优雅,干脆直接用scala,kotlin好了
这样写不存变量是关键,减少变量引发的问题。
但是带来很多坏处
JavaScript一直都能这么搞,很灵活是吧,但真有你说的那么好,后面微软也不会专门整了个TypeScript来应对大型项目了。动态类型爽是爽了,调用方可不爽,创建方删了个函数,调用方在编辑阶段是无感的,运行时才会报错。静态类型改了成员构造,调用方不用运行(除开用反射)就知道哪里被改了。静态类型的严谨被你说得一文不值。
赞同一部分看法,ts确实是为了弥补js的类型系统,为了更好的静态分析,但是动态能力并没有因此丧失。
是的,毕竟超集。
Java代码量确实大,不过我觉得最要的是,中大型项目中,开发效率能提升多少。练习类的项目十来个类,几千行代码的规模,代码多点少点其实区别不大。
是减少变量,消除bug出现的机会,不在于减少代码量。
在中大型商业项目中,bug的原因通常在于对业务不够理解,分支条件考虑不全,常规的数据检查和校验不全不严谨,不在于多几个变量,除非是纯菜鸟。所以我觉得效率、可维护性更重要。
(以下为一条长评论)
码农呢…最不应该的就是沉浸在语法糖里…犹如小女孩儿过家家… 形式语言,最不缺的就是表示法…
Haskell现在是我大约50%的工作语言…我个人觉得我还是理解fp的…但你要说它优雅…你大约就是拿它写了几个递归算法。你要是拿它干点儿正事儿,你就知道了…json serializing时候 tuple不行,必须是list… 很多类型推断需要对左值的类型进行人工设置,这时候出了错,你完全看不明白报的什么意思。最坑是Haskell怎么debug。每种形式语言,都有强项。但弱项也一定明显。没什么可说的。
至于你鼓吹这个写法…不是kotlin还是scala的写法吗?这么写营养在哪?不保存private变了,内存的cost仍然要给,该不可重入,仍然不可。
说别人顽固,其实只是自己刚学会用锤子,看什么都像钉子罢了。
这是用别的语言的思想写java。下次把代码调试下再发出来,参数没有类型,方法没有返回值,匿名类方法体写括号里。
说过了,简写,代表思想就行。
new 这个关键字麻烦你解释下,IS具体实现是啥麻烦说明下
简写,代表思想而已。
匿名类而已 编译器隐藏掉了 该有的mov指令一个都不会少
兄弟,你要带入历史发展(时间)和管理模式的角度来看这个问题。比如go、rust、js,python都是社区驱动的,会考虑开发人员敲代码的效率,好友性等等。
不同语言可以互相借鉴,好的思想理论用什么语言都能实现。java8向函数式编程学了不少内容。
出了问题你都找不到解决方案,最后全部重构[抠鼻]
这样做,会减少问题,因为没存变量。
那麻烦讲一下,匿名内部类的过程实现
你用它写写大型项目就知道了,需要只是工具,什么合适用什么
搞java的还有不知道这内部类的写法?java现在没落不是做不到的问题是做一件事很繁琐的问题
就是以前的匿名类,现在就是lambda了
你说的对,还有流。流是典型的引入函数式思路。
了解下面向对象处理了什么问题,以及为什么有用,考虑下如果不用,会有什么问题。
自己爽了,别人不知道怎么维护[奸笑]很多优雅的东西确实很优雅,看起来简洁得一匹,可惜出问题你都不知道怎么查[大笑]
一个实体对象几十个属性,那准备咋写?
小打小闹可以,项目大了这种做法就是灾难
生产环境讲的是稳定,谁好用用谁,生态不完善的在复杂系统里能把人搞死
优雅在什么地方?
在不用保存变量。
内存共享怎么办??
尽量不要共享,用不变性。
联系客服