Ruby学习笔记(一)---初识Ruby

文章目录

  • 简介
  • 特点
  • 安装与第一个程序
    • 下载与安装
      • 下载
      • 安装
      • irb交互控制台
      • hello world
  • 函数
    • 定义一个函数
    • 给函数传参
      • 传参默认值
  • 对象
    • 对象的使用
    • instance_methods、respond_to、send
    • 对象的属性的使用---attr_accessor

近日,了解到一门叫做Ruby的 脚本语言,一门由日本工程师发明的,面向对象的语言。

简介

Ruby学习笔记(一)---初识Ruby_第1张图片
Ruby是一种功能强大的面向对象脚本语言,可以使用它方便快捷地进行面向对象程序设计。与Perl类似,而且Ruby具有强大的文本处理功能,使文本处理变得简单。此外还可以方便地使用C语言来扩展Ruby的功能。

特点

Ruby被称为 “最快的开发语言” ,初步了解,Ruby有以下特点:

  • 解释型执行,方便快捷

Ruby是解释型语言,其程序无需编译即可执行。

  • 语法简单、优雅

语法比较简单,类似Algol系语法。

  • 完全面向对象

Ruby从一开始就被设计成纯粹的面向对象语言,因此所有东西都是对象,例如整数等基本数据类型。

  • 内置正则式引擎,适合文本处理

Ruby支持功能强大的字符串操作和正则表达式检索功能,可以方便的对字符串进行处理。

  • 自动垃圾收集

具有垃圾回收(Garbage Collect,GC)功能,能自动回收不再使用的对象。不需要用户对内存进行管理。

  • 跨平台和高度可移植性

Ruby支持多种平台,在Windows, Unix, Linux, MacOS上都可以运行。Ruby程序的可移植性非常好,绝大多数程序可以不加修改的在各种平台上加以运行。

  • 有优雅、完善的异常处理机制

Ruby提供了一整套异常处理机制,可以方便优雅地处理代码处理出错的情况。

  • 拥有很多高级特性

Ruby拥有很多高级特性,例如操作符重载、Mix-ins、特殊方法等等,是用这些特性可以方便地完成各种强大的功能。

(如此功能强大且方便快捷的语言,自己居然听都没听过!罪过罪过!赶紧学起来!)

安装与第一个程序

注:推荐使用vs code为IDE(幸好以前使用vue的时候把vs code用熟了,嘻嘻)

下载与安装

下载

官网:http://www.ruby-lang.org/zh_cn/

在官网下载最新版或者稳定的版本即可~

安装

安装完之后,在cmd里面输入查看版本

ruby -v

Ruby学习笔记(一)---初识Ruby_第2张图片
看到这个就说明安装成功了~

irb交互控制台

进入ruby的irb交互命令控制台(做一些简单的调试或运算)

irb

在这里插入图片描述
可以直接在vs code里面进行操作
Ruby学习笔记(一)---初识Ruby_第3张图片
用irb进行运算:

10+20
#开平方
Math.sqrt(9)

Ruby学习笔记(一)---初识Ruby_第4张图片
Ruby学习笔记(一)---初识Ruby_第5张图片

hello world

Ruby的文件后缀为“.rb”,就像java的后缀是“.java”一样

新建一个文件“hello world.rb”,输入

puts "我是Ruby,hello world"

然后在控制台运行这个文件:

ruby hello world.rb

Ruby学习笔记(一)---初识Ruby_第6张图片

函数

定义一个函数

使用def 和 end 作为函数的起始标志

def sayHello
	puts "hello world."
end

Ruby学习笔记(一)---初识Ruby_第7张图片

给函数传参

在函数声明的地方加上参数即可(与js有点类似)

def sayHello(name)
	puts "Hello #{name}."
end

此时如果调用函数的时候没有传参,会报这样一个错:在这里插入图片描述
正确的调用:

