java与ruby的直观比较
以前花过一段时间学习ruby,还顺便写了个股票爬虫,搭了数据展示网站,这次回顾一下以前的知识点,将ruby与java作个简单而直观的比较,这样有助于更深入地理解java。
一、ruby特性概览
1、动态强类型
n=1
n= “hello world”//n类型可变
n+4 //运行时报Type Error
相对于ruby,java则是静态强类型
int n = 1 //此处要指定类型
n = “hello world”// 编译时报错
静态类型与动态类型的选择,实际是可靠性与灵活性的选择,静态类型在编译时确保了类型安全,增强了软件的可靠性,但同时失去了灵活性,一个变量只能赋值某种类型,不便于扩展,相反动态类型则使程序更加地灵活和简洁,但在类型安全保障方面却不及前者有力。
2、完全面向对象
4.4765.round =>4
nil.to_i =>0
ruby是完全面向对象的,就算是数字,nil(类似java中null)也可以当作对象处理,执行相应方法
3、脚本语言
4、在命令行输入irb即可获得一个简易的交互界面
irb(main):001:0>
二、ruby vs Java
1、简洁性
代码行数很重要!
实现同样一个输出功能,ruby的代码行数小于java,也许,正是出于简洁性的考虑,java8出了lambda表达式。
java:
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
List al = new ArrayList();
String line = null;
while (null != (line = br.readLine())) {
al.add(line);
}
Collections.sort(al);
System.out.println("sorted:" );
for (Iterator it = al.iterator(); it.hasNext();) {
System.out.println(it.next());
}
}
共14行
ruby:
puts readlines.sort.unshift("sorted:\n" ).join
共1行
2、ruby的代码块
本质:高阶函数的一种特殊形式,类似于java的匿名内部类
特点:1、使用时定义
2、可引用外部局部变量(闭包)
java:使用偏重的匿名内部类,不通用
Execute( Callback callback){
p = ..
...
callback.do(p);
…
}
new Callback(Param p){
do(){
}
}
ruby:
def execute
…
yield
…
end
execute{|p|
do anything….
}
3、开放类(Open class)
动态改变已存在类的类定义
4、动态类型
Java:
public void repair(Car car){
}
Ruby:
def repair(c)
end
5、ruby中的Aop与Ioc
AOP和依赖注入在ruby中是小菜一碟,但在java程序员而言,却要学习新的编程模型,处理XML,引进复杂的语法。
拦截器
目的:不修改代码,动态改变已定义类的行为,它支持AOP所需的大多数功能。
(Ruby 2.0)能够在之前、之后和包装与Ruby方法钩连。
class Class
alias_method :original_new, :new
def new(*args)
result = original_new(*args)
print “object creadted "
return result
end
end
Ioc:
IoC是一种可以帮助我们解耦各业务对象间依赖关系的对象绑定方式,主要是依赖注入,java需要 Ioc service Provider专门管理,方便自动化测试
在ruby中,依赖注入是不必要的,它很容易修改运行中类的定义,你不需要在应用中添加新一层的复杂性,就可以注入新的行为
class Payment < ActiveRecord::Base
belongs_to :credit_card
def capture
PaymentGateway.capture(amount, credit_card)
end
end
class PaymentGateway
attr_accessor :desired_result
def self.capture(amount, credit_card)
Response.new(desired_result)
end
end
三、Rails
rails project
目录包含app 、config、script等
常用包:
Active Record:处理关系数据库访问
Active Pack: 处理请求,管理model/view/controller
它使用宏来帮助您快速生成基于数据库结构的代码和一些合理放置的宏
(1) create table
(2) ruby script/generate controller trails
ruby script/generate model trails
感谢大家阅读由java培训机构分享的“Java与Ruby的直观比较”希望对大家有所帮助,更多精彩内容请关注Java培训官网
免责声明:本文由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!
Java开发高端课程免费试学
大咖讲师+项目实战全面提升你的职场竞争力
- 海量实战教程
- 1V1答疑解惑
- 行业动态分析
- 大神学习路径图
相关推荐
更多2015-10-15
2015-10-15
达内就业喜报
更多>Java开班时间
-
北京 丨 11月27日
火速抢座 -
上海 丨 11月27日
火速抢座 -
广州 丨 11月27日
火速抢座 -
兰州 丨 11月27日
火速抢座 -
杭州 丨 11月27日
火速抢座 -
南京 丨 11月27日
火速抢座 -
沈阳 丨 11月27日
火速抢座 -
大连 丨 11月27日
火速抢座 -
长春 丨 11月27日
火速抢座 -
哈尔滨 丨 11月27日
火速抢座 -
济南 丨 11月27日
火速抢座 -
青岛 丨 11月27日
火速抢座 -
烟台 丨 11月27日
火速抢座 -
西安 丨 11月27日
火速抢座 -
天津 丨 11月27日
火速抢座 -
石家庄 丨 11月27日
火速抢座 -
保定 丨 11月27日
火速抢座 -
郑州 丨 11月27日
火速抢座 -
合肥 丨 11月27日
火速抢座 -
太原 丨 11月27日
火速抢座 -
苏州 丨 11月27日
火速抢座 -
武汉 丨 11月27日
火速抢座 -
成都 丨 11月27日
火速抢座 -
重庆 丨 11月27日
火速抢座 -
厦门 丨 11月27日
火速抢座 -
福州 丨 11月27日
火速抢座 -
珠海 丨 11月27日
火速抢座 -
南宁 丨 11月27日
火速抢座 -
东莞 丨 11月27日
火速抢座 -
贵阳 丨 11月27日
火速抢座 -
昆明 丨 11月27日
火速抢座 -
洛阳 丨 11月27日
火速抢座 -
临沂 丨 11月27日
火速抢座 -
潍坊 丨 11月27日
火速抢座 -
运城 丨 11月27日
火速抢座 -
呼和浩特丨11月27日
火速抢座 -
长沙 丨 11月27日
火速抢座 -
南昌 丨 11月27日
火速抢座 -
宁波 丨 11月27日
火速抢座 -
深圳 丨 11月27日
火速抢座 -
大庆 丨 11月27日
火速抢座