我的导师,曾经对我说过,常规编程语言大抵不过顺序条件循环

接下来以Ruby为例,简单说说

控制语句

控制语句能让程序在某种条件下,改变执行顺序,或者只执行某一部分。

控制语句的分类

控制语句大致可以分成一下几类。

  • 顺序控制:按照程序的编写,从头到尾执行
  • 条件控制:若某条件成立,则执行ОО,否则执行ХХ。
  • 循环控制:在某条件成立之前,反复执行ОО。
  • 异常控制:发生某种异常时,执行ОО。
  • 顺序控制是程序最常见的处理方式。若不做特殊处理,程序会按照代码的编写顺序执行。
  • 条件控制是根据条件执行分之处理。如果没有满足条件,程序会跳过某部分处理,继续执行其他处理。 在Ruby中,可以使用条件判断语句有ifunlesscase等。
  • 异常控制有些特殊。程序执行是,意料之外的错误发生后,就会跳出正在执行的那部分的那部分程序,然后执行其他地方的程序,使程序能继续执行下去,或根据实际情况,有事也会让程序马上结束。

接下来,我们逐步介绍

1.条件判断:ifthenend

if 语句用于根据条件变化,改变程序的行为。if 语句的语法如下所示:

if 条件 then
 条件成立时执行的处理
end

条件一般是指指能返回 true 或者 false 的表达式。例如比较两个值,相同则返回 true,不同则返回 flase,这样的表达式可作为条件。

我们在比较数值的大小时,会用到等号、不等号等运算符。在 Ruby 中,= 已经被用作赋值运算了,因此判断是否相等的运算符要用两个并列等号== 来代

替=。另外,≤和≥运算符在 Ruby 中分别用 <= 和 >= 来替代。

条件表达返回的结果为 true 或者 false,true 表示条件成立,false 表示条件不成立。

p ("Ruby" == "Ruby") #=> true
p ("Ruby" == "Rubens") #=> false

如果希望对条件成立和条件不成立时采取不同的处理,我们可以使用 else 关键字。

if 条件 then
条件成立时执行的处理
else
条件不成立时执行的处理
end
# encoding:utf-8
=begin
在命令行指定多个脚本参数
=end
# 使用ARGV 后,程序需要使用的数据就不必写到代码中
# 同事抽取数据、保存数据等普通的数组操作对于ARGV都是适用的
# 从参数中获得的#都是字符串,可以用to_i字符串转整数
#puts "首个参数:#{ARGV[0]}"
#puts "第二个参数:#{ARGV[1]}"
#puts "第三个参数:#{ARGV[2]}"
num0 = ARGV[0].to_i
num1 = ARGV[1].to_i puts "#{num0}+#{num1}=#{num0+num1}"
puts "#{num0}-#{num1}=#{num0-num1}"
puts "#{num0}*#{num1}=#{num0*num1}"
if (ARGV[1].to_i)!=0 then
puts "#{num0}/#{num1}=#{num0/num1}"
else
puts "请重新输入非零除数\n"
end

2.循环

有时,我们会遇到希望多次循环执行同样的处理的情况。下面,我们来介绍两种执行循环处理的方法。

while 语句————

执行循序时用到的一种基本语句。同样地,do关键字可以省略。

while 循环条件 do
希望循环的处理
end

eg.

i=1
while i <= 10
print i, "\n"
i=i+1
end

times方法

循环次数如果已确定,使用times方法会更加简单。

循环次数.times do
希望循环的处理
end

eg:输入10行"All work and no play makes Jack a dull boy."

100.times do
print "All work and no play makes Jack a dull boy.\n"
end

times 方法称为迭代器(iterator)。迭代器是Ruby的一个特色功能,聪迭代器的英文拼写我们可知,迭代器表示的是循环(iterate)的容器(-or)。类似的运算符(operator)也就是(operate)的容器(-or),等等。总之,迭代器就是指用于执行循环处理的方法。

PS:Ruby除了tiems方法外,还提供了很多迭代器,典型的有each方法。其语法如下:

数组.each do |变量|
希望循环的处理
end

each后面在do~end之间的部分称为块(block)。因此each这样的方法也可以称为带块的方法。我们可以吧多个需要处理的内容合并后写到块里面。

块的开始部分为|变量|。each方法会把数组元素逐个拿出来,赋值指定的|变量|,那么块里面的方法就可以通过访问该变量,实现循环遍历数组的操作。

实际操作,按顺序输出数组names的元素

 $ irb --simple-prompt
>> names = ["张三","李四","王五","赵六"]
=> ["张三", "李四", "王五", "赵六"]
>> names.each do |n|
?> puts n
>> end
张三
李四
王五
赵六
=> ["张三", "李四", "王五", "赵六"]

每循环一次,就会把当前的数组元素赋值给变量|n|。

散列

散列(hash)也是一个程序里常用到的容器。散列是键值对(key-value pair)的一种数据结构。在 Ruby 中,一般是以字符串或者符号(Symbol)作为键,来保存对应的对象

ps:“散列(hash)也是一个程序里常用到的容器。散列是键值对(key-value pair)的一种数据结构。在 Ruby 中,一般是以字符串或者符号(Symbol)作为键,来保存对应的对象”

sym = :foo 	# 表示符号":foo"
sym1= :"foo" # 意思同上

符号能实现的功能,大部分字符串也能实现。但像散列键这样只是单纯判断“是否相等”的处理中,使用符号会比字符串比较更加有效率,因此在实际编程中我们也会时常用到符号。

另外,符号与字符串可以互相任意转换。对符号使用 to_s 方法,则可以得到对应的字符串。反之,对字符串使用 *to_sym *方法,则可以得到对应的符号。

eg

