LoginSignup
12
0

More than 3 years have passed since last update.

【Week 6】my_help, ruby_second

Last updated at Posted at 2020-11-25

はじめに

マルチスケールシミュレーション特論]の講義メモです.講義メモのインデックスはコチラ

今回の参考資料はチャート式ruby-appendix-I(bash + emacs)チャート式ruby-II(variable and method)です.

チャート式 Ruby

参照記事はコチラ

variable

前回の講義ではコマンドライン引数として受け取った文字を ARGV[0] を用いて出力するプログラム hello_name.rb を作成した.

(参考) hello_name.rb

puts "Hello #{ARGV[0]}."

今回は受け取った引数 ARGV[0] を name という変数 (variable) に代入し,出力するプログラムを作成する.

まずは変数 name を用意する必要がある.Ruby では変数の型宣言の必要がない(Python も然り)ため,変数は以下のように定義できる.

name = ARGV[0]

コマンドライン引数を変数に代入し,出力するプログラム name_variable.rb を作成したい.はじめに変数 name に "Rudy" を代入して,出力するプログラムを作成する.

name = "Rudy"
puts "Hello #{name}."

次に ARGV[0] を変数 name に代入し,出力するプログラムにリファクタリングする.

name = ARGV[0]
puts "Hello #{name}."

これを実行すると

> ruby name_variable.rb Hiroki.
Hello Hiroki.

期待どおり受け取った引数を変数に代入し,出力するプログラムを作成できた.

method

これまでの講義で引数や変数を用いて "Hello xxx." を出力するプログラムを作成してきたが,これらをメソッド化したい.

Rubyではメソッド (method) を定義することで,関数やプロシージャなどを実装できる.メソッドは以下のように定義できる.

(参考)メソッドの例

def hello(name)
  p name
end

name_variable.rb を参考に,"Hello xxx." を出力するメソッドをプログラム hello_method.rb に作成する.

まずはじめに hello メソッドを作成・呼び出してみる.

def hello (name)
end

name = ARGV[0]
hello (name)

メソッド内に処理を書いていないので勿論実行しても何も出力されない.メソッドの引数を出力するように以下のようにメソッドに追記する.

def hello (name)
  puts name
end

name = ARGV[0]
hello (name)

これを実行すると

> ruby hello_method.rb Rudy
Rudy

コマンドラインで受け取った引数を出力するメソッドを作成できた.あとは出力に文字列を加えればよいので,

def hello(name)
  puts "Hello #{name}."
end

name = ARGV[0]
hello(name)

実行すると

> Ruby hello_method.rb Rudy
Hello Rudy.

期待どおり "Hello xxx." を出力する hello メソッドを作成できた.

TDD

まずTDDとは…

Test Driven Development: テスト駆動開発

以下の手順でコーディングを行う

  • テストを作る (test)
  • エラーを出す (red)
  • エラーをなくす (green)
  • code を brush up する (refactoring)

最終目標は 動く綺麗なコードを作る こと,らしいです.自分もどちらかというと TDD に近いスタイルだった.

折角なので hello_method.rb をリファクタリングしていく.まずはメソッド名が hello と何をするメソッドか分かりづらいので, puts_hello に変更する.

def puts_hello name
  puts "Hello #{name}."
end

name = ARGV[0]
puts_hello name

続いて command の option に名前を指定し忘れた場合,問い合わせるようにしたい.追加する処理は以下のようになる.

name = ARGV[0]
if name == nil
  puts "What\'s your name?"
  name = gets.chomp
end

上記の処理を gets_name メソッドとしてプロシージャにまとめる.hello_method.rb をリファクタリングした後のプログラム hello.rb は以下のとおり.

def puts_hello name
  puts "Hello #{name}."
end

def gets_name
  name = ARGV[0]
  if name == nil
    puts "What\'s your name?"
    name = gets.chomp
  end
  return name
end

name = gets_name
puts_hello name

htllo_method.rb と比較して,よりまとまりのある分かり易いプログラムになった.

Ruby 開発周辺情報

参照記事はコチラ

myhelp org-mode

bash や emacs については前回の講義メモにまとめています.

【Week 5】bash, ruby_first

また,org-mode によるCUIでのメモについて,詳しい内容は以下の記事に随時追加していきます.

【Memo】Emacs Org-Mode

次回の講義内容 <2020-11-04 Wed>

次回の講義は

だそうです.


  • source ~/grad_members_20f/members/e79a93e5b7b1/posts/class/c6_20201028.org
12
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
12
0