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);

for (Iterator it = al.iterator(); it.hasNext();) {

}

}

共14行

ruby:

共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

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达人媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术记录

JAVA-FTP批量大文件传输

FTP的具体使用      FTP是一种网络协议,用于进行不同服务器主机之间的文件传输,或者简单地说两台不同IP的机器之间的文件传输。在java中我们什么时候需...

5566
来自专栏PHP在线

9个必须掌握的实用PHP函数和功能

即使使用 PHP 多年,也会偶然发现一些未曾了解的函数和功能。其中有些是非常有用的,但没有得到充分利用。并不是所有人都会从头到尾一页一页地阅读手册和函数参考! ...

2808
来自专栏信安之路

ret2resolve学习笔记

一是做个总结,二是做个备份。上篇文章感谢@大米指出的错误,格式化字符串漏洞还未销声匿迹!!!

840
来自专栏程序员互动联盟

【专业技术】C++ RTTI及“反射”技术

RTTI   RTTI(Run-Time Type Information)运行时类型检查的英文缩写,它提供了运行时确定对象类型的方法。面向对象的编程语言,象C...

2995
来自专栏技术博客

Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.h...

993
来自专栏博客园

路由

    路由提供了Route类作为IRouter的标准实现。当调用RouteAsync方法时,Route使用路由模板语法定义匹配URL路径的模式,当调用GetV...

1155
来自专栏微信终端开发团队的专栏

SQLite虚拟机

1 前言 本文主要介绍SQLite虚拟机VDBE,为了更好地了解SQLite虚拟机,文中也加入了一些Lua虚拟机内容来对比学习,更好地了解不同虚拟机之间的异同...

2726
来自专栏JackieZheng

告别set和get,两大利器轻松搞定model转换

场景一:一般我们遇到需要新建model,常规做法就是创建一个类,老老实实的定义好model中的所有属性,一般来说属性对应的set方法和get方法都是少不了的,有...

733
来自专栏kangvcar

MongoDB 入门极简教程

851
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版5.1节C风格数据结构内存布局之引言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

431

扫码关注云+社区