[ruby koans] about_condition_statements 条件语句

[ruby koans] about_condition_statements 条件语句

if-else 语句用作值

  • 所有的ruby 语句都会返回一个值,ruby 也不例外

  • 如果没有分支会执行到,返回的值为 nil


注:编程语言在 statement 上分为两个阵营,

  • 一方将语句分成 StatementExpression, C/C++, java, python 等大多数主流语言均属于这个阵营

    • Statement 没有返回值,是一系列的行为描述

    • Expression 有返回值

  • 另一方认为 Statement 和 Expression 是没有区别的,比如ruby,

    composingprograms 对这个概念有相关描述,composingprograms 是一个根据 SICP 改编的课程,SICP 是基于 Lisp , composingprograms 是基于 python

SICP的相关资料:

https://mitpress.mit.edu/sicp/

https://github.com/DeathKing/Learning-SICP

Structure and Interpretation of Computer Programs, 2e: Top

OCW-6-001-structure-and-interpretation-of-computer-programs-spring-2005


 

    value = if false
              :true_value
            else
              :false_value
            end
    assert_equal :false_value, value
​
    # NOTE: Actually, EVERY statement in Ruby will return a value, not
    # just if statements.
    
    def test_if_statements_with_no_else_with_false_condition_return_value
    value = if false
              :true_value
            end
    assert_equal nil, value
  end

if语句修饰符(if statement modifiers)

  def test_if_statement_modifiers
    result = :default_value
    result = :true_value if true
​
    assert_equal :true_value, result
  end

unless 语句

unless 也可以用作修饰符,与if类似,只是对条件判断取反

  def test_unless_statement
    result = :default_value
    unless false    # same as saying 'if !false', which evaluates as 'if true'
      result = :false_value
    end
    assert_equal :false_value, result
  end
​
  def test_unless_statement_evaluate_true
    result = :default_value
    unless true    # same as saying 'if !true', which evaluates as 'if false'
      result = :true_value
    end
    assert_equal :default_value, result
  end
​
  def test_unless_statement_modifier
    result = :default_value
    result = :false_value unless false
​
    assert_equal :false_value, result
  end

break 语句

break 语句同样可以返回值

  def test_break_statement
    i = 1
    result = 1
    while true
      break unless i <= 10
      result = result * i
      i += 1
    end
    assert_equal 3628800, result
  end
​
  def test_break_statement_returns_values
    i = 1
    result = while i <= 10
      break i if i % 2 == 0
      i += 1
    end
​
    assert_equal 2, result
  end

next语句

  • 相当于 C语言中的 continue ,表示在循环中跳过这一次

  • next if (condition) 表示 当条件成立时,跳过这一次

  def test_next_statement
    i = 0
    result = []
    while i < 10
      i += 1
      next if (i % 2) == 0
      result << i
    end
    assert_equal [1,3,5,7,9], result
  end

times语句

n*times do something end 表示动作执行n次

  def test_times_statement
    sum = 0
    10.times do
      sum += 1
    end
    assert_equal 10, sum
  end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值