式と修飾子がある。
成果物
情報源
制御
条件分岐
if
式
if 条件式 [then] 処理 [elsif 条件式] [処理] ... [else] [処理] end
[]
内は省略できるelsif
は複数書ける- 値を返す。通ったルートが最後に実行した式の戻り値を返す
if true; p 'T'; end
if true p 'T' end
if true p 'T' else p 'F' end
if true p 'T' elsif true p 'E' else p 'F' end
x = if true 'T' elsif true 'E' else 'F' end
if
修飾子
p 'T' if true
処理が1行のときif
修飾子が使える。
if
式だと短縮しても以下のようにend
や;
が必要になり冗長。
if true; p 'T'; end
ただ、長すぎたり複雑だとわかりにくくなる。
a = b.each {|i| p i} if true
処理と条件がどちらもシンプルなときだけ使う。
point += 1 if clear?
ググったところif
修飾子を使った「ガード節」という書き方があるらしい。
def make_file # ファイルが存在したら処理中断 return if exist? end
def make_file # ファイルが存在したら例外発生 raise AlreadyExistError if exist? end
Pythonでは以下のように書く。上記のガード式のほうがわかりやすい。結論が最初にあるから。
def make_file(): if file.is_exist(): return
unless
式
unless 条件式 [then] 処理 [else] [処理] end
[]
内は省略できるelsif
は書けない- 値を返す。通ったルートが最後に実行した式の戻り値を返す
unless false; p 'T'; end
unless false p 'T' end
unless false p 'T' else p 'F' end
x = unless false 'T' else 'F' end
unless
修飾子
p 'T' unless false
処理が1行のときunless
修飾子が使える。
unless
式だと短縮しても以下のようにend
や;
が必要になり冗長。
unless false; p 'T'; end
ただ、長すぎたり複雑だとわかりにくくなる。
a = b.each {|i| p i} unless false
処理と条件がどちらもシンプルなときだけ使う。
point -= 1 unless fair_play?
ググったところunless
修飾子を使った「ガード節」という書き方があるらしい。
def open_file # ファイルが存在しないなら処理中断 return unless exist? end
def open_file # ファイルが存在しないなら例外発生 raise NotFoundError unless exist? end
所感
条件分岐についてはcase
-when
やcase
-in
も考慮して、その都度どちらがよいか考えて実装することになりそう。
もしインタフェースが使えるオブジェクト指向言語だったならば多態性も考慮してデザインパターンも考慮していただろう。
はたしてRubyはどうするのがベストなのか。まだまだその領域には到達できそうにない。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- Ruby 3.0.2