2.1 ruby语言入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shine_a/article/details/84891309

在第一章中,项目我们已经创建好并且能输出第一个helloworld了,我们先不急着做项目,先了解一下ruby,只是需要看得懂代码。这一章我们简单介绍一些ruby语言的语法。

1、运行程序的平台,有三种方式运行ruby,第1种方法必须在项目文件夹下运行,第2、3种方法可以在任意文件夹下运行,前提是必须安装ruby

(1)在控制台中运行ruby
在写项目的时候,建议用这个方法,因为我们之后做项目,在控制台中可以直接调用项目中类方法和实例方法,测试很方便。
登录vagrant,打开项目目录,运行rails console(简写rails c)进入控制台,输入exit退出控制台

vagrant@vagrant-ubuntu-trusty-64:/vagrant/data_system$ rails c
Running via Spring preloader in process 2659
Loading development environment (Rails 5.1.6.1)
irb(main):001:0> puts "hello world"
hello world
=> nil
irb(main):002:0> exit

(2)以irb交互的方式输入代码直接执行
irb这个工具会随着 Ruby 的安装自动带有,只需要在本地电脑命令行中键入 irb,就会进入交互式 Ruby。输入exit退出交互模式。

xuzhaoning@xuchaoningdeMacBook-Air:~$ irb
2.2.1 :001 > puts "hello world"
hello world
 => nil
2.2.1 :002 > exit

(3)创建程序文件,再在命令行运行此文件
创建一个后缀为.rb的文件,命名为first_project.rb,里面写上代码puts “hello world”

hello world

进入创建的这个程序文件的目录命令行上运行ruby first_project.rb,会输出hello world。注意一定要在这个文件的目录下运行。

xuzhaoning@xuchaoningdeMacBook-Air:~$ ruby first_project.rb
#输出信息
hello world
2、ruby是面向对象语言

ruby是面向对象语言,面向对象的意思,顾名思义,就是对对象进行操作,在ruby里面,想要创建一个对象,首先要创建类,然后调用new这个构造函数将类实例化,这个实例化之后的实体就是一个对象。

#咱们要对“车”进行实例化,先创建一个类Car
class  Car
end
#然后创建车这个对象
car1 = Car.new

car1就是从Car这个类,通过new构造方法,来创建的对象。

初学者能对“对象”这个概念理解到这一层就可以了,语言本身就是将抽象的东西,用代码描述出来,来实现各种功能。要是想深入了解对象以及构造函数的工作,可以看《算法第四版》这本书。建议初学者先跟着我学会ruby,再去看这本书。因为算法比较难,你学会一门语言,再看算法书会比较有代入感。

3、ruby类、模块

(1)通过class来定义一个类,类是抽象的,通过构造方法(new)才能将类变成一个实例。比如说我们之后建立一个论坛,定义一个Post类来代表帖子,post = Post.new来新建一个帖子,Post指的就是帖子这个一大类别,是抽象的,但是post是一个实际对象,指的是新建的这一个帖子,这个帖子有标题、内容等。类的命名规则用大写字母开头,多单词组合时,每个单词首字母大写
(2)通过module来定义一个模块,模块是一种把方法、类和常量组合在一起的方式,模块和类用法差不多,命名规则与类是一样的,但是模块不可以被实例化。如果你之前没接触过代码的话,肯定对这一段描述会很迷惑,不过没有关系,咱们都会经历这一个阶段,等你代码写的多了,自然而然就明白了。

#定义一个类,命名为Car
class Car
end
#定义一个模块,命名为BigCar
module BigCar
end
4、ruby方法

实例方法:是实例对象可以调用的方法。
类方法:是类可以直接调用的方法。
方法名命名规则:全部小写,多个单词用下划线_隔开

#定义一个类,命名为MethodTest
irb(main):001:0> class MethodTest
#定义一个实例方法,命名为ins_method
irb(main):002:1>   def ins_method
irb(main):003:2>     puts "调用实例方法"
irb(main):004:2>   end
#定义一个类方法,命名为cla_method,「self.方法名」就是类方法
irb(main):005:1>   def self.cla_method
irb(main):006:2>     puts "调用类方法"
irb(main):007:2>   end
irb(main):008:1> end
=> :cla_method
#new是构造函数,MethodTest.new就是将MethodTest这个类实例化成一个对象,用实例对象才能调用实例方法
irb(main):009:0> MethodTest.new.ins_method
调用实例方法
=> nil
#不能用类直接调用实例方法,用MethodTest类直接调用实例方法会报错
irb(main):012:0> MethodTest.ins_method
NoMethodError: undefined method 'ins_method' for MethodTest:Class
Did you mean?  instance_method
	from (irb):12
