Ruby和Java有什么关系么?

Python015

Ruby和Java有什么关系么?,第1张

在Ruby中,一切皆是对象。

下面举一个例子来更直观地说明Ruby语言的这一特点。

在Java中,求一个数的绝对值的代码如下。 int c = Math.abs(-20)而在Ruby语言中,一切皆是对象,也就是说“-20”这个数也是一个对象,因此,求一个数绝对值的Ruby代码形式如下。 c = -20.abs 这样的代码编写方式是不是更形象一些呢?

Rails 框架是一个更符合实际需要而且更高效的Web开发框架,Rails结合了PHP体系的优点(快速开发)和Java体系的优点(程序规整)。Rails是一个全栈式的MVC框架,换句话说,通过Rails可以实现MVC模式中的各个层次,并使它们无缝地协同运转起来。 在实际开发一个MVC模式的Web应用项目时,如果使用Java开发,需要用到Struts、Hibernate和Spring等框架,而且需要额外整合3个框架开发出的内容。而使用Ruby语言开发相同的项目时,只需要用到Rails框架就可以完成。

RoR的效率肯定要比Java高一个数量级,这确实是事实,比PHP至少也要高好几倍,这也是事实,这一点在这篇文章中不展开了,但是为什么开发效率这么高,我也想谈谈我的看法,当然还很不成熟的看法:一、主要原因是ruby语言的语法非常强大我记得庄表伟说过一个观点:“框架是强化的语法”,意思就是说语法比较弱,所以才需要n多框架,如果语法很强,框架就很少。这一点在Java和ruby身上得到了验证。

1、ruby的open class VS Java的AOP,反射、动态代理,字节码增强等技术JDK1.3开始引入反射,就已经打开了Java这种静态类型语言通往动态类型语法的潘多拉魔盒。随后的动态代理技术,字节码增强技术,静态和动态的AOP技术开始层出不穷,为什么呢?就是需要在程序运行期动态改变对象的行为。但是对于ruby来说是open class的,语法级别上就支持程序运行期修改对象行为,所以Java需要很复杂技术才能实现的功能对于ruby来说就是非常简单的搞定了。

2、ruby的duck typing VS Java的IoC,泛型Java的IoC不用说了,泛型在库级别也开始广泛使用。IoC就是根据对象行为来进行对象组装,泛型就是在不确定对象行为的情况下确定对象的交互。但是ruby的对象行为是在运行期才确定的,天然就是泛型的,行为不是静态的,所以不需要IoC。

3、ruby的block,closure VS Java的匿名内部类大家对spring的Template肯定印象很深刻,但是这是ruby标准的用法,所以各种资源释放,异常处理在语法级别上就支持的很好,做起来很简单。

4、ruby的Meta programming VS Java缺乏method_missing机制大家耳熟能详了,Java没有这么强的Meta programming,很多ruby magic耍不出来。

5、脚本语言 VS 编译语言这也是一个很大的优势,脚本编程速度确实快。

二、rails框架确实做的很棒

1、full-stackrails是一个概念一致的fullstack框架,不知道为什么,在Java世界目前只有Rife这一个可以和RoR相提并论的fullstack框架,但是Rife的实现并不好(作者从PHP转过来的,和DHH爆发过口水战)。不过因为底层语法支持的不同,用Java是做不出来RoR框架的。因此也有人用Groovy做Grails,不过这帮人不太争气。

2、CoC这个不用说了,现在很多Java框架开始吸收这一点。

3、为web开发良身打造web开发需要用到各种技术全部提供,绝对的贴心,如果用Java,这些东西都需要自己集成或者自己实现,省了一大堆麻烦事。

4、开发测试部署快速这个不说了,Java劣势太明显了关于“效率提高的来源”问题,我的理解就是次要复杂性被ROR降低到了极致。说的难听一点,不是ROR太聪明,而是我们以前做得蠢事太多了。

各种各样的xml, taglib,单元测试困难 ... ...做过项目的人都知道这些次要复杂性很多情况下真的是要命的。ROR没有降低软件的内在复杂性,也就是业务问题。但是它把复杂性降低到无限趋近于业务复杂性,也有人称ROR是Web开发的DSL。而解决业务问题正是人发挥聪明才智的地方,ROR不能代替人,但是它把人从次要复杂性的泥潭之中解救了出来。

参考资料:南京赛威信息科技

1. 泛型的却很有用, 如果跟反射可以配合用好, 普通企业应用得代码量可以减少非常多.

2. python之类type inference语言比java更适合做这种template抽象

举个例子: 企业程序大部分程序是实体信息管理得, 真正涉及交易清算得只有极小一部分

对于所有得实体管理, 基本上都是增,删, 改, 查看, 查找等等几个功能

我现在用了几个框架, 经典结合方式:webwork+spring+hibernate, 分析如下:

