Ruby技術者認定試験のSilverを勉強中ですが、個人的に引っ掛かりやすい問題についてまとめました。
随時更新予定。
引っかかった問題は、ほぼREx - Ruby Examinationさんからの出題です。
x進数
文字列からx進数への置換
メソッド | 内容 |
---|---|
hex | 16進数で解釈し、整数で返す。 解釈できない場合は0を返す。 接頭語0x,0X,アンダースコアは無視される。 |
oxt | 8進数で解釈し、整数で返す。 解釈できない場合は0を返す。 接頭語は無視しない。 |
基数指示子
数値の前につけることで、何進数かを指定するもの。
基数指示子 | 内容 |
---|---|
0b | 2進数(binary) |
0o | 8進数(octal) |
0d | 10進数(decimal) |
0x | 16進数(hexadecimal) |
日付フォーマット
忘れやすいフォーマットを列挙します。
小文字と大文字を混同しやすいので注意。
フォーマット | 表示 |
---|---|
%x | %m/%d/%y で表示される |
%D | %m/%d/%y で表示される %xと同等 |
%d | 0埋めの日付 |
%F | %Y-%m-%d で表示される |
%y | 西暦の下2桁 |
%Y | 西暦4桁 |
%M | 0埋めの分 |
%m | 0埋めの月 |
Hashクラス
生成方法
- Hash({})
- {}
- Hash.new
- 二次元配列.to_h
メソッド
破壊的か、非破壊的かに注意する
メソッド名 | 内容 | |
---|---|---|
merge | 引数のハッシュをマージする | 非破壊的 |
update | 引数のハッシュをマージする merge!と同等 |
破壊的 |
その他
- splat演算子(*)でハッシュは配列に展開される
*{a: 100, b: 200} => [[:a, 100],[:b, 200]]
Arrayクラス
メソッド
配列を組み合わせて生成するメソッド。混同しやすいので注意。
メソッド名 | 内容 |
---|---|
zip | [1,2].zip([3,4]) => [[1,3],[2,4]] |
product | [1,2].product([3,4]) => [[1,3],[1,4][2,3][2,4] |
配列に値を追加、削除をするメソッド。いずれも破壊的メソッド。
メソッド名 | 位置 | |
---|---|---|
pop | 末尾 | 取り出し |
push | 末尾 | 追加 |
shift | 先頭 | 取り出し |
unshift | 先頭 | 追加 |
その他
-
-
は引数に含まれる要素と同一の要素を取り除いて返却する。
Stringクラス
空白、改行を削除するメソッド
何を取り除くのか間違いやすいので注意。
またいずれも非破壊的で、!を付けると破壊的メソッドとなる。
メソッド名 | 除去対象 | 位置 |
---|---|---|
chomp | 改行コード | 末尾 |
strip | 空白文字 | 先頭と末尾 |
chop | 空白文字 | 末尾 |
その他
-
String#%
でフォーマットされた文字列を返す。指示子がない場合は、そのままを返却。 - Stringの結合は
+
,<<
,concat
,*
の4つ。
Dirクラス、Fileクラス、IOクラス
ファイルの書き込みモード
追記する位置の違いに注意。
※読み込みは、IO#seek
で指定が無ければ、いずれのモードも先頭から行う
モード | 内容 | 書き込み位置 |
---|---|---|
a | 追記モード | 常にファイルの末尾 |
r+ | 読み書きモード | ファイルの先頭 |
w+ | 読み書きモード | 既存ファイルの内容を空にして追記 |
a+ | 読み書きモード | ファイルの末尾 |
ファイルポインタ
定数名 | 内容 |
---|---|
IO::SEEK_SET | ファイルの先頭からの位置 |
IO:SEEK_CUR | 現在のファイルのポインタの位置 |
IO:SEEK_END | ファイルの末尾 |
io.seek(-10, IO:SEEK_END)
のように使う。
Enumerableモジュール
似ているけど動きが違うメソッド。
メソッド名 | 内容 |
---|---|
find | ブロックを評価し、最初に真になった値を返却する |
select | ブロックを評価し、真になった値を全て返却する |
%記法
%
を付けると、文字列を囲う記号を指定できる
書式 | 生成値 |
---|---|
%Q | ダブルクォートで囲う。 %と同意 |
%q | シングルクォートで囲う |
%W | 配列を生成 式展開可能 |
%w | 配列を生成 式展開できない |
%x | コマンドを出力 |
%s | シンボル |
%r | 正規表現 |
ブロック
- do...endと{...}では、{...}の方が結合度が強い
-
p [1,2,3,4].map do |e| e * e end
を実行すると、do...endの方が弱いので、p {[1,2,3,4].map}
が評価される
その他
-
unless
はelsif
を用いることはできない(elseはOK) - 可変長引数は2つ以上指定できない
- メソッドと変数の探索順位は、変数が先
- ヒアドキュメントで
<<-
と指定すると、インデントを加えることができる