Lint
プログラムの静的解析ツール。
コードを分析して問題点を洗い出して、文法上の誤りの他バグの原因となり得る記述も教えてくれます。
複数の種類があります。
deno(ディノ)
Node.js開発者が制作したJavaScript実行環境。
開発に便利な機能が標準搭載されているとのこと。
JavaScript実行環境「Deno」とは?特徴やNode.jsとの違いを解説
paramでは外部とのやり取りが生じているケースがある
今日の一番の引っ掛かりはここでした。
Rspecを書く際に、ユニークなidに対して、意図しない文字列を渡すテストを書くことに疑問を覚えました。
質疑を通して腑に落ちたのは、今回そのidに対してはparamが渡されていたこと。
例えば、オプションを指定してパスヘルパーでURLを作成した場合、オプションはURLに出力されます。
それを検索窓から書き換えてしまえば、プログラムへのアクセスができる可能性があります。
そのため、不正な値を受け付けないこととそのテストが必要でした。
練習:str型のデータから有効な値のみ取り出してarryデータを作る
"2,2,6,弐,⑧,0,,-5,03,8,Ⅳ"
上記から半角数字のみを取り出して配列データにします。
0から始まる整数は除外します。
文字列データからマッチする文字を配列として取り出すメソッドとしてはscanが使えます。
instance method String#scan Ruby 3.2 リファレンスマニュアル
抽出したい部分に対しては正規表現を使います。
/\b[1-9]\d*\b/
\b
は単語境界を示します。[1-9]
は1から9までの数字を表します。つまり、0から始まる数字を排除します。\d*
は0回以上の数字を表します。つまり、複数桁の整数も対応します。- 最後の
\b
は再度単語境界を示します。
irbを使って意図した結果が出力されるか確かめます。
irb> "2,2,6,弐,⑧,0,,-5,03,8,Ⅳ".scan(/\b[1-9]\d*\b/)
=> ["2", "2", "5", "8"]
重複はバグを生む可能性があり好ましくないので、除外するようuniqメソッドを適用。
irb> "2,2,6,弐,⑧,0,,-5,03,8,Ⅳ".scan(/\b[1-9]\d*\b/).uniq
=> ["2", "5", "8"]
instance method Array#uniq | Ruby 3.2 リファレンスマニュアル
まだ各要素のデータ型が文字列なので、int型に変換します。
irb> "2,2,6,弐,⑧,0,,-5,03,8,Ⅳ".scan(/\b[1-9]\d*\b/).uniq.map(&:to_i)
=> [2, 5, 8]
できました。