论坛首页 编程语言技术论坛

漫谈Java与Ruby的变量

浏览 2707 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (1)
作者 正文
   发表时间:2009-04-05  
记得刚入职的时候,在Ruby方面还是一张白纸,公司要求一个星期掌握Rails的开发流程,并且能上手做一些东西,毕竟公司不是学校,为了尽快的学习Rails的开发,在Ruby本身方面,也没有过多的时间去考虑细节,最明显的就是变量乱用,分不清局部变量和成员变量,只要功能达到了,就OK了。后来趁闲暇之余,把Ruby的细节看了看,把常用的总结了一下,为了写更好的程序,必须要弄明白的。

如果你和我一样,第一语言是Java,现在接触Ruby了,希望这篇文章对你有所帮助。如果你初学Ruby,再学Java(这个可能性不大吧,呵呵),也来看看吧:->

写两段代码,一看变明了

class Person {
	// 常量,永远不变了
	// 需要注意的是,在Java里面,按照约定常量名全部大写,但这并不是必须的
	public static final String ADDRESS = "地球";

	// 静态变量,类似于全局变量
	// 该变量属于类所有,而非某一个对象所有,即所有对象共享该变量
	public static int count = 0;

	// 成员变量(field),只要你学过任何一门面向对象的语言,这个就不用我解释了吧
	// 构造函数里初始化
	private String name;
	private int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void soothsaying() {
		// 这就是局部变量了,只有在该方法内有效
		long currentTime = System.currentTimeMillis();
		
        if (currentTime % 10 == age % 10) {
            System.out.println("OK, 现在的运气好极了,赶快买彩票去吧");
        } else {
			System.out.println("哎呀,你现在到运气好像不是太好阿!");
        }
	}
}


class Person
	# 首先应该知道的是,Ruby的变量无需声明,直接引用即可(当然得有值了,不然会返回nil)
	# Ruby中到变量是不区分类型的,你可以用任意一个变量去接受任意一个值,但不推荐这样做
	
	# 常量,第一个字母要大写,这是必须的,而非约定.后面的字母通常也要大写,不过这就不是必须要求的了
	ADDRESS = "地球"

	# 类变量,@@开头(必须的),类似于java里的静态变量,该值属于类,而非对象
	@@count = 0

	def initialize(name, age)
		# 成员变量,前面有@符号,这也是必须的上面已经说过,变量无需声明,直接引用
		# 需要注意的是,成员变量一般都写在某方法下,而不是写在类的里面方法的外面(Java中成员变量的位置)
		# 这也是动态语言的一个特点,在需要时加载,先执行的方法里包含有成员变量,后面的方法就可引用
		@name = name
		@age = age
	end

	# 占卜方法
	# 无论方法是否有参数,可以写或不写括号,
	def soothsaying
		# 局部变量,小写字母或下划线开头(必须),通常局部变量里不包含大写字母(约定)
		current_time = Time.new.to_i
		
		if current_time % 10 == @age % 10
			# p 是puts的简写,打印到控制台输出,在双引号当中,#{}里面可以写变量和表达式
			# 如果变量为nil,在这种形式中不会打印出任何东西
			p "恩,不错,现在#{@name}的运气不错"
		elsif
			puts "呀,不是太好呀!"
		end
	end
end


看完之后,应该对他们之间的差异有些明白了吧
ps:初学者,如有错误之处,还望各位多多指正
   发表时间:2009-05-03  
写的很好
ruby许多都是靠约定的 比如大写是常量,小写局部变量
Javaer需要调整思维模式啊
0 请登录后投票
   发表时间:2009-05-03  
这里面思维方式起了很大作用 接触了ruby 思路开阔了很多 呵呵
0 请登录后投票
   发表时间:2009-05-03  
是这样的,“约定重于配置”的设计理念似乎渗透到了Ruby语言之中。
日本程序员能够想象出这样的语言风格也是一个典型的实用主义者了,感觉这个语言和Rails框架的理念有完全相似的地方。
0 请登录后投票
   发表时间:2009-05-04  
qianjigui 写道
是这样的,“约定重于配置”的设计理念似乎渗透到了Ruby语言之中。
日本程序员能够想象出这样的语言风格也是一个典型的实用主义者了,感觉这个语言和Rails框架的理念有完全相似的地方。

确实是实用主义。
0 请登录后投票
   发表时间:2009-05-04  
是实用主义,也是个人英雄主义
0 请登录后投票
   发表时间:2009-05-06  
这两句连在一起说总觉得怪……
星情泪 写道
# 需要注意的是,成员变量一般都写在某方法下,而不是写在类的里面方法的外面(Java中成员变量的位置) 
# 这也是动态语言的一个特点,在需要时加载,先执行的方法里包含有成员变量,后面的方法就可引用

写不写在类里面方法外面跟动态语言没关系。这两句恐怕得处理一下不然误导性颇大

星情泪 写道
# p 是puts的简写,打印到控制台输出,在双引号当中,#{}里面可以写变量和表达式

p是p,puts是puts,它们是不一样的哦?
irb(main):001:0> p [1,2,3]
[1, 2, 3]
=> nil
irb(main):002:0> puts [1,2,3]
1
2
3
=> nil

p会调用inspect方法
0 请登录后投票
   发表时间:2009-05-11  
RednaxelaFX 写道
这两句连在一起说总觉得怪……
星情泪 写道
# 需要注意的是,成员变量一般都写在某方法下,而不是写在类的里面方法的外面(Java中成员变量的位置) 
# 这也是动态语言的一个特点,在需要时加载,先执行的方法里包含有成员变量,后面的方法就可引用

写不写在类里面方法外面跟动态语言没关系。这两句恐怕得处理一下不然误导性颇大


这确实没关系,这属于我用词不当,我是指平时变量的位置

至于后面所说的p是puts的简写,这点谢谢你的纠正,后来发现他们并不是一回事,p可以把转义字符原样输入,puts就不是了,和python里的单引号和双引号的区别有点像,呵呵
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics