ruby入门
本文最后更新于1016 天前,其中的信息可能已经过时,如有错误请发送邮件到2192492965@qq.com

ruby入门

简介

Ruby是一种动态、面向对象、开源的编程语言,它的设计者是松本行弘(Yukihiro "Matz" Matsumoto)。Ruby语言的语法简洁、灵活,使用起来非常方便,常被用于Web开发、网络编程、数据分析、自动化脚本等领域。Ruby语言的特点包括:

  1. 简单易学:Ruby语言的语法简洁、清晰,易于理解和上手。
  2. 动态语言:Ruby是一种动态语言,它的变量类型是动态的,在运行时进行类型检查,这使得Ruby程序员能够更快地开发程序。
  3. 面向对象:Ruby是一种纯面向对象的编程语言,支持类、继承、多态等面向对象的概念。
  4. 具有强大的元编程能力:Ruby具有强大的元编程能力,可以动态地改变程序的结构和行为。
  5. 丰富的类库:Ruby具有非常丰富的类库,可以方便地实现各种功能。
  6. 可移植性:Ruby可以运行在多种操作系统上,如Linux、Windows、MacOS等。
  7. 开源:Ruby是一种开源的编程语言,任何人都可以免费获取并使用。

总之,Ruby语言具有简单易学、灵活、强大的元编程能力、丰富的类库等特点,适用于各种领域的编程需求。

Ruby和Python相似地方

  • 它们都是高级语言。
  • 它们都是服务器端脚本语言。
  • 两者都用于Web应用程序。
  • 两个工作在多个平台上。
  • 两者都具有清晰的语法,易于阅读。
  • 两者都使用一种叫作irb的交互式提示。
  • 对象都是强大的动态类型。
  • 两者都使用嵌入式doc工具。

Ruby和Python不同之处

Ruby和Python编程语言之间存在许多差异,如下表格列出所示 -

术语 Ruby Python
定义 Ruby是一种开源的Web应用程序编程语言。 Python是一种高级编程语言。
面向对象 面向对象编程语言。 不完全面向对象的编程语言。
创始人/开发者 松本松本在20世纪90年代。 Guido Van Rossum在20世纪80年代。
开发环境 支持EclipseIDE 支持多个IDE
程序库 它比Python库更小 有较大范围的库
混合类型 可使用混合类型 不可使用混合类型
Web框架 Ruby on Rails Django
社区 主要集中在Web应用 专注于学术界和Linux
使用 苹果Github上的Twitter Groupon的Shopify ThemeForest 谷歌Instagram的Mozilla Firefox浏览器,华盛顿邮报,雅虎Shopzilla
内置类 内置类可以修改 内置类不可以修改
elseif elsif elif
取消设置变量 一旦设置了变量,就无法将其设置为不可用。只要它在范围内,它将出现在符号表中。 del语句用于删除一个设置的变量。
yield关键字 它将执行另一个作为最终参数传递的函数,然后立即恢复。 它将执行返回到函数调用之外的范围。外部代码负责恢复功能。
匿名函数 支持块,procslambdas表达式。 仅支持lambda表达式。
函数 没有函数 有函数
元组 它不支持元组 支持元组
switch/case语句 它支持switch/case语句。 它不支持switch/case语句
lambda函数 它的lambda函数更大 它只支持单行lambda函数
继承 支持单继承 支持多继承

hello world程序

puts 'hello world' # 输出字符串并在末尾换行
print 'hello world' # 输出字符串
printf '%s'%'hello world'# 格式化字符串输出
putc 'hello world' #只输出一个字符

运算符

Ruby运算符类型如下所示:

  • 一元运算符
  • 算术运算符
  • 按位运算符
  • 逻辑运算符
  • 三元运算符
  • 赋值运算符
  • 比较运算符
  • 范围运算符

1. 一元运算符

一元运算符可用在一个操作数上运行。

操作符 描述
! 布尔非
~ 按位补码
+ 一元加法

示例

