この記事は何
shellgei160を通じて言語習得 Advent Calendar 2023に参加しています。
書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。
例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160
実行環境など
- Docker image: ruby:3.0.2
- 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に
answer-ruby
ディレクトリを作り、その中に解答となるファイルを作成していきます。
今回のテーマ
#!/bin/bash
if [ "$1" = "" ] ; then
read n
else
n="$1"
fi
echo $((n*2))
引数($1
)か、それが与えられない場合は標準入力を読み込み、2倍にして表示します。
解
n = ARGV[0] || gets.chomp
begin
n = Integer(n)
rescue StandardError
raise ArgumentError, '引数は数値にしてください'
end
puts n * 2
所感
- 引数や標準入力の受け取り方、なるほど。
||
はシェル的用法(?)で、前のコマンドが失敗した時だけ実行するもの。失敗理由が限定的なときは、今回のコードのようにすっきり使えて良さそう。 - 与えられた値を数値に変換する時、
n.to_i
も使えるがエラーをキャッチできなかったのでInteger(n)
とした。