ruby php jsp,php不是世界上最好的语言, Ruby才是

php是一把好锤子, 很适合0计算机基础的人入门, 不过这把锤子并不像标准的羊角锤, 一头拔钉子, 一头敲钉子. 可能php更像一个两头都用来拔钉子的锤子, 别误会, 我没有任何贬低php的意思, 我的意思是至少你还可以用这把奇葩的锤子的手柄来敲钉子.

Java不是一把锤子, 而是一个手柄, 你可以在上面接各种工具头, 敲钉子就接一个锤子头, 拧螺丝就接个十字刀头, 问题是你要去找各种工具(对一个Web应用来说, 10多种第三方包不过分吧), 而且手柄本身用起来咯手.

Ruby是一把符合人体工程学设计的手柄, 你依然可以在上面接各种头. 事实上, Ruby on Rails这个工具头已经满足了Web应用的全部需求了.

目录:

五大受损 全面解析PHP的糟糕设计

作为Java程序员, 鄙人认为反方观点有理有据让人信服, 所以今天我们不讨论PHP了.

声明并使用类的实例变量(Ruby胜)

Java

class Foo{

String name;

Foo(String name){

this.name=name;

}

public void printName(){

System.out.print("Hi " + name);

}

}

Ruby

不需要声明,直接在类的方法中使用@name

class Foo

definitialize(name="World")

@name=name;

end

defsay_hi

puts "Hi #{@name}";

end

注意: 构造函数参数name = “World”, Java不支持参数的默认值, 这也是Java项目编译OK, 运行时经常报NullPointException的原因.

新建类的实例(Ruby胜)

Java

FooFooFooFoo f = new FooFooFooFoo();

Ruby

f = FooFooFooFoo.new()

反射(打平)

Java

Class cla=ReflectionDemo.class; //创建类对象,使用泛型修饰避免强转

Field[] field=cla.getFields(); //获取全部公共域(含父类)

Field[] field=cla.getDeclaredFields(); //获取全部公共域(不含父类)

Method[] method=cla.getMethods(); //获取全部方法(含父类)

Field[] field2=cla.getDeclaredMethods();//获取全部方法(不含父类)

Ruby

Foo.instance_variables(true)#列出Foo实例变量(包括父类)

Foo.instance_variables(false)#列出Foo实例变量(不包括父类)

Foo.instance_methods(true) #列出Foo的函数(包括父类)

Foo.instance_methods(false) #列出Foo的函数(不包括父类)

f = Foo.new()

f.respond_to?("foo") #检查Foo是否有名为name的函数

setter和getter(Ruby胜)

Java

class Foo{

String name;

public String getName(){

return name;

}

public void setName(String name){

this.name = name;

}

}

还好? 如果有20个实例变量需要getter和setter呢?

Ruby

class Foo

#attr_accessor自动生成"name", "name="两个函数. 前者用作getter, 后者用作setter

attr_accessor :name

end

f.respond_to?("name") #true

f.respond_to?("name=") #true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值