ファイルタイプの分類をとりあえず3パターン以上ならcase
文しか思い浮かばず、下記のように記述していた。ただ、見た目はわかりやすいけど、冗長でなんだんかなーと思っていた。
# case-when def replace_file_type(file_name) p File.ftype(file_name) case File.ftype(file_name) when 'file' '-' when 'directory' 'd' when 'link' 'l' end end
rubocopを実施するとハッシュで書けと指摘があった。下のように書き直すことができた。めちゃスッキリした😄
# ハッシュで返す def replace_file_type(file_name) { file: '-', directory: 'd', link: 'l' }[File.ftype(file_name).interm] end
注意としては、上記はハッシュのシンボルになっているので、ftype
メソッドで取得したタイプをシンボル変換するために、interm
メソッドにかける必要がある。
もう一個case
で冗長に書いていたところがあった。
# case-when def replace_permission(permission) case permission when 0 '---' when 1 '--x' when 2 '-w-' when 3 '-wx' when 4 'r--' when 5 'r-x' when 6 'rw-' when 7 'rwx' end end
ハッシュのヒントから、『0~7に意味がある(権限を示す)から、配列の要素番号と紐付けて表現しちゃえば良くね?』と考えて、下記のように修正してみた。個人的にとてもスッキリかけたと思った😄
# 配列でやってみた def replace_permission(permission) permission_array = ['---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx'] end
ただ、上のコードには改善の余地があって、メンターさんに『変わらない値なら定数化してしまったほうがいいよ』確かにその通りで、定数化すれば変更されることないし、メソッドを呼び出すこともないしでいいことばかりだと思いました🧐というわけで、下記のようにしました。
# 配列でやってみた(定数化) PERMISSION_ARRAY = ['---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx'].freeze