sayHello("world"

传参默认值

只需要在参数的部分给它写上默认值,调用的时候如果不传参就使用默认值。如果传参就是用传过来的参数

def sayHello(name="world")
	puts "Hello #{name}."
end

如此一来,就算调用的时候只是写了“sayHello”,也不会报错,而是输出“Hello world.”

对象

对象的使用

Ruby跟java一样,作为一个面向对象的语言,并非单身狗,也是有对象滴!~

上面的例子直接在文本中写的函数和调用,没有类体,下面我们建一个类,然后进行调用:

#Player类(我觉得这个类似java的内部类,暂时这样写,后面理解后再修改)
class Player
	#有参构造
	def initialize(name = 'Koma')
		@name = name
	end
	#方法
	edf show()
		puts "palyer: #{@name}"
	end
end

#实例化这个类,建对象,传入实例变量的值
Kamo = Player.new()
Kamo.show()

#传入参数
curry = Player.new("Curry")
cuury.show()

harden = Player.new("Harden")
harden.show()

Ruby学习笔记(一)---初识Ruby_第8张图片

instance_methods、respond_to、send

  • instance_methods(all:boolean) :列出对象(类)内部的方法

  • respond_to:调查对象的方法/属性是否可用

  • send:执行对象的方法

这三个方法的用处

  • 在写了一个类并进行实例化和使用的时候,可以先用 instance_methods列出对象的方法:
#传入false就只看自己写的方法,如果传true就会打印出很多方法,暂时用不到
puts xxx.instance_methods(false)

在需要用到某方法的时候,先使用respond_to判断方法是否可用
然后判断可用的情况下,再使用send方法进行方法的调用

#一般都会先判断方法是否可用再执行,因此常使用在if判断里面

全部代码:

#建一个游戏类
class Game
	#有参构造器
	def initialize(title = "怪物猎人世界", price = 200@title = title
		@price = price
	end
	#写一个show()方法,输出实例变量的内容
	def show()
		puts "标题:#{@title}"
		puts "价格: #{@price}"
	end
	#另外写两个方法,看看到时候能不能识别出来
	def show2()
	end
	def show3()
	end
end

#使用instance_methds方法查看Game类里面有哪些方法
puts Game.instance_methods(false)
#最后输出结果是:
#show()
#show2()
#show3()

#实例化一个对象,为超级马里奥
mario = Game.new("超级马里奥", 350)
if mario.respond_to("show")#判断是否存在show这个方法
	mario.send("show")#如果存在这个方法,则执行这个方法
end
#因为存在这个方法,因此成功执行

对象的属性的使用—attr_accessor

attr_accessor方法可以开启某个属性的修改权限,类似于java中的public

attr_accessor :price, :title

在类中的构造函数中定义两个实例变量,然后用attr_accessor开启这两个属性,然后在下面进行修改,输出结果(类似加上public)

class Game
#attr_accessor :price  #一开始只开放price
#为这两个属性开启public
attr_accessor :title, :price
	#定义有参构造,声明两个属性
	def initialize(title = "怪物猎人世界", price = 200)
		@title = title
		@price = price
	end
	#定义show方法
	def show()
		puts "#{@title}"
		puts "#{@price}"
	end
end

#实例化一个游戏
myGame = Game.new()
myGame.show()

#在这里判断属性是否可用,使用上面的respond_to方法
puts myGame.responds_to("title").ti_s
puts myGame.responds_to("price").ti_s
#因为使用attr_accessor方法开放了这两个属性,因此此处toString方法输出两个true

#既然可以修改,我们就可以修改并使用了
myGame.title = "Super Mario World"
myGame.price = 150
myGame.show()
#属性被修改成功,输出新的值

Ruby学习笔记(一)---初识Ruby_第9张图片
暂时写到这里,马上终面,希望自己能通过,然后系统性地学习Ruby!~~各位晚安啦!!!!!

你可能感兴趣的:(Ruby,ruby)