#cla_method是类方法,用MethodTest类直接调用就可以,不需要先将类实例化
irb(main):010:0> MethodTest.cla_method
调用类方法
=> nil
5、ruby变量、常量

(1)全局变量:以$开头。在整个程序中都可以访问,全局变量的值在程序中任何地方都可以修改。在实际项目中,一般不使用。

#定义一个全局变量
$name = "xzn"

(2)实例变量:以@开头,实例对象可以直接调用的变量。相同的变量对于不同的对象会有不同的值,只要对象还在,实例变量对应的值就不会消失。在实际开发中经常用到。

#创建一个名为Hello的类,在类中定义两个方法initialize、set_name。
irb(main):001:0> class Hello
#initialize方法是类调用构造函数时执行的。Hello.new("Amy")会调用该方法,将@name赋值为"Amy"
irb(main):002:1>   def initialize(myname)
irb(main):003:2>     @name = myname
irb(main):004:2>     end
#set_name是一个实例方法,通过实例(也就是对象)能够调用这个方法,不能通过类直接调用,比如:Hello.set_name是错误的。
irb(main):005:1>   def set_name
irb(main):006:2>     puts "Hello,my name is #{@name}"
irb(main):007:2>   end
irb(main):008:1> end
=> :set_name
#通过类调用new构造方法创建一个对象,命名为amy。将@name赋值为"Amy"
irb(main):009:0> amy = Hello.new("Amy")
=> #<Hello:0x00007f5901a07f88>
#通过amy这个对象,调用set_name实例方法,会输出puts后面的语句,此时@name的值为"Amy"
irb(main):010:0> amy.set_name
Hello,my name is Amy
=> nil
#通过类调用构造方法再创建一个对象,命名为li_hua。将@name赋值为"LiHua"
irb(main):011:0> li_hua = Hello.new("LiHua")
=> #<Hello:0x00007f5901a2b348>
#此时@name的值为"LiHua"
irb(main):012:0> li_hua.set_name
Hello,my name is LiHua
=> nil
#再次用amy对象调用set_name方法,看一下@name实例变量,在不同的实例中,是否会相互影响。
#amy对象中@name的值是"Amy"。li_hua对象中@name的值是"LiHua",相同的变量对于不同的对象会有不同的值,不会相互影响。
irb(main):013:0> amy.set_name
Hello,my name is Amy
=> nil

(3)类变量:以@@开头,所有实例可以共享的一个变量。

irb(main):001:0> class Hello
irb(main):002:1>   def initialize(myname)
irb(main):003:2>     @@name = myname
irb(main):004:2>   end
irb(main):005:1>   def set_name
irb(main):006:2>     puts "Hello,my name is #{@@name}"
irb(main):007:2>   end
irb(main):008:1> end
=> :set_name
irb(main):009:0> amy = Hello.new("Amy")
=> #<Hello:0x00007f5901a07f88>
irb(main):010:0> amy.set_name
Hello,my name is Amy
=> nil
irb(main):011:0> li_hua = Hello.new("LiHua")
=> #<Hello:0x00007f5901a2b348>
irb(main):012:0> li_hua.set_name
Hello,my name is LiHua
=> nil
#在上面@name实例变量例子中,相同的变量对于不同的对象会有不同的值,amy对象中,@name的值为“Amy”,
#lihua对象中,@name的值为“Lihua”。但是对于@@name类变量,@@name的值是被这个类实例化出来的对象共用的,当@@name的值为“Lihua”,那么所有对象对应的@@name的值也变成了“Lihua”,主要对比实例变量例子中的区别。
irb(main):013:0> amy.set_name
Hello,my name is LiHua
=> nil

(4)常量:规定大写字母开头,实际开发中一般全部大写,用来定义一个不可变的值。常量不可以定义在方法内。定义在类或模块中的常量,可以被类和模块内部访问。定义在类或模块外的常量,可以被全局访问。

irb(main):001:0> class ConstantExample
#定义常量
irb(main):002:1>   VAR1 = 100
irb(main):003:1>   VAR2 = 200
#定义一个实例方法
irb(main):004:1>   def put_var
irb(main):005:2>     puts "第一个常量为#{VAR1}"
irb(main):006:2>     puts "第二个常量为#{VAR2}"
irb(main):007:2>   end
irb(main):008:1> end
=> :put_var
#实例化一个constant_example对象
irb(main):009:0> constant_example = ConstantExample.new
=> #<ConstantExample:0x00007f5901982950>
#通过实例化对象调用实例方法,输出被定义的常量
irb(main):010:0> constant_example.put_var
第一个常量为100
第二个常量为200
=> nil

Ruby on Rails开发者文档
http://doc.rubyfans.com/

猜你喜欢

转载自blog.csdn.net/shine_a/article/details/84891309
2.1