Programming Clojure学习笔记——与Java一起工作

3.2  性能优化
使用原始类型
示例:
第一种计算方法:
user=> (defn sum-to [n]
   (loop [i 1 sum 0]
     (if (<= i n)
       (recur (inc i) (+ i sum))
       sum)))
#'user/sum-to
user=> (dotimes [_ 5] (time (sum-to 10000)))
"Elapsed time: 9.112735 msecs"
"Elapsed time: 5.394529 msecs"
"Elapsed time: 2.786857 msecs"
"Elapsed time: 2.731407 msecs"
"Elapsed time: 2.598431 msecs"

第二种计算方法:
user=> (defn integer-sum-to [n]
(let [n (int n)]
  (loop [i (int 1) sum (int 0)]
    (if (<= i n)
      (recur (inc i) (+ i sum))
      sum))))
#'user/integer-sum-to
user=> (dotimes [_ 5] (time (integer-sum-to 10000)))
"Elapsed time: 2.126595 msecs"
"Elapsed time: 1.82419 msecs"
"Elapsed time: 0.105251 msecs"
"Elapsed time: 0.055963 msecs"
"Elapsed time: 0.086769 msecs"
说明:
1. 第二种计算方法将n, i, sum当作int类型处理
2. dotimes是一个计时函数
(dotimes bindings & body)
; bindings => name n
重复执行body代码,循环将name绑定到0到n-1,n即为重复次数

添加类型暗示
Clojure支持给函数参数,let绑定,变量名及表达式添加类型暗示。
类型暗示的作用:
1. 优化关键性能
2. 说明需要的类型
3. 运行时强制转换为需要的类型
示例:
user=> (defn describe-class [#^Class c]
  {:name (.getName c)
    :final (java.lang.reflect.Modifier/isFinal (.getModifiers c))})
user=> (describe-class StringBuffer)
{:name "java.lang.StringBuffer", :final true}
说明:给函数参数c添加类型暗示
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值