以下是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. java.util.regx Demo

    import java.util.regex.Matcher;import java.util.regex.Pattern; public class TestRegex { public stati ...

  2. Linux C 程序 字符串运算符-表达式(TWO)

    1.字符串常量 双引号"" :eg:"china"   ,字符串在存储的时候会以一个\0为结束标志.2.符号常量  ,给常量取一个名字. #include< ...

  3. C#基础(七)——静态类与非静态类、静态成员的区别

    静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例 ...

  4. 【原】yield的最基本用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Itca ...

  5. 【原】.Net之美学习笔记-第1章-1.1.1值类型

    结构还有一个特性:调用结构上的方法前,需要对其所有的字段进行赋值.

  6. 前端资源多个产品整站一键打包&包版本管理(四)—— js&css文件文件打包并生成哈希后缀,自动写入路径、解决资源缓存问题。

    问题: 当我们版本更新的时候,我们都要清理缓存的js跟css,如何使得在网页中不需要手动清理呢? 答案: 生成带有哈希后缀的js跟css文件 1.文件路径 路径中的conf.js 是用于放置全局打包的 ...

  7. RepeatedDNASequences BestTime_to_Buy_and_SellStockIV

    /** * @Author: weblee * @Email: likaiweb@163.com * @Blog: http://www.cnblogs.com/lkzf/ * @Time: 2015 ...

  8. hdu 5510 Bazinga KMP+尺取法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:至多50组数据,每组数据至多500个字符串,每个字符串的长度最长为2000.问最大的下标( ...

  9. Oracle数据库插入图片和读取图片

    package com.basicSql.scroll_page; import java.io.File; import java.io.FileInputStream; import java.i ...

  10. P1631: [Usaco2007 Feb]Cow Party

    还是水题,接近于裸的spfa(个人比较喜欢用spfa,dijkstra不太喜欢用),代码附上 ; type link=^node; node=record t,d:longint; f:link; e ...