$ irb --simple-prompt
>> sym = :foo
=> :foo
>> sym.to_s # 将符号转换为字符串
=> "foo"
>> "foo".to_sym # 将字符串转换为符号
=> :foo

“ 散列的创建

创建散列的方法与创建数组的差不多,不同的是,不使用 [],而使用{}把创建的内容括起来。散列用=>来定义获取对象时所需的键(key),以及键相对应的对象(value)。

address = {:name => "高桥", :pinyin => "gaoqiao", :postal => "1234567"}

将符号当做键来使用时,还可以如下写

address = {name: "高桥", pinyin: "gaoqiao", postal: "1234567"}

Ruby探微初步的更多相关文章

  1. memcache的内存管理探微

    slab分配器:http://blog.csdn.net/luotuo44/article/details/42737181 hash操作  :http://blog.csdn.net/luotuo4 ...

  2. 【JavaScript】JavaScript Promise 探微

    http://www.html-js.com/article/Promise-translation-JavaScript-Promise-devil-details 原文链接:JavaScript ...

  3. Spark SQL  inferSchema实现原理探微(Python)

    使用Spark SQL的基础是“注册”(Register)若干表,表的一个重要组成部分就是模式,Spark SQL提供两种选项供用户选择:   (1)applySchema     applySche ...

  4. Spark SQL inferSchema实现原理探微(Python)【转】

    使用Spark SQL的基础是“注册”(Register)若干表,表的一个重要组成部分就是模式,Spark SQL提供两种选项供用户选择:   (1)applySchema     applySche ...

  5. Git使用教程与基本原理和Sourcetree基本使用探微

    什么是GIT Git是一个强调速度的分布式版本控制软件和源代码管理系统(SCM,source code management).Git最初是由Linus Torvalds为内核开发而设计的管理软件.自 ...

  6. 如何在Ruby中编写微服务?

    [编者按]本文作者为 Pierpaolo Frasa,文章通过详细的案例,介绍了在Ruby中编写微服务时所需注意的方方面面.系国内 ITOM 管理平台 OneAPM 编译呈现. 最近,大家都认为应当采 ...

  7. Ruby 定时任务之一(初步尝试)

    最近工作需要用到定时任务.原来写java的时候也用到过类似的Scheduler的功能. Ruby语言中也有同样功能的工具.rufus-scheduler.下面介绍一下rufus-scheduler. ...

  8. 书单.md

    0823 John Hoskin, An Ilustrated History of Thailand.Asia Books Co., Ltd.2015 0729 Gerald Graff, Cath ...

  9. (转) ICML2016 TUTORIAL参会分享

    ICML2016 TUTORIAL参会分享 本文转自: https://mp.weixin.qq.com/s?__biz=MzI3MDE4NTk4MQ==&mid=2658399541& ...

随机推荐

  1. CSS动画基础知识

    CSS动画就是通过CSS (Cascading Style Sheet,层叠样式表)代码搭建的网页动画.它允许设计师和开发人员通过编辑网站的CSS代码来添加页面动画,从而轻松取代传统动画图片或flas ...

  2. 【笔记】 springCloud--Alibaba--服务注册和服务发现

    接着上一次的nacos初步讲解和安装 任意门:https://www.cnblogs.com/Yangbuyi/p/13479767.html 如果启动失败的话 上一篇也是讲解过的. 本文章开始服务注 ...

  3. 笔记:Linux下软件的安装、CentOS更新yum源、LAMP环境搭建、kali软件管理

    一.Linux下软件的安装 方式:yum源 / rpm /源码安装 1.yum:(帮助管理员解决依赖关系) yum是通过分析rpm的包头数据后,根据各种软件的相关性质做出属性相对应的解决方案,然后可以 ...

  4. IntelliJ IDEA中如何再次调出springboot的依赖窗口

    原文链接:https://blog.csdn.net/qq_38138069/article/details/102528587 IDEA中如何再次调出springboot的依赖窗口,随时可以根据喜好 ...

  5. centos7上借助于xargs快速查询并卸载rpm软件

    在centos上卸载某些软件的时候,如果查询的软件包比较多,可以考虑使用xargs,边查询边卸载 如:下面在查询mysql包时候,将查询结果通过管道传送给xargs,然后使用rpm -e --node ...

  6. 蓝牙RFCOMM通信

    最近需要在某个开发板上面通过蓝牙和手机蓝牙连接,并通过RFCOMM通信.还没有做过蓝牙RFCOMM相关工作,因此先在linux PC上面调试一下流程,并在此记录调试过程. 一.说明 RFCOMM协议基 ...

  7. python中a, b = a, a + b这条语句是如何执行的?

    a,b=b,a+b,这条语句在"理解"上还是与C语言有些差别的.在Python中,可以做下面的方式理解:首先,把等号右边的算式分别算完再说,然后按照一一对应的关系把值赋给等号左边的 ...

  8. edge 修改链接打开方式

    我目前的edge版本是 Version 84.0.522.63 (Official build) (64-bit) 每次点击链接, 都是默认在原页面打开新标签, 不符合过往习惯. 修改方式 打开控制面 ...

  9. go微服务系列(四) - http api中引入protobuf

    1. protobuf相关依赖安装 2. 改造之前的client 2.1 新建proto文件 2.2 运行protoc命令生成go文件 2.3 然后把原来的map修改成具体的类型就可以了 3. 处理j ...

  10. Jeecg-Cloud学习之路(一)

    首先,Spring-Cloud目前是行业的潮流,貌似不会就落后了,笔者为了不脱离大部队只能深入学习一下了. 其次.跳槽到一家公司,给公司推荐了Jeecg-Boot的开发平台,那么为了后面扩展为clou ...