以下是2种表达方式一样。

if expression
  code
end
if expression then     #推荐这种形式
  code
end

expression的值不是false或nil,则code块将被执行。

需要注意:1)围绕expressions的圆括号是可选的(而且通常都不用),ruby使用换行符、分号或者关键字then对条件表达式和后续的内容进行分隔

     2) 必须以end 作为结束。

例子

if data      #if array exist
  data << x   #append x to data
else        
  data = [x]   #create a new array, that holds the value
end        #this is the end of the conditional
if expression_1 then
  code1
elseif expression_2
  code2
.....
elseif expression_N
  code3
else
  code
end

例子 (多种形式,最好使用同一种代码规范)个人认为then最好

if  x==1
  name = "one"
elseif x==2
  name = "two"
elseif x==3 then name ="three"
elseif x==4; name = "four"
else
  name = "many"
end

5.1.3 返回值

在大多数语言中if条件式是一个语句,但在ruby中一切都是表达式,包括那些被称为语句的控制结构。

if“语句”的返回值:为被执行代码中最后一个表达式的值,若没有任何执行代码则返回nil

name = if  x==1    then  "one"
    elseif x==2 then "two"
    elseif x==3 then "three"
    elseif x==4; then "four"
    else "many"
    end

5.1.2 修饰符if

code if expression

puts message if message    #if message not nil, or false, print  it

if修饰符的优先级很低,比赋值操作符还低

y = x.invert  if x.respond_to ? :invert   #if修饰符作用与整个赋值表达式,如果x没有名为invert的方法,那么不会有任何事情发生。

y = (x.invert  if x.respond_to ? :invert)  #if修饰符仅仅作用与方法调用,如果if没有invert方法,那么该修饰符表达式的值将为nil,然后这个值被赋给y.

ruby编程语言-学习笔记5(第5章 语句和控制结构)的更多相关文章

  1. ruby编程语言-学习笔记4(第4章 表达式和操作符)

    4.6.9 范围  Flip-Flops:  ..和... ..和... 操作符不是基于方法的,无法重定义.(优先级比较低) x+1 .. x*x   #可以认为是x+1 至 x*x 的范围 因为操作 ...

  2. ruby编程语言-学习笔记2(第4章 表达式和操作符)

    对属性和数组元素的赋值 o.m + = 1  ===>o.m = (o.m()+ 1)  # 对 o.m()这个方法的结果+1 对数组元素的赋值也是通过 方法调用来完成. 0.[] = 1 == ...

  3. ruby编程语言-学习笔记3(第4章 表达式和操作符)

    4.6 操作符 了解优先级很重要 位移操作符 (0b1011)<< 1       #   ==> "10110"      11 << 1 = 22 ...

  4. ruby编程语言-学习笔记1

    安装完 ruby ri irb ruby-devel 1. 先来个简单的,写个helloworld  给新手们 (terminal中,# 代表root权限,$ 代表用户权限, 前面的就不写了.) # ...

  5. 【c++ Prime 学习笔记】第5章 语句

    C++提供了一组控制流语句,包括条件执行语句.循环语句.跳转语句. 5.1 简单语句 空语句 ; ,最简单的语句 别漏写分号,也别多写 while(cin>>s && s! ...

  6. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化 学习目标 对Direct 3D编程在 ...

  7. 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回

    <深入Java虚拟机学习笔记>- 第19章 方法的调用与返回

  8. 《深入Java虚拟机学习笔记》- 第16章 控制流

    <深入Java虚拟机学习笔记>- 第16章 控制流

  9. 《深入Java虚拟机学习笔记》- 第17章 异常

    <深入Java虚拟机学习笔记>- 第17章 异常

随机推荐

  1. os.walk获取同级目录具有随机性

    1.在不同机器上,相同内容的目录和文件,os.walk获取结果中路径的先后顺序具有随机性. 2.查看os.walk源码得知,listdir具有随机性. 3.修改该源码,对listdir结果排序后,使得 ...

  2. lsof作用

    lsof 卸载移动存储时经常提示device busy,也可能误删了一个正在打开的文件....  这时候可以试试lsof  lsof简介 lsof(list open files)是一个列出当前系统打 ...

  3. 关于Angular.js Routing 的学习笔记(实现单页应用)

    最近开始学习angular.js,发现angular.js确实很方便,也很强大.在看到 AngularJS Routing and Multiple Views 这一部分的时候,有点乱.现在通过记录一 ...

  4. IT书籍下载汇总--持续更新

    本书单由北北分享,并持续更新,请将该地址加入收藏夹:北北的书单 .badge{float:right;}.list-group-item > .badge + .badge{margin-rig ...

  5. 51nod动态规划-----矩阵取数

    一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值. 例如:3 * 3的方格. 1 3 3 2 1 3 2 2 1 能够获得的最 ...

  6. thinkphp表单上传文件并将文件路径保存到数据库中

    上传单个文件,此文以上传图片为例,上传效果如图所示 创建数据库upload_img,用于保存上传路径 CREATE TABLE `seminar_upload_img` (  `id` int(11) ...

  7. CSS3的position:sticky介绍

    用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如 ...

  8. FolderBrowserDialog(文件夹浏览对话框)

    1.选择数据库目录,在此处不需要新建文件夹,因此屏蔽新建文件夹按钮. C#代码 FolderBrowserDialog df = new FolderBrowserDialog(); //设置文件浏览 ...

  9. Static File Middleware

    [ASP.NET Core] Static File Middleware   前言 本篇文章介绍ASP.NET Core里,用来处理静态档案的Middleware,为自己留个纪录也希望能帮助到有需要 ...

  10. 关于新的man版本出现“无法解析 /usr/share/man/zh_CN/man1/ls.1.gz: 没有那个文件或目录“

    今天学习了下man,有关详细资料参考:http://www.cnblogs.com/hnrainll/archive/2011/09/06/2168604.html toor@door:/usr/sh ...