「clojure与java」clojure ring
今天给各位分享clojure与java的知识,其中也会对clojure ring进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、如何直接运行 Clojure 脚本文件
- 2、Scala,Groovy,Clojure Kotlin 分别解决了Java 的什么痛点
- 3、为什么要选择Clojure
- 4、Java函数式编程语言是什么?
- 5、北大青鸟设计培训:如何突破java编程的局限性?
- 6、为何Java程序员学习Clojure有优势?
如何直接运行 Clojure 脚本文件
对于大多数的脚本编程语言来说, 提供有现成的分别进入控制台与执行脚本文件的命令. 例如 Scala, Python 默认进入控制台(REPL), 接文件路径为参数则执行脚本文件. 还有分别进入控制台和执行脚本的命令是: irb 与 ruby, groovsh 与 groovy, php -a 与 php, perl -de1 和 perl. 可以 Clojure 本身就没有 clojure 这样的命令. 当我们试图在 Mac 下用 brew install clojure 安装时, 得到的提示是没有 clojure, 应该用 brew install leiningen 去安装 leiningen, 它是一个类似于 Scala sbt 的工具.
所以启动 Clojure REPL 的命令就是 lein repl , 其实还有一个办法来启动 Clojure 的控制台, 因为 Clojure 也是构筑于 JVM 之上的, 所以也能像启 Groovy/Scala 一样通过 java 指令加载 jar 文件来启动. 去官网 下载 Clojure 安装包(例如: ), 解压, 假定它的 jar 文件是 ~/Developers/clojure-1.8.0/clojure-1.8.0.jar , 那么也可以用命令 java -jar ~/Developers/clojure-1.8.0/clojure-1.8.0.jar 进到 Clojure 控制台.
进到 Clojure 的提示符 user= 下就可以测试 Clojure 代码了, 那么如何加载一个写在 clj 文件里的代码呢? 我们可以在 Clojure 控制台下用方法 load-file . 假定 ~/hello.clj 文件的内容是
(+ 1 2)
在 Clojure 控制台下
user= (load-file "~/hello.clj")3
这只是相当于我们在控制台输入 (+ 1 2) , 也看到了 3, 其实我们在 ~/hello.clj 中并没有打印输出结果. 所以如果真正是执行 ~/hello.clj 应该是什么也看不到了, 我们需要准确的执行 clojure 脚本文件的方法.
在此我们也顺道温习一下 Clojure 与 Java 的简单互操作, 创建了文件 ~/interop.clj , 内容如下:
(+ 1 2 3)
(println (. Math PI))
(println (. Math abs -3))
(println (. "foo" toUpperCase))
(println Math/PI)
(println (Math/abs -5))
(println (.toUpperCase "bar"))
(def n1 (new Integer "42"))
(println n1)
(let [n2 (Integer. "53")]
(println n2))
针对启动 Clojure 控制台的不同我们同样有两种方式执行 Clojure 脚本文件
一: 通过 clojure-x.x.x.jar 来执行 Clojure 脚本
➜ ~ java -jar ~/Developers/clojure-1.8.0/clojure-1.8.0.jar ~/interop.clj
3.141592653589793
3
FOO
3.141592653589793
5
BAR
42
53
上面的执行效果才是正确的, 其中 (+ 1 2 3) 没有 print 是不会有输出的.
把它编制成一个 bash 脚本 clojure 就是
#!/bin/bash
java -jar ~/Developers/clojure-1.8.0/clojure-1.8.0.jar $@
$@ 的意思是传什么给这个 clojure 脚本, 它就原原本本的送到 clojure-1.8.0.jar 的主程序. 然后把 clojure 用 chmod +x clojure 改成可执行. 再来看下
➜ ~ vi clojure
➜ ~ ./clojure
Clojure 1.8.0
user= ^D
➜ ~ ./clojure ~/interop.clj
3.141592653589793
3
FOO
3.141592653589793
5
BAR
42
53
没参数时进入控制台, 有参数时当成文件加载执行
二: lein 通过 exec 插件执行 clojure 脚本
lein 的插件安装可以参考 lein-exec . 全局安装的话只要在 ~/.lein/profiles.clj 中添加一行
{:user {:plugins [[lein-exec "0.3.6"]]}}
再次启动 lein 就会自动下载相应的插件依赖, 并加入了 exec 任务, 用 lein help exec 查看这个插件的具体命令使用方法. 简单的用来加载外部 clj 文件的指令是
➜ ~ lein exec ~/interop.clj
3.141592653589793
3
FOO
3.141592653589793
5
BAR
42
53
执行结果是一致的.
不仅如此, Clojure 也能用作系统脚本语言, 像其他脚本语言一样. 下载 放在 PATH 下, 并改成可执行.
之后只要在 clj 脚本第一行写上
#!/usr/bin/env lein-exec
或
#!/bin/bash lein-exec
就可以用 Clojure 快乐的写系统脚本了.
另外, 如果 clj 文件是放在一个 lein 项目中, 应该是可以通过 lein 任务来执行主函数中的代码的.
附: 在我目前的 ~/.lein/profiles.clj 文件中已用到了三个插件
{:user {:plugins [[venantius/ultra "0.4.1"]
[lein-iclojure "1.2"]
[lein-exec "0.3.6"] ]}}
分别是 控制台着色, 代码提示, 和执行插件.
Scala,Groovy,Clojure Kotlin 分别解决了Java 的什么痛点
这三个,都和Java无关,只是碰巧都运行在JVM之上而已。他们都没有想过要取代Java,都是独立的语言,差异极大。
groovy是一门脚本语言,个人觉得没啥用处。
Scala是怪兽,人类历史上最有野心的编程语言。
clojure,是JVM上的lisp,并发支持的很好。是这个世界上你需要学习的最后一门语言。
同时,他们都不能替代Python或者Ruby或者PHP。
他们都不是来填坑的,都是来挖坑的。
为什么要选择Clojure
joy of clojure, / clojure programming 这些书可以告诉你一堆理由。以下是我从JAVA转向Clojure的原因:
无障碍调用现有的java包
数据结构简单明了(map/list/vector)
function作为一等公民,可以做很多java中不好做或做不到的事情
第三方包通常都很小,而且包中的clj是以源码形式存在,在emacs/idea中查看引用包的源码十分方便
做WEB项目有ring规范,request/response都以map形式呈现,比J2EE那servlet/resquest/response啥的不知简明多少倍
JAVA中听来、讲来都拗口的设计模式几乎都溶于Clojure自身语言的特性中
具个类似于JAVA中AOP的例子,够简单吧
(defn wrap-exception
[func [call-back]]
(fn [ args]
(try
(apply func args)
(catch Exception e
(warn e (.getMessage e))
(if call-back
(apply call-back e args))))))
Java函数式编程语言是什么?
函数式编程语言的核心是它以处理数据的方式处理代码。这意味着函数应该是第一等级(First-class)的值,并且能够被赋值给变量,传递给函数等等。
事实上,很多函数式语言比这走得更远,将计算和算法看得比它们操作的数据更重要。其中有些语言想分离程序状态和函数(以一种看起来有点对立的方式,使用面向对象的语言,这通常会将它们联系得更紧密)。
Clojure编程语言就是一个这样的例子,尽管它运行于基于类的Java虚拟机,Clojure的本质是函数式语言,并且在高级语言源程序中不直接公布类和对象(尽管提供了与Java良好的互操作性)。
北大青鸟设计培训:如何突破java编程的局限性?
虽然说java编程开发语言是目前大多数程序员学习的主流编程语言,但是java编程语言依然存在一些无法实现的内容,下面运城java课程就一起来了解一下,程序员是如何突破java编程的局限性的。
Java功能强大、生态丰富,已无需多言。
但类型、语法与编程范式方面,存在一些局限性,也长期为人所诟病。
所以,有不少开发人员试图去寻求其他语言,既可以突破Java的这些局限,又可以与Java和谐共处。
Java的祖师爷们也是非常明智,一开始就将编程语言Java与运行时环境JVM分离。
JVM负责与操作系统的交互,屏蔽了具体操作系统的细节,制订了一整套生成字节码的规范,使得前面这一构想得以顺利实施。
如今有众多语言运行在JVM上,Groovy、Scala、Kotlin、Clojure可能算得上是其中的佼佼者。
GroovyGroovy是类似Ruby的动态语言,适合编写脚本、插件、测试例,DSL(领域特定语言)等。
知名的自动化建构工具Gradle主要就基于Groovy。
ScalaScala的设计初衷,就是在JVM上整合面向对象与函数式编程的各种特性。
大名鼎鼎的大数据处理框架Spark、消息中间件Kafka、用于构建可容错,可扩展、高并发应用的Akka,都是基于Scala语言编写。
Kotlin前几日刚升级为Android官方开发语言的Kotlin,近期是一个热门。
从前面讲到的Github上的star指数也可窥见一斑。
基于Kotlin的库和框架、官方工具的支持、教学视频、文档等,也肯定会层出不穷。
ClojureClojure被认为是基于JVM的Lisp方言,是函数式编程的铁杆。
知名的大数据处理框架Storm主要就是由Clojure语言编写而成。
CeylonCeylon是面向企业级应用设计开发的强静态类型编程语言,支持Java和JavaScript虚拟机。
Java自身在性能、语法、编程范式等方面,也是在不断地提高改进。
譬如Java8引入了Lambda表达式、Optional、Streams、Date/TimeAPI等,Java9带来了Jigsaw(模块化)等。
为何Java程序员学习Clojure有优势?
当谈及编程语言时,很多程序员会产生浓厚的兴趣。还记得我们曾发过一篇《编程语言叛逃路线》吗?结果最流行的叛逃路线有:从Perl到Python,从Cobol到Java,从Java到C#或Ruby、C++。本文我们不是讨论哪门语言会高于另一门语言,我想说的是,人应该活到老,学到老。一个Java背景的爱好者,学习Clojure语言具备得天独厚的优势。其原因在于:了解Java ——受益颇多:class-paths(类路径),class loaders(类加载器),constructors(构造函数),methods(方法),static methods(静态方法),standard libraries(标准库),ar files(jar 文件)等等。了解JVM——heap(堆),garbage collection(垃圾回收),perm-gen space,debugging(调试),profiling(分析),performance tuning(性能优化)等等。Java生态库——采用什么样的日志框架?哪种类型的Web服务器?数据库驱动?等等。Maven situation——有时你必须知道在lein情况下会发生什么状况?了解如何构建大型代码基地——Clojure代码库在不断壮大。面向对象分析与设计——这个与弄清函数的位置设置相似。我相信还有许多许多优势,不妨把你知道的与我们分享下。Clojure是一门现代化的LISP完整的宏系统,一门函数式编程语言,它还具有并发语义,基于JVM访问这些库等等。Clojure是JVM上的一门新的语言,类似Groovy,Jyphon和JRuby,它能动态的、简洁的、无缝的与Java进行交互操作。因此,Java开发团队,既然学习Clojure有这么多的优势,那么你心动了吗?
clojure与java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于clojure ring、clojure与java的信息别忘了在本站进行查找喔。