在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
以前花过一段时间学习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达人 ID:drjava (扫码或长按识别) |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论