【Ruby on Rails全栈课程】2.1 ruby语言入门

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

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


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”


进入创建的这个程序文件的目录命令行上运行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


#定义一个类,命名为Car
class Car
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

目录
相关文章
|
6月前
|
文字识别 API 开发工具
印刷文字识别产品使用合集之SDK支持ruby语言吗
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
4月前
|
前端开发 测试技术 数据库
使用Ruby on Rails进行快速Web开发的技术探索
【8月更文挑战第12天】Ruby on Rails以其高效、灵活和易于维护的特点,成为了快速Web开发领域的佼佼者。通过遵循Rails的约定和最佳实践,开发者可以更加专注于业务逻辑的实现,快速构建出高质量的Web应用。当然,正如任何技术框架一样,Rails也有其适用场景和局限性,开发者需要根据项目需求和个人偏好做出合适的选择。
|
4月前
|
自然语言处理 Ruby
Ruby语言揭秘:如何轻松驾驭自然语言处理?
【8月更文挑战第31天】本文介绍了如何利用Ruby进行自然语言处理(NLP),包括安装`treat`库及其实现文本分词、词性标注和命名实体识别等基础任务的方法。通过示例代码,展示了Ruby在NLP领域的强大功能与灵活性,为初学者提供了一个友好且实用的入门指南。在信息爆炸的今天,掌握Ruby进行NLP处理的技能显得尤为重要。
32 0
|
4月前
|
前端开发 测试技术 API
揭秘Ruby on Rails的神秘力量:如何让你的Web应用飞起来?
【8月更文挑战第31天】Ruby on Rails(简称RoR)是一个基于Ruby语言的开源Web应用框架,自2005年发布以来,因简洁的语法、强大的功能和高效的开发效率而广受好评。RoR采用MVC架构,提高代码可读性和可维护性,拥有庞大的社区和丰富的库支持。本文通过示例代码展示其强大之处,并介绍RoR的核心概念与最佳实践,帮助开发者更高效地构建Web应用。
52 0
|
4月前
|
前端开发 API C++
在Ruby世界中寻找你的Web框架灵魂伴侣:Rails vs Sinatra
【8月更文挑战第31天】在Ruby的世界里,选择Web框架如同挑选衣物,需根据场合和需求。Rails与Sinatra是两大热门框架,前者以其“约定优于配置”理念和全面的功能成为企业级应用的首选;后者则以轻量级和灵活性著称,适用于快速原型开发和小规模应用。通过对比两者特性,如Rails的MVC架构与Sinatra的简洁API,我们可以看到它们各有所长。选择合适的框架,如同找到旅途中的最佳伙伴,让开发之路更加顺畅愉悦。这场探索之旅教会我们,没有绝对的好坏,只有最适合的选择。
38 0
|
4月前
|
测试技术 开发者 Ruby
Ruby领域特定语言(DSL)的神秘力量:如何让你的代码飞起来?
【8月更文挑战第31天】在软件开发领域,Ruby以简洁的语法和强大的表达能力著称,但面对复杂业务逻辑时,代码可能变得冗长难维护。此时,领域特定语言(DSL)成为解决问题的有效途径。DSL专为特定领域设计,使代码更贴近业务逻辑,提高可读性和可维护性。本文通过示例展示了如何在Ruby中开发DSL,包括使用解析器和宏功能创建一个简单的Web应用结构描述语言,并提出了定义清晰语法、避免滥用DSL等最佳实践,强调了测试与文档的重要性。
87 0
|
4月前
|
安全 前端开发 数据安全/隐私保护
如何在Ruby on Rails中打造坚不可摧的OAuth认证机制
【8月更文挑战第31天】在构建现代Web应用时,认证与授权至关重要。本文介绍如何在Ruby on Rails中实现OAuth认证,通过使用`omniauth`和`devise` gems简化流程。首先安装并配置相关gem,接着在`User`模型中处理OAuth回调,最后设置路由及控制器完成登录流程。借助OAuth,用户可使用第三方服务安全地进行身份验证,提升应用安全性与用户体验。随着OAuth标准的演进,这一机制将在Rails项目中得到更广泛应用。
57 0
|
5月前
|
监控 网络安全 持续交付
公司电脑管理软件结合 Ruby 语言的实践探索
在数字化办公时代, Ruby 语言以简洁灵活的特点, 成为公司电脑管理软件开发的新选择。通过示例代码展示了 Ruby 在获取系统信息、监控内存使用及远程管理方面的应用。Ruby 的灵活性与丰富库资源, 大大提升了管理效率与准确性, 为企业数字化管理带来新可能。
46 3
|
5月前
|
SQL 安全 数据库
Ruby on Rails 数据库迁移操作深度解析
【7月更文挑战第19天】Rails 的数据库迁移功能是一个强大的工具,它帮助开发者以版本控制的方式管理数据库结构的变更。通过遵循最佳实践,并合理利用 Rails 提供的迁移命令和方法,我们可以更加高效、安全地管理数据库结构,确保应用的稳定性和可扩展性。
|
6月前
|
前端开发 测试技术 数据库
Ruby on Rails:快速开发Web应用的秘密
【6月更文挑战第9天】Ruby on Rails,一款基于Ruby的Web开发框架,以其高效、简洁和强大备受青睐。通过“约定优于配置”减少配置工作,内置丰富功能库加速开发,如路由、数据库访问。活跃的社区和海量资源提供支持,MVC架构与RESTful设计确保代码清晰可扩展。高效的数据库迁移和测试工具保证质量。Rails是快速构建Web应用的理想选择,未来将持续影响Web开发领域。