在文件unary-operator.rb中,写下面的代码。

#!/usr/bin/ruby -w   

 puts("Unary operator")   
 puts(~5)   
 puts(~-5)   
 puts(!true)   
 puts(!false)

执行上面代码,得到以下结果 -

-6
4
false
true

2. 算术运算符

算术运算符将数值作为操作数,并将它们作为单个值返回。

操作符 描述
+ 相加运算符的两边值
- 运算符的两边的值相减,第一个数减去第二个数
/ 用右侧操作数除左侧操作数
* 将运算符的两边值相乘
** 将右侧操作数指定为左侧操作数的指数
% 将左侧操作数除以右侧操作数后返回余数

示例

在文件airthmetic-operator.rb中,写下面的代码。

 puts("add operator")   
 puts(10 + 20)      
 puts("subtract operator")   
 puts(35 - 15)    
 puts("multiply operator")   
 puts(4 * 8)   
 puts("division operator")   
 puts(25 / 5)   
 puts("exponential operator")   
 puts(5 ** 2)   
 puts("modulo operator")   
 puts(25 % 4)

执行上面代码,得到以下结果 -

add operator
30
subtract operator
20
multiply operator
32
division operator
5
exponential operator
25
modulo operator
1

3. 位运算符

按位运算符对位操作数进行操作。

操作符 描述
& AND运算符
img
OR运算符
<< 左移操作符
>> 右移操作符
^ 异或操作符
~ 补码运算符

4. 逻辑运算符

逻辑运算符对位操作数进行操作。

操作符 描述
&& AND运算符
img
OR运算符

5. 三元运算符

三元运算符首先检查给定条件是真还是假,然后再执行对应的条件语句。

操作符 描述
?: 条件表达式

示例

在文件ternary-operator.rb中,编写下面的代码。

 puts("Ternary operator")   
 puts(2<5 ? 5:2)   
 puts(5<2 ? 5:2)

执行上面代码,得到以下结果 -

Ternary operator
5
2

6. 赋值运算符

赋值运算符用于为操作数分配一个值。

操作符 描述
= 简单赋值运算符
+= 相加并赋值运算符
-= 相减并赋值运算符
*= 相乘并赋值运算符
/= 相除并赋值运算符
%/ 模除并赋值运算符
**= 指数幂并赋值运算符

7. 比较运算符

比较运算符是用于比较两个操作数的大小,相等,不相等,大于,小于等等。

操作符 描述
== 等于运算符
!= 不等于运算符
> 大于运算符,左操作数大于右操作数?
< 小于运算符,右操作数大于左操作数?
>= 大于等于运算符,左操作数大于或等于右操作数?
<= 小于等于运算符,右操作数大于或等于左操作数?
<=> 组合比较运算符
.eql? 检查比较操作数相等和类型是否相同?
equal? 检查比较对象ID是否相等

示例

在文件comparison-operator.rb中,编写下面的代码。

 puts("Comparison operator")   
 puts(2 == 5)   
 puts(2 != 5)   
 puts(2 > 5)   
 puts(2 < 5)   
 puts(2 >= 5)   
 puts(2 <= 5)

执行上面代码,得到以下结果 -

Comparison operator
false
true
false
true
false
true

8. 范围运算符

范围运算符创建一系列连续的值,包括两者之间的值的起始,结束和范围。

(..)创建一个范围,包括最后一个术语,(...)创建一个不包括最后一项的范围。

例如,对于1..5的范围,输出范围为15,范围值也就是:1,2,3,4,5。

而对于1 ... 5的范围,输出范围为14,范围值也就是:1,2,3,4。

变量

1. 局部变量

局部变量名以小写字母或下划线(_)开头。变量可在它的初始化块内或范围内访问。代码块完成后,变量就不在作用域存在了。

当未初始化的局部变量被调用时,它们被解释为对没有参数的方法的调用。

2. 类变量

