怎么做帖子网站,wordpress更改发布的文章,wordpress书城主题,永久域名怎么注册写在前面的一点小吐槽、一点杂感学 Haskell 学了一段时间之后#xff0c;虽说拿他来写东西还是完全不行#xff0c;但是看别的语言特性时#xff0c;总是会带着一种“诶#xff0c;这玩意在哪哪见过”的蜜汁既视感。且不说几乎成为现代编程语言标配的 Lambda 、闭包#x… 写在前面的一点小吐槽、一点杂感学 Haskell 学了一段时间之后虽说拿他来写东西还是完全不行但是看别的语言特性时总是会带着一种“诶这玩意在哪哪见过”的蜜汁既视感。且不说几乎成为现代编程语言标配的 Lambda 、闭包就是 Monad 都有不少引入了。这段时间出于学校项目需要又在学习 java 。不知为什么感觉看起 java 来真的是格外的蛋疼觉得这玩意语法和某些特性的设计简直是糟糕整洁度和美感还不如复杂和妥协的 C更别说以语法优雅著称的 C#。虽说自己水平渣但是这样一门满是历史局限性与不优雅的语言网上不少 java 程序员倒是对这个饱受诟病的语法、api本身一股迷之优越感完全不知道到底是不知道还是仅仅不想承认 —— java高占有的关键 —— 设计思想符合当时的时代进程、社区化的成功、当下的路径依赖。到了什么程度呢大名鼎鼎的《java core》作者在书中都对其他的语言有一些优势有些甚至 —— 个人认为—— 并非优势只是设计的不同就大加赞扬而对被对比方字里行间饱含嘲讽。而对 java 设计缺陷就不甚明显的提一下。几个例子一次编写到处调试误混乱的标准库设计难用的时间、日期库孱弱的以擦除实现的泛型系统偏执的完全不加入隐式类型声明只能传值、不允许运算符重载这两个见仁见智Linq后文将会讨论不支持拓展方法没有部分类导致的写 GUI 自动代码生成蛋疼至极throwsfinal – sealedfinal – const 说实话你 final 不就是一表层 const 么delegate java core 作者说 java 的 method invoke 比 C#的 delegate 更好完全不能理解没有原生 tuplepair其他语法糖的缺乏如await\asyc当然其它语言也有各自的不足这里只是提这些来印证前文语言明明只是工具是为表述思想服务的。如果说像《java core》作者这样一门语言的布道者尚可说是怀揣着对自己工作的热爱是可以理解的。某些明明是格局有限或者单纯跟风的人只能说是可悲了。就杂感而起的 java8 Streams API 与 C# Linq 简要对比分析起因前段时间给某位老师写一个系统api 路由是 node 实现的一不做二不休干脆全上 node 了。因为要求数据安全不敢用 mongodb遂上 mysql又因为需求不是很复杂没想那么多就直接裸写 sql 了写得简直了既丑又容易给注入…… 写完之后才想起来为啥不用 ORM看了看那几个火的 ORM 库要不太大要不文档太简陋或者相当于设计了一套自己的sql方言。这时候才怀念起c#的linq太好用了。项目暂时告一段落后的现在因为在学习 java 的、听说c#、java的相似性高的缘故想要在java中能找到类似的。就在希望快要转为失望之时看到了这篇文章。LINQ一直是.net程序系统中的一个非常棒的东东. Visual Studio 2008 已经引入了lambda 表达式和monads, 而同一时间Java6版本还在讨论要不要去掉泛型数据类型. 这一成果要归功于荷兰计算机科学家Erik Meijer, 他已经全停止掉别的项目.- Java的现状?即将要发布的Java8和JSR-355,我们还需要LINQ?在过去的十几年中人们一直在尝试用LINQ给Java带来性能的改良。当时,Quaere和Lambdaj似乎在研究一种很有前途的库非语言级别. 事实上,StackOverflow上有很多Java的使用者提出的有没有与LINQ等价的Java做法(到现在依然) :LINQ的Java实现?LINQ的Java工具Java中有跟LINQ类似的东西么?Java等效LINQ和实体框架是什么?有趣的是, LINQ已经发展到EL 3.0版本了!lt;brgt;- 我们真的需要LINQ么?LINQ的高级特性存在重大缺陷, 从我们角度看来, 将会导致 next big impedance mismatch. LINQ来源于SQL,这不是一件完美的事情. LINQ流行的LINQ-to-Objects,在.NET下是一种很好的查询方式.Haskell或Scala的成功已表明,真正的函数式编程可以忽略SELECT,WHERE,GROUP BY, 或者HAVING等来进行集合查询。他们使用fold, map, flatMap, reduce,来获得更高的性能.另一方面LINQ用 skip, take使用混合式GROUP BY(不是OFFSET和FETCH).事实上, 没有一种函数式查询方法可以超越那老旧但好用的SQL外部链接, 分组设置,或 框架窗口功能. 这些结构仅仅是一个SQL开发人员希望看到的结果的声明。他们不是自足的功能这实际上包含在任何给定的情况下被执行的逻辑。此外窗口功能可以只用在SELECT和ORDER BY子句这是一种明显声明方式但是如果你没有SQL上下文这也是非常奇怪的。具体来说SELECT子句中的窗口函数采用正确的数据预取影响整个执行计划和索引的方式。相反函数式编程可以在内存中就做到SQL的这些功能。使用SQLesque API 进行集合查询是用函数式方式狡猾的欺骗 了传统的人。这样的实现方式是不能将集合数据与SQL表查询的数据合并在一起的也不会产生预期的SQL查询结果。- 我该如何做?相当简单你如果使用SQL你就有两个基本选择自上而下,专注你的Java模型. 使用Hibernate / JPA查询并且使用Java8 Streams API 转化Hibernate的查询结果.自下而上,专注你的SQL关系模型. 继续使用JDBC或者jOOQ, 使用Java8 Streams API 转化的查询结果.- 不能回头.拥抱未来!虽然 .NET 领先 Java了一些但这并不是LINQ的问题. 这主要是由于引入了lambda表达式并且支持lambdas的很多APIs. LINQ仅仅只是如何构建这样API的例子.但我更加兴奋的期望Java 8中的 new Streams API, 以及它给Java生态系统带来的函数式编程. 这是一个由Informatech illustrates写的很棒的一篇博文:如何将常见的LINQ表达式转换为Java 8 Streams API表达式.所以不能回头.你可以不用再对.NET开发者眼馋嫉妒. 因为Java 8,我们已经不需要LINQ或者其他API模仿LINQ的unified querying, 有一个更好的称呼像query target impedance mismatch.我们需要真正的SQL关系型数据库查询,我们需要Java 8 Streams API函数式编程查询内存集合数据. 给力 Java 8!上面这篇文章中对 java8 Streams API 的溢美之词刚看到标题仿佛心中顿时像遇到氧气的带火星木条似得——一下子复燃了。然而真的是这样吗或者说真的可以这样简单的等价么正如文中提到是的Linq是起源于对强烈的对改善 sql 在某些方面缺陷的渴望。但是这并不等于说 Linq 是一种简单 ORM 或者说是用 Lambda 来进行sql查询的包装或者说仅仅是语法糖。linq-to-object的实现让我们从相对“表层”的因素因素谈起该文作者在文中谈到了 Linq-to-object 的速度实际上Linq-to-object在内核的层面就是使用btree的方式实现的这就相当程度上决定了其效率从复杂性上说仅就这一项就可以说明绝不仅是某些开源 java linq 查询库那样的简单包装。让我们再谈一谈深层次linq的组成Linq 或者说一个完整的 Linq 是由以下几个部分组成的Lambda 表达式Query 表达式拓展方法表达式树匿名类型我们按条目分析正如文中提到java的新版本也加入了lambda特性。java没有query表达式这意味着不能写成monad形式而monad作为函数式的重中之重。可以说让java引入函数式的举动徒有其表。关于monad请点击该链接阅读前面说到java新版本实现了lambda然而设计者们不知何故的没有支持标准的iterator和iterable而是选择引入了一套streams api试图实现c# 使用拓展方法实现的功能结果是又增加了一套steams模型iostream表示泪流满地。这样一来其效用也仅仅可以用在设计的这些方面难以拓展。没有表达式树限制了无法表达语句结构也限制了动态编译函数。java没有匿名类型限制了它借助临时结构减少计算更使得难以借此增强表达能力。总结streams api 是处于语法落后的 java 在函数式上的一次勇敢尝试和追赶然而从结果上看是比较失败的。或许是某种情结在作怪怕得到“抄袭”的罪名。然而这种结果上的残次 linq 和缺失相当多部分的函数式更会阻止自身进步的步伐不能给使用者带来的便利可以说是一种对尝试初心的背反。