hibernate O/R Mapping没什么花头, 为每个实体管理都要写一个映射类, 一般跟实体得数目差不多, 有时候为了避免关联, 建几个视图映射会多点. But, 这个能用hibernate自己写得工具生成, 维护一个java类文件, 以及里面得meta description.

或者自己写个程序生成( 给定数据源,, 输出java类文件, 以及hbm .xml文件 ), 这个只需要维护sql语句就兴了, 我通常这么做.

1. 不用泛型, 不用反射

spring层要写5个service(假设一个实体对应一个service), 分别实现读实体, 加实体, 删实体, 根据条件查找实体List这些功能.

要写5个不同得实体类得Action, 然后Action里面实现校验, 增加, 修改, 删除, 列表得功能, 每一个类要实现得功能同样也类似.

这些都没多少重构实质性得体现, 好处不明显, 可以提取得公共代码非常少.

2. 不用泛型, 用反射

在 1 得基础之上, 可以重构提取出一个公共service, 将分散在5个service得公共代码kill掉. 多出一个根据实体类参数操作得公共类, 但是类得数量增加一个.

同样Action也可以提出一个baseaction来

重构消去了一部分代码, 每个service得代码还是存在重复代码, 但是这个还可以通过反射合成一个service, 不过掉用者要用反射调用

对于action因为需要配置, 除非webwork支持类型得注入, 否则, 不好消去.

如果webwork spring 支持实体类型得注入, 那么到此可以结束, 只写一套逻辑, 代码也没有重复, 由于精力有限, 没有去深入研究spring AOP跟webwork 得inteceptor机制, 不知道支持不支持.

3.用泛型, 用反射

在1得基础上引入泛型, 写一个泛型service, 写一个泛型webwork action , 也没有研究过xwork中泛型对象是怎么配置产生得, 如果支持配置, 只需要写一个action即可, 如果不支持, 需要为每个实体类写一个webwork action

同样页面也是这个样子

但是, java得泛型用了一把, 不说对很多东西支持得很差, 光写法上来看, 跟C++ template一致, 仍然是一大堆得<>, 让初学者吐血, 变成高手炫耀得奇技淫巧. 比起python之类动态类型安全语言type inference机制相差太远, java泛型还有很长得路要走, 不过静态语言走到type inference上来得话, 编译类型检查得好处就没了, 所以java这方面永远不可能~~~

通过上面考虑, 我觉得python更适合web管理程序, 对于很多entity management得程序完全可以写出一个服务所有, 仅仅是O?Rmapping就没办法省. 不知道python有没有类似java得反射, 如果有得话会更好, 可以写出更通用, 量更少得代码. 相信ruby on rails成功也有这方面得原因(我没用过ruby, 错了也别骂我), 毕竟代码越少越好, 尤其是重复代码

我得主张是kill掉all重复代码, 只要能抽象统一得代码重复就是罪过, 哈哈, 相信用python可以把这个做得更好, 越来越喜欢python语言得特性了, 可惜还没拿他来做过web程序

目前比较流行的编程语言:

1、Ruby

Ruby于1993年2月24日开始编写至1995年12月才正式公开发布,一种为简单快捷面向对象编程而创的脚本语言,Ruby是一个语法像Smalltalk一样完全面向对象、脚本执行、又有Perl强大的文字处理功能的编程语言。

2、Perl

Perl ,一般被称为“实用报表提取语言”(Practical Extraction and Report Language)。他于1987年12月18日发表。Perl借取了C、sed、awk、shell ing以及很多其他程序语言的特性。其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。简而言之,Perl像C一样强大,象awk、sed等脚本描述语言一样方便。

3、SWIFT

SWIFT,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Object-C共同运行于MAC OS和iOS平台,用于搭建基于苹果平台的应用程序。

4、php

PHP,是英文超文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛地运用,目前版本已经更新到5.4.23,由于其学习成本低,开发效率高,扩展函数丰富,成为了最流行的服务器端脚本语言。

5、Python

Python(KK 英语发音:/ˈpaɪθən/)是一种面向对象、直译式计算机程序设计语言。也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。 Python语法简捷而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。Python的名字来源于一个喜剧。也许最初设计Python这种语言的人并没有想到Python会在工业和科研上获得如此广泛的使用。

6、c#

C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。

7、java

ava是一ava是一种由Netscape的Live发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器终端语言,比如Perl,遗留的速度问题。当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。于是Netscape的浏览器Navigator加入了Java,提供了数据验证的基本功能。所以,Java 被数百万计的网页用来改进设计、验证表单、检测浏览器、创建cookies,以及更多的应用。

推荐下我的前端群:524262608,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2017最新的前端资料和零基础入门教程,欢迎初学和进阶中的小伙伴。

8、C++

C++是一种面向对象的计算机程序设计语言。C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。

9、C

C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。

10、java

Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。