类变量名以@@符号开头。需要在使用前进行初始化。 类变量属于整个类,可以从类中的任何位置访问。 如果在一个实例中该值将被更改,则它将在每个实例中被改变。

类变量由类的所有后代共享,未初始化的类变量将导致错误。

示例:

创建一个Ruby文件:class-variables.rb,编写以下代码 -

class States   
   @@no_of_states=0   
   def initialize(name)   
      @states_name=name   
      @@no_of_states += 1   
   end   
   def display()   
     puts "State name #@state_name"   
    end   
    def total_no_of_states()   
       puts "Total number of states written: #@@no_of_states"   
    end   
end   

# Create Objects   
first=States.new("Assam")   
second=States.new("Meghalaya")   
third=States.new("Maharashtra")   
fourth=States.new("Pondicherry")   

# Call Methods   
first.total_no_of_states()   
second.total_no_of_states()   
third.total_no_of_states()   
fourth.total_no_of_states()

在上面的例子中,@@no_of_states是一个类变量。

执行上面代码,输出结果如下:

Total number of states written: 4
Total number of states written: 4
Total number of states written: 4
Total number of states written: 4

3. 实例变量

实例变量名以@符号开头。 它属于类的一个实例,可以从方法中的类的任何实例访问。 它们只能访问一个特定的类的实例。

它们不需要初始化,未初始化的实例变量的值是:nil

示例:

class States   
   def initialize(name)   
      @states_name=name   
   end   
   def display()   
      puts "States name #@states_name"   
    end   
end   

# Create Objects   
first=States.new("Hainan")   
second=States.new("GuangDong")   
third=States.new("Beijing")   
fourth=States.new("ShangDong")   

# Call Methods   
first.display()   
second.display()   
third.display()   
fourth.display()

执行上面代码,输出结果如下:

States name Hainan
States name GuangDong
States name Beijing
States name ShangDong

4. 全局变量

全局变量名以$号开头。在全局范围内可访问,可以从程序中的任何位置访问它。

未初始化的全局变量的值会被初始化为:nil。建议不要使用全局变量,因为它们使程序变得秘密和复杂。

Ruby中有一些预定义的全局变量。

示例:

创建一个Ruby文件:global-variables.rb,编写以下代码 -

$global_var = "GLOBAL"   
class One   
  def display   
     puts "Global variable in One is #$global_var"   
  end   
end   
class Two   
  def display   
     puts "Global variable in Two is #$global_var"   
  end   
end   

oneobj = One.new   
oneobj.display   
twoobj = Two.new   
twoobj.display

执行上面代码,输出结果如下:

Global variable in One is GLOBAL
Global variable in Two is GLOBAL

总结

以下是上面几种类型变量的概括 -

特性 局部变量 全局变量 实例变量 类变量
范围 仅限于初始化块内 全局范围 属于一个类的一个实例 仅限于创建它们的整个类
命名约定 以小写字母或下划线(_)开头 $符号开头 @符号开头 @@符号开头
初始化 不需要初始化,未初始化的局部变量被解释为没有参数的方法 不需要初始化,未初始化的全局变量的值为:nil 不需要初始化,未初始化的实例变量的值为:nil 需要在使用前进行初始化,未初始化的全局变量会导致错误。

数据类型

1. 数字

整数和浮点数位于数字类别中。

整数以二进制格式保存。 整数是没有分数的数字。 根据它们的大小,有两种类型的整数。 一个是Bignum,另一个是Fixnum

类别 描述 示例
Fixnum 正常数字 1
Bignum 大数字 9999999910129
Float 十进制浮点数 3.0
Complex 复数/虚数 4 + 3i
Rational 有理数 9/4
BigDecimal 有精度十进制数 6.0

示例:

  • 在使用整数的计算中,则只会返回整数。
C:\Users\Administrator>irb
irb(main):001:0> 3 + 6
=> 9
irb(main):002:0>
  • 在使用float类型的计算中,只会将float类型数值返回。
