【ruby】getoptsと条件分岐
はじめに
初ブログです。
みなさん、「getopts」これなんて読んでますか?
私は「ゲットップツ」?と思っていますが定かではありません。
ということで今回は、「getopts」と「キーワード引数を使ったメソッド」を組み合わせた条件分岐の書き方を知ったので、記事に残しておこうと思いました。
getopts と 条件分岐
require 'optparse' option = ARGV.getopts('abc') # getopts : 引数をパース(分析)した結果を、Hash として返す。 p option # sample.rb -a => {"a"=>true, "b"=>false, "c"=>false} p option # sample.rb -ab => {"a"=>true, "b"=>true, "c"=>false} p option['a'] # sample.rb -a => true p option['a'] # sample.rb -b => false p option['b'] # sample.rb -ab => true def xxx_or_yyy(option: false) # デフォルト値はfalse('yyy')を返す。 option ? 'xxx' : 'yyy' # ・・① end p option['a'] # sample.rb -a => true # ・・② p xxx_or_yyy(option: option['a']) # オプションaが選択されるとtrue(②)、①により'xxx'を返す。aを含まないオプションbやcが選択されたときはデフォルト値であるfalse('yyy')を返す。
その他
getoptsではない書き方
def parse_option(argv) # メソッド定義とのきは仮引数 argv_option = {} OptionParser.new do |opt| opt.on('-a') { |v| argv_option[:a] = v } opt.on('-b') { |v| argv_option[:b] = v } opt.on('-c') { |v| argv_option[:c] = v } opt.parse!(argv) end argv_option end parse_option(ARGV) # メソッド呼び出しでの引数は実引数
キーワード引数に = を使う書き方もある
def xxx_or_yyy(option = false) option ? 'xxx' : 'yyy' end p xxx_or_yyy(option = option['a'])
三項(条件)演算子(?:)を使った条件分岐
option ? 'xxx' : 'yyy' # 以下のif文を書き換えたもの。 if option 'xxx' else 'yyy' end
このようにシンプルなif文は1行で書くことができる。読みにくくならない範囲で使う。
elseやelsifがないパターンのif文は、後置ifを使って1行で書くことが多い。
xxx if 条件 # 条件がtrueのときxxxが実行される。