在第一章中,项目我们已经创建好并且能输出第一个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”

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

【Ruby on Rails全栈课程】2.1 ruby语言入门相关推荐

  1. 【Ruby on Rails全栈课程】3.1 宠物之家论坛管理系统介绍

    学完第二章之后,我们就要开始写项目啦.我们对ruby的了解仅仅还是数组.字符串这些零散的知识,现在通过项目来把这些知识串起来,学习这些知识在实际项目中的应用. 本章学习建议: (1)一个完整的项目不仅 ...

  2. 【Ruby on Rails全栈课程】4.3 评论功能实现(二)--创建帖子详情页面

    1.完善样式,用来显示帖子详情以及评论信息等,编辑app/assets/stylesheets/posts.scss文件,在原有代码下面添加代码: .head {font-size: 18px;fon ...

  3. 【Ruby on Rails全栈课程】4.1 点赞功能

    1.功能描述: (1)一个用户对同一帖子只能点赞一次,点击第二次是取消赞 (2)用户不刷新页面的时候,点赞时当前页面相应贴子的点赞数+1,图标变成fa-thumbs-up,取消赞时当前页面相应帖子的点 ...

  4. 【Ruby on Rails全栈课程】3.5 注册功能

    注册页面成功显示之后,我们开始实现注册功能~~ 1.功能描述 (1)注册时需要填写信息:用户名.邮箱.密码.确认密码.选择角色 (2)用户角色分为普通用户.管理员.超级管理员,后期方便对用户进行权限管 ...

  5. Bootstrap实战练习---Web全栈课程体系(表格+巨幕)

    Bootstrap实战练习-Web全栈课程体系(表格+巨幕) 原网页效果图 连接 我的网页效果 -我的代码 <!DOCTYPE html> <html> <head> ...

  6. Day29 PythonWeb全栈课程课堂内容

    Day29 PythonWeb全栈课程课堂内容 1.Redis 前言介绍 1.1 磁盘和内存的介绍 1.2 Redis背景 1.3 Redis发展历史 1.4 Redis 是什么? 1.5 Redis ...

  7. python全栈工程师 pdf_python全栈工程师项目开发实例实战入门教程百度云

    python全栈工程师项目开发实例实战入门教程百度云 课程目录: 开学典礼 pycharm的基本使用 Python基本语法 数值类型数据及运算 字符串的基本操作 字符串的常用方法 列表的基本使用 列表 ...

  8. 【全栈接口测试进阶系列教程】入门到入职的jmeter接口测试工具实战,接口测试步骤,正则表达式jsonpath,断言,接口加密,beanshell,jdbc,jmeter+ant+jenkins

    目录 [本文简介看之前请详细的看完介绍] 本文是全网首发的[全栈接口测试进阶系列教程]jmeter接口测试工具从入门到入职, 接口系列包含 接口测试系列包含所有的接口测试工具入门到入职,如果你喜欢的话 ...

  9. Ruby on Rails 之旅(六)——Ruby on Rails 简介 ( 少就是多)

    为什么80%的码农都做不了架构师?>>>    转自:http://ihower.tw/blog/archives/1743 繁体字看着头痛,转成简体字给大家看 知名的 Web de ...

  10. Rokid ALL in ONE 全栈开发套件开箱——强人工智能入门指南[1]

    强 AI 很弱,弱 AI 很强. --薛定饿(作者的猫,图见文末) 首先,感谢 SF 和 Rokid 提供的 试用机会. SF的小伙伴们,大家好,欢迎收看这一期的 Integ's Hack Show ...

最新文章

  1. Java状态模式实现工作流_关于使用“状态模式”做工作流概要。
  2. Java SE 6 新特性 Instrumentation 新功能
  3. js 数组 转为树形结构
  4. 页面缓存 ehcache(简单的)
  5. Makefile 学习 1
  6. c语言中的无符号字节,C语言之有符号数和无符号数
  7. 工作80:块级元素的间隙问题
  8. 前端学习(142):行级标签和块级标签
  9. 强化学习:2 马尔科夫决策过程
  10. 【李宏毅2020 ML/DL】P81 Generative Adversarial Network | Intelligent Photo Editing
  11. 造轮子:前端模板引擎
  12. Linux新手必看:浅谈如何学习linux
  13. EL表达式和JSTL的介绍以及基本使用
  14. 弱监督学习的介绍及应用
  15. DNS地址,DNS服务器作用
  16. 5分钟让你整明白美国金融危机爆发的原因
  17. Python自动化爬虫教程:Pyppeteer采集京东商城书籍信息
  18. 高德地图 公交路线查询
  19. Android谷歌推送
  20. 资源网站合集 五个值得你收藏的网站

热门文章

  1. 我的世界空岛生存服务器制作,我的世界:空岛生存“岩浆”没了咋办?大佬给出了6种解决方案!...
  2. 云桌面简介,IDV和VDI,桌面虚拟化对比
  3. 苹果前置摄像头拍出来是反的怎么调_苹果前置摄像头拍照是反的怎么办
  4. Problem : 闰年闰月
  5. 项目时间和本地时间差8小时的问题
  6. 常用数学符号的英文读法
  7. 斯蒂文斯理工学院计算机排名,2020年斯蒂文斯理工学院QS世界排名
  8. N2N组建虚拟局域网——筑梦之路
  9. 参加第五届“软件杯”记录
  10. 从Transformer到ViT再到MAE