irb(main):003:0> 4.4 + 5.6
=> 10.0
irb(main):004:0> 5 + 7.9
=> 12.9
irb(main):005:0>
  • 在执行除法运算的情况下,将显示以下输出。
irb(main):002:0> 17/3
=> 5
irb(main):003:0>

2. 字符串

字符串是表示一个或多个单词的一组字母。 字符串通过在单(')或双(")引号内包含文本来定义。

示例:

  • 两个字符串之间可以使用+号进行连接。
irb(main):005:0> "Yii" + "Bai" + ".com"
=> "YiiBai.com"
irb(main):006:0> 'Yii' + 'Bai' + '.com'
=> "YiiBai.com"
irb(main):007:0> 'Yiibai' + ".com"
=> "Yiibai.com"
irb(main):008:0>
  • 将数字字符串与数字相乘将重复该字符串多次。
irb(main):008:0> "1" + "2" + "3"
=> "123"
irb(main):009:0> "yiibai" * 3
=> "yiibaiyiibaiyiibai"
irb(main):010:0> 'yii@ ' * 3
=> "yii@ yii@ yii@ "
irb(main):011:0>
Shell

3. 符号

符号就像字符串。一个符号之前是冒号(:)。 例如,

:abcd

它们不包含空格。 含有多个单词的符号用(_)写成。 字符串和符号之间的一个区别是,如果文本是一个数据,那么它是一个字符串,但如果它是一个代码,它是一个符号。

符号是唯一的标识符,表示静态值,而字符串表示更改的值。

示例:

irb(main):011:0> "string".object_id
=> 26922000
irb(main):012:0> "string".object_id
=> 29115220
irb(main):013:0> :symbol.object_id
=> 788188
irb(main):014:0> :symbol.object_id
=> 788188
irb(main):015:0>

在上面的演示代码中,为字符串创建了两个不同的object_id,但是对于符号,创建了object_id

4. 哈希

哈希将其值分配给其键。 它们可以用键关联指定值。键的值由=>符号分配。 键/值对之间用逗号分隔,所有对都用大括号括起来。 例如,

{"key1" => "value1", "key2" => "Chemistry", "key3" => "Maths"}

实例

#!/usr/bin/ruby   

data = {"key1" => "Physics", "key2" => "Chemistry", "key3" => "Maths"}   
puts data["key1"]   
puts data["key2"]   
puts data["key3"]

执行上面代码,得到以下结果 -

Physics
Chemistry
Maths

5. 数组

数组存储数据或数据列表。 它可以包含所有类型的数据。 数组中的数据之间用逗号分隔,并用方括号括起来。 例如,

["Akash", "Ankit", "Aman"]

数组中的元素由其位置检索。 数组中元素的位置以0开头。

示例:

data = ["Akash", "Ankit", "Aman"]   
puts data[0]   
puts data[1]   
puts data[2]

执行上面代码,得到以下结果

Akash
Ankit
Aman

if-else语句

1. Ruby if语句

Ruby if语句测试条件。 如果conditiontrue,则执行if语句。

语法:

if (condition)  
//code to be executed  
end

流程示意图如下所示 -

img

代码示例:

a = gets.chomp.to_i   
if a >= 18   
  puts "You are eligible to vote."   
end

执行上面代码,得到以下结果 -

90
You are eligible to vote.

2. Ruby if else语句

Ruby if else语句测试条件。 如果conditiontrue,则执行if语句,否则执行block语句。

语法:

if(condition)  
    //code if condition is true  
else  
//code if condition is false  
end

流程示意图如下所示 -

img

代码示例:

a = gets.chomp.to_i   
if a >= 18   
  puts "You are eligible to vote."   
else   
  puts "You are not eligible to vote."   
end

执行上面代码,得到以下结果 -

80
You are eligible to vote.

15
You are not eligible to vote.

3. Ruby if else if(elsif)

Ruby if else if 语句测试条件。 如果conditiontrue则执行if语句,否则执行block语句。

语法:

if(condition1)  
//code to be executed if condition1is true  
elsif (condition2)  
//code to be executed if condition2 is true  
else (condition3)  
//code to be executed if condition3 is true  
end

流程示意图如下所示 -

img

示例代码 -

a = gets.chomp.to_i   
if a <50   
  puts "Student is fail"   
elsif a >= 50 && a <= 60   
  puts "Student gets D grade"   
elsif a >= 70 && a <= 80   
  puts "Student gets B grade"   
elsif a >= 80 && a <= 90   
  puts "Student gets A grade"    
elsif a >= 90 && a <= 100   
  puts "Student gets A+ grade"    
end

将上面代码保存到文件:if-else-if-statement.rb中,执行上面代码,得到以下结果 -

25
Student is fail

80
Student gets B grade

4. Ruby三元语句

在Ruby三元语句中,if语句缩短。首先,它计算一个表达式的truefalse值,然后执行一个语句。

语法:

test-expression ? if-true-expression : if-false-expression

示例代码

var = gets.chomp.to_i;   
a = (var > 3 ? true : false);    
puts a

执行上面代码,得到以下结果 -

Ternary operator
5
2

case语句

在Ruby中,使用’case‘代替’switch‘关键字,以及使用’when‘代替’case‘关键字。 case语句将一个语句与多个条件进行匹配,就像其他语言中的switch语句一样。

语法:

case expression  
[when expression [, expression ...] [then]  
   code ]...  
[else  
   code ]  
end

代码示例:

print "Enter your day: "   
day = gets.chomp   
case day   
    when "2"   
      puts '穿红色和白色?'   
    when "3"   
      puts 'Wear Green'   
    when "4"   
      puts 'Wear Yellow'   
     when "5"   
      puts 'Wear White'   
     when "6"   
      puts 'Wear Black'   
    else   
      puts "Wear Any color"   
end

执行上面代码,得到以下结果 -

Enter your day: 3
Wear Any color

Enter your day: 2
穿红色和白色?

Enter your day: 3
Wear Green

Enter your day: 5
Wear White

for循环

语法:

for variable [, variable ...] in expression [do]  
   code  
end

1. Ruby使用for循环遍历范围

代码示例:

puts "输入一个数字:"
a = gets.chomp.to_i   
for i in 1..a do   
  puts i   
end

执行上面代码,得到以下结果 -

输入一个数字:
8
1
2
3
4
5
6
7
8

2. Ruby使用for循环遍历数组

代码示例:

x = ["Blue", "Red", "Green", "Yellow", "White", '五颜六色']   
for i in x do   
  puts i   
end

将上面代码保存到文件:for-loop-arrays.rb中,执行上面代码,得到以下结果 -

Blue
Red
Green
Yellow
White
五颜六色

while/do...while循环语句

语法:

while conditional [do]  
   code  
end
Ruby

while循环流程示意图如下 -

img

代码示例:

#!/usr/bin/ruby   

puts "Enter a value:" 
x = gets.chomp.to_i   
while x >= 0    
  puts x   
  x -=1   
end
Ruby

将上面代码保存到文件: while-loop.rb 中,执行上面代码,得到以下结果 -

F:\worksp\ruby>ruby while-loop.rb
Enter a value:
8
8
7
6
5
4
3
2
1
0

F:\worksp\ruby>
Shell

Ruby do…while循环

Ruby do...while循环遍历程序的一部分几次。 它与while循环语法非常相似,唯一的区别是do...while循环将至少执行一次。 这是因为在while循环中,条件写在代码的末尾。

语法:

loop do   
  #code to be executed  
  break if booleanExpression  
end

代码示例:

loop do   
  puts "Checking for answer: "   
  answer = gets.chomp   
  if answer == '5'   
    puts "yes, I quit!"
    break   
  end   
end

执行上面代码,得到以下结果 -

Checking for answer:
1
Checking for answer:
2
Checking for answer:
3
Checking for answer:
4
Checking for answer:
5
yes, I quit!

until循环语句

Ruby until循环运行直到给定的条件求值为true。 当条件成立时,它退出循环。 它正好与while循环相反,while循环运行直到给定的条件评估求值为false

until循环允许您编写更可读和逻辑的代码。

语法:

until conditional  
   code  
end

代码示例:

i = 1   
until i == 10   
    print i*10, "\n"   
    i += 1   
end

执行上面代码,得到以下结果 -

10
20
30
40
50
60
70
80
90

break/next语句

Ruby break语句用于终止循环。 它主要用于在while循环中,在条件为真时执行语句,break语句一般用于终止循环。

break语句一般是在循环中调用的。

语法:

break
Ruby

代码示例:

#!/usr/bin/ruby   

i = 1   
while true   
    if i*5 >= 25   
        break   
    end   
    puts i*5   
    i += 1   
end
Ruby

将上面代码保存到文件: break-statment.rb 中,执行上面代码,得到以下结果 -

F:\worksp\ruby>ruby break-statment.rb
5
10
15
20

F:\worksp\ruby>
Shell

Ruby next语句

Ruby next语句用于跳过循环的下一个迭代。 执行下一条语句后,不再执行进一步的迭代。
Ruby中的下一条语句等同于其他语言的continue语句。

语法:

next

示例代码:

for i in 1...12   
   if (i % 3 ==0) then   
      puts "Skip over ... "
      next   
   end   
   puts i   
end

执行上面代码,当i除以3等于0时,就会跳过后面的打印语句,得到以下结果 -

1
2
Skip over ...
4
5
Skip over ...
7
8
Skip over ...
10
11

redo/retry语句

redo/retry语句

Ruby redo语句用于重复循环的当前迭代。 redo语句在没有访问循环的条件的情况下进行。

redo语句在一个循环中使用。

语法:

redo
Ruby

代码示例:

#!/usr/bin/ruby   

array=[1,2,3,4,5]
array.each do |i|
    puts i
    i+=1
    redo if i==3
end#输出:1 2 3 3 4 5
Ruby

将上面代码保存到文件: redo-statment.rb 中,执行上面代码,得到以下结果 -

F:\worksp\ruby>ruby redo-statment.rb
1
2
3
3
4
5

F:\worksp\ruby>
Shell

Ruby retry语句

Ruby retry语句用于从一开始重复整个循环迭代。

retry语句在循环中使用。

语法:

retry

示例代码

n = 0
begin
  puts 'Trying to do something?'
  raise 'oops'
rescue => ex
  puts ex
  n += 1
  retry if n < 3
end
puts "Ok, I give up"

执行上面代码,得到以下结果 -

Trying to do something?
oops
Trying to do something?
oops
Trying to do something?
oops
Ok, I give up

注释

Ruby注释是程序中不可执行的行。这些行会被解释器忽略,因此它们在执行程序时不执行。注释由程序员编写,以解释他们的代码,以便其他看代码的人会更好地理解这此编写的代码。

Ruby的注释类型 -

  • 单行注释
  • 多行注释

1. Ruby单行注释

Ruby单行注释用于一次只注释一行。它们以字符开头。

语法:

#This is single line comment.

代码示例:

#!/usr/bin/ruby   

i = 10  #Here i is a variable.   
# 这是另外一行注释..
puts i

将上面代码保存到文件: oneline-comment.rb 中,执行上面代码,得到以下结果 -

10

2. Ruby多行注释

Ruby多行注释用于一次注释多行。 它们使用=begin开始并在行尾以=end为终点。

=begin  
    This  
    is  
    multi line  
    comment  
    line 1
    another line...
=end

代码示例:

=begin   
we are declaring   
a variable i   
in this program   
=end   
i = 10   
puts i

将上面代码保存到文件: muline-comment.rb 中,执行上面代码,得到以下结果 -

10
如果觉得本文对您有所帮助,可以支持下博主,一分也是缘?
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
隐藏
换装