はじめに
筆者
趣味レベルでRubyを使っていたアマチュアプログラマ
この記事の趣旨
筆者がRuby技術者認定試験Silver2.1の勉強をする過程で
理解が不十分だった内容をクイズ形式で紹介します。
解答+簡易解説は”▶解答”をクリックで開きます。
参考文献
Rubyリファレンスマニュアル(2.1.0)
問題
・次のうち、存在しないコマンドラインオプションはどれ?(一つ選択)
a. -a
b. -b
c. -c
d. -d
e. -e
解答
-b:存在しないオプション。
-a:オートスプリットモードをONにする(-n, -p と同時に指定)
-c:実行せずに文法をチェック。問題なければ"Syntax OK"と出力。
-d:デバッグモードでスクリプトを実行($DEBUGをtrueにする)
--debug でも同じ
-e:コマンドラインからスクリプトを指定
-e 指定時は引数からスクリプトファイル名を取らない
・次のうち、後ろにディレクトリ名をとれないのはどれ?(一つ選択)
a. -C
b. -I (大文字の i )
c. -S
d. -x
解答
-S:環境変数PATHの値を使ってスクリプトを探すように指定。
-C directory :スクリプト実行前に指定したディレクトリに移動
-I directory :ファイルをロードするパスを指定(追加)
-x [directory]:メッセージ中のスクリプトを取り出して実行。
ディレクトリ名を指定すると
スクリプト実行前に指定したディレクトリに移動
・次のうち、存在しないコマンドラインオプションはどれ?(一つ選択)
a. --copyright
b. --disable
c. --encoding
d. --help
e. --verbose
f. --version
解答
--disable:--enable, --disable は 2.2 から
--copyright:著作権を表示
--encoding :デフォルトの外部エンコーディングと内部エンコーディングを
ex[:in] で指定(-E ex[:in]でも可)
--help :コマンドラインオプションの概要を表示(-h でも可)
--verbose :冗長モード。組み込み変数 $VERBOSE をtrueにセット
--version :Rubyのバージョンを表示
-v について
-v のみが指定されたときはバージョンを表示して実行を終了。
-v 以外にも引数がある場合はバージョンを表示し、冗長モードになる。
-w はバージョンを表示せずに冗長モードになる。
・次のうち、グローバル変数に関係しないものはどれ?(一つ選択)
a. -0数字
b. -Fregexp
c. -l
d. -n
e. -p
解答
-n :プログラム全体が while gets; ...;end で囲まれているように動作する。
グローバル変数には関係しない
-0数字 :入力レコードセパレータ(\$/)を8進数で指定
-Fregexp:入力フィールドセパレータ(\$;)に regexp をセット
-l :行末の自動処理を行う。
\$\ を \$/ と同じ値に設定、printでの出力時に改行を付加する。
-n フラグまたは-pフラグが指定されていると
gets で読み込まれた各行の最後に対して String#chop!を行う。
-p :-nフラグとほぼ同じだが、各ループの最後に変数 $_ の値を出力する。
・次のうち、オプション単体でしか動作しないものはどれ?(一つ選択)
a. -i
b. -r
c. -s
d. -T
e. -W
f. -y
解答
-y:コンパイラデバッグモード( --yydebug でも可)
-i[extension]:引数で指定されたファイルの内容を置き換える(in-place edit)
extensionを指定すると元のファイルを拡張子をつけた形で保存
-r feature :feature で指定されるライブラリを Kernel.#requireする。
-s :スクリプト名の後ろにおいた `-'で始まる引数を解釈し、
同名のグローバル変数に値を設定
-T[level] :不純度チェックを行う。levelは安全度レベルの指定
-W[level] :冗長モードを三段階のレベルで指定
あとがき
しんどかった(›´ω`‹ ) ゲッソリ
コマンドラインオプションはほとんど使ってこなかったため、
「どれも理解が不十分だから、いっそのこと問題で全部登場させてみるか」
と思ったのが運の尽きでした。
しかも苦労した割に完成度は低いという…問題を作るのって難しいんだなぁ。