はじめに
マルチスケールシミュレーション特論]の講義メモです.講義メモのインデックスはコチラ.
今回の参考資料はチャート式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 については前回の講義メモにまとめています.
また,org-mode によるCUIでのメモについて,詳しい内容は以下の記事に随時追加していきます.
次回の講義内容 <2020-11-04 Wed>
次回の講義は
だそうです.
- source ~/grad_members_20f/members/e79a93e5b7b1/posts/class/c6_20201028.org