LoginSignup
3
0

More than 3 years have passed since last update.

第9回

Posted at

!Ubuntu-20.04.1 !ruby-2.7.1p83

これは講義用のまとめサイトです。見た人は是非LGTMを押しといてください。

やったこと

  • assert_equal
  • rubular

assert_equal

まずassert_equalとは「イコールかそうでないか」を確かめる関数。

お題

1==1を判定する

一番シンプルな解法

p 1==1

rubyの場合この1行だけでtrueが返ってくる。簡単だ。
これをメソッド化する

def assert_equal(expected, result)
 return expected == result
end
p 1
p assert_equal(1,1)
p 2
p assert_equal(1,2)

すると

> 1
> true
> 2
> false

と、ちゃんと判定されている

文字に色を付ける

本筋から外れますが、出力に色を付けてみることができるそうな

require 'colorize'
def assert_equal(expected,result)
  if expected == result
    puts 'true'.magenta
  else
    puts 'false'.cyan
  end                                                                                          
end
p 1
p assert_equal(1,1)
p 2
p assert_equal(1,2)

を実行すると

> 1
> true
> nil
> 2
> false
> nil

ってqiitaだと色は分からんがな・・・色は付いたけどnilが出力されてる。ということはどこかで何かが代入されていない。何事かと思ったらassert_equalの先頭のpを除けたらnilは消えた。colorize周りで何かが起きたのか?

richな出力

・引数で取ってきたexpected, resultの値を出力
・true、false時のメッセージを出す。
を実現する

require 'colorize'
def assert_equal(expected,result)
  p ['expected',expected]
  p ['result',result]
  if expected == result
    puts 'succeeded in assert_equal'.magenta
  else
    puts 'failed in assert_equal'.cyan
  end
end
assert_equal(1,1)
assert_equal(1,2)

これは簡単で、入力を表示するように関数内に記述するのみ。メッセージは文言を変えるだけ。#+begin_src ruby> ["expected", 1]> ["result", 1]> succeeded in assert_equal> ["expected", 1]> ["result", 2]> failed in assert_equal#end_src

関数を複数作って個別で実行できるように

assert_not_equalという関数も作っておこう

def assert_not_equal(expected,result)
  p ['expected',expected]
  p ['result',result]
  if expected == result
    puts 'failed in assert_not_equal'.magenta
  else
    puts 'succeeded in assert_not_equal'.cyan
  end
end
#end_src
ついでにassert_equalassert_not_equalで重複してる部分があるんで別の関数に
#begin_src_ruby
def puts_vals(expected, result)
  p ['expected',expected]
  p ['result',result]
end

これを別のスクリプトから呼び出したい。つまり、別のスクリプトで

assert_equal(3,2)

と書き込んで置いたら、3と2だけを比較してくれる、というようなのを作る
こういうときは

if $PROGRAM_NAME == __FILE__
  assert_equal(1,1)
  assert_equal(1,2)
  assert_not_equal(1,2)
  assert_not_equal(1,3)
end

としておくと、このコード書かれているファイルのファイル名(FILE)が動かしてるファイル($PROGRAM_NAME)と一致したら実行する、というもの。別ファイルからこのファイルを呼び出したときに、1と2なんかが比較されずに済む
別にファイルを作る

require './assert_equal'

assert_equal(3, 2)
assert_not_equal('MO_data', 'MO_date')

として実行すると#+begin_src rubyexpected :: 3result :: 2failed in assert_equal.expected :: MO_dataresult :: MO_datesucceeded in assert_not_equal.#end_srcとちゃんと判定されてる。

参考記事

チャート式ruby-IV(assert_equal)


  • source ~/MasahiroOba/grad_members_20f/members/MasahiroOba/chapter9.org
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0