`
星情泪
  • 浏览: 16440 次
  • 性别: Icon_minigender_1
  • 来自: 河北
最近访客 更多访客>>
社区版块
存档分类
最新评论

漫谈Java与Ruby的变量

阅读更多
记得刚入职的时候,在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:初学者,如有错误之处,还望各位多多指正
分享到:
评论
7 楼 星情泪 2009-05-11  
RednaxelaFX 写道
这两句连在一起说总觉得怪……
星情泪 写道
# 需要注意的是,成员变量一般都写在某方法下,而不是写在类的里面方法的外面(Java中成员变量的位置) 
# 这也是动态语言的一个特点,在需要时加载,先执行的方法里包含有成员变量,后面的方法就可引用

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


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

至于后面所说的p是puts的简写,这点谢谢你的纠正,后来发现他们并不是一回事,p可以把转义字符原样输入,puts就不是了,和python里的单引号和双引号的区别有点像,呵呵
6 楼 RednaxelaFX 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方法
5 楼 stworthy 2009-05-04  
是实用主义,也是个人英雄主义
4 楼 Hooopo 2009-05-04  
qianjigui 写道
是这样的,“约定重于配置”的设计理念似乎渗透到了Ruby语言之中。
日本程序员能够想象出这样的语言风格也是一个典型的实用主义者了,感觉这个语言和Rails框架的理念有完全相似的地方。

确实是实用主义。
3 楼 qianjigui 2009-05-03  
是这样的,“约定重于配置”的设计理念似乎渗透到了Ruby语言之中。
日本程序员能够想象出这样的语言风格也是一个典型的实用主义者了,感觉这个语言和Rails框架的理念有完全相似的地方。
2 楼 星情泪 2009-05-03  
这里面思维方式起了很大作用 接触了ruby 思路开阔了很多 呵呵
1 楼 robin5475 2009-05-03  
写的很好
ruby许多都是靠约定的 比如大写是常量,小写局部变量
Javaer需要调整思维模式啊

相关推荐

    P神-Java安全漫谈

    Java安全是指在Java编程和应用开发过程中采取的一系列措施,旨在保护Java应用程序、系统和数据免受恶意攻击、数据泄露和其他安全威胁的影响。Java安全主要涉及以下几个方面: 代码安全性:Java提供了强大的安全机制...

    Java安全漫谈 - 01.反射篇(1)1

    Java 反射机制安全漫谈 Java 反射机制是 Java 语言中的一种强大功能,允许程序在运行时访问和修改类的信息。然而,这种功能也引入了安全隐患。本文将讨论 Java 反射机制的安全问题,重点介绍反射机制的基本概念、...

    漫谈Java数据库存取技术

    标题与描述中的“漫谈Java数据库存取技术”聚焦于探讨Java领域中处理数据库存取的多种技术。本文将深入解析这些技术的核心概念、优势与局限性,以及它们如何适应不断变化的IT环境。 ### JDBC:Java数据库连接的基石...

    漫谈Java垃圾收集器.pdf

    漫谈Java垃圾收集器 Java垃圾收集器是Java虚拟机(JVM)中的一种自动内存管理机制,旨在释放程序员从手动内存管理的繁琐工作中解脱出来。垃圾收集器通过跟踪对象的引用关系,确定哪些对象是可以被释放的,然后将其...

    Java安全漫谈与java代码审计学习知识库

    Java安全漫谈与Java代码审计是开发者在进行Java应用程序开发时必须关注的重要领域。Java作为广泛应用的编程语言,其安全性直接影响到系统稳定性和用户数据安全。以下是对标题和描述中涉及知识点的详细解释: 1. **...

    漫谈Java FX.pdf

    Java FX概述 Java FX是一种基于Java的富互联网应用(RIA)平台,旨在提供丰富的用户体验和跨平台的解决方案。Java FX平台主要包括Java FX脚本语言、编译器和运行环境三个部分。Java FX脚本语言是一种基于Java的新...

    Java安全漫谈 - 02.反射篇(2)1

    Java反射机制是Java提供的一种强大的动态类型功能,允许程序在运行时检查类的信息并操作类的对象。在Java安全领域,反射常被用于漏洞利用和代码审计。本文将深入探讨Java反射在安全方面的应用,特别是针对类的加载、...

    (C#)开发漫谈:关于变量的命名和属性

    但是,为了避免与关键字冲突,通常推荐以字母开头。变量名是大小写敏感的,因此"myVariable"和"myvariable"被视为两个不同的变量。遵循驼峰命名法(CamelCase)或帕斯卡命名法(PascalCase)是常见的变量命名约定。...

    Java安全漫谈 - 07.反序列化篇(1)1

    Java反序列化漏洞详解 Java安全领域中的反序列化漏洞是一个重要的议题,它涉及的是将对象从二进制数据恢复为程序可以理解的形式时可能存在的安全隐患。反序列化是序列化过程的逆向操作,序列化是将对象的状态转换...

    Java安全漫谈 - 03.反射篇(3)1

    Java安全漫谈 - 反射篇(3)深入讲解了如何在Java中通过反射机制处理可变长参数和访问私有方法。反射是Java中一个强大的特性,它允许程序在运行时检查和操作类、接口、字段和方法,极大地增强了代码的灵活性。然而,这...

    Java安全漫谈 - 05.RMI篇(2)1

    原因是,通常我们在新建一个RMI Registry的时候,都会直接绑定一个对象在上面,也就是说我们示例代码中的Server其实包含了Registry和Serve

    JavaThings:共享与Java相关的东西-Java安全漫谈笔记相关内容

    JavaThings-Java安全漫谈笔记相关《 Java安全漫谈》是我在写的一点Java学习相关的随笔,不是很严谨,也不是啥高科技。这个存储库主要是记录并整理一下,附加一些代码。Java安全漫谈目录 人口统计字节码:远程字节码...

    手机Java功能漫谈

    cnki 数字图书馆论文。pdf格式

    漫谈信号与系统.pdf

    《信号与系统》是一门重要的工科电子类专业课程,主要研究信号的处理以及系统对信号的响应。在这篇文章中,作者用故事性的叙述方式,通俗易懂地解释了卷积、傅利叶变换以及拉普拉斯变换等信号处理中核心的概念,使得...

    基础课程C语言与Java语言的优劣漫谈.pdf

    标题《基础课程C语言与Java语言的优劣漫谈》和描述指出了文章的主要内容,即对C语言和Java语言在基础课程教学中的优劣进行分析和讨论。在阅读所给部分内容时,我们可以提炼出以下知识点: 1. C语言与Java语言的应用...

    Java安全漫谈-知识星球代码审计

    《Java安全漫谈-知识星球代码审计》 Java作为广泛使用的编程语言,其安全性问题一直备受关注。在软件开发过程中,代码审计是确保系统安全的关键环节。本资料集围绕Java安全,特别是针对代码审计,深入探讨了多个...

    Java安全漫谈 - 06.RMI篇(3)1

    Java安全漫谈 - 06.RMI篇(3)深入探讨了Java远程方法调用(RMI)中的安全问题,特别是利用Java序列化协议来执行远程代码。在RMI服务中,codebase机制允许加载远程类,从而可能引发安全风险。本文通过分析网络数据包,...

    漫谈兼容内核.zip

    漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...

Global site tag (gtag.js) - Google Analytics