以下是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. 责任链模式(Chain of Responsibility Pattern)

    责任链模式:可以为某个请求创建一个对象链.每个对象依序检查此请求,并对其处理,或者把它传给链中的下一个对象. 责任链上的对象负责处理请求,客户只需要将请求发送到责任链上即可,无需关心处理的细节和请求的 ...

  2. Ext 面向对象程序设计 入门篇

    ------ 命名空间 定义:对于类的组织定义方式代码: Ext.namespace("Ext.xgao"); ------ 类实例属性 定义:对于一个实例的特征描述代码: Ext ...

  3. CentOS7 systemctl的使用

    # 查看正在运行的服务 systemctl # 查看某个服务的状态 systemctl status httpd.service # 启动服务 systemctl start  foo.service ...

  4. 第二章 Qt常用工具的介绍

    第二章 Qt常用工具的介绍 (1)No.1 qmake 相信编写过Makefile的开发人员,随着工程中源码的级数递增和以类型.功能.模块组织源码的子目录的增多,都不愿意重复机械地手工编写这个工程管理 ...

  5. jQuery.hhLRSlider 左右滚动图片插件

    /**  * jQuery.hhLRSlider 左右滚动图片插件  * User: huanhuan  * QQ: 651471385  * Email: th.wanghuan@gmail.com ...

  6. 2016041601 - linux上安装maven

    在linux系统中安装maven,个人目前使用ubuntu15.1系统. 要想使用maven,前提条件必须配置好java. 1.检查java信息. 命令:echo $JAVA_HOME 和java - ...

  7. 3.bit-map

    适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下 基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码 扩展:bloom filter可以看做是对bi ...

  8. merge into 和 update 的效率对比

    以前只考虑 merge into 只是在特定场合下方便才使用的,今天才发现,merge into 竟然会比 update 在更新数据时有这么大的改进.其实呢,merge into部分的update和u ...

  9. Windows常用CMD命令

    远程桌面:mstsc 记事本:notepad        写字板:write 计算器:calc IIS重启:iisreset 60秒倒计时关机命令:tsshutdn     15秒关机:rononc ...

  10. iOS 页面间传值 之 单例传值 , block 传值

    ios 页面间传值有许多,前边已经分享过属性传值和代理传值,今天主要说一下单例传值和 block 传值 单例传值:单例模式一种常用的开发的模式,单例因为在整个程序中无论在何时初始化对象,获取到的都是同 ...