学習履歴一覧

551件中の 76-100件 を表示

[Ruby]公式模擬問題集、REx、合格教本の模擬試験を解いて解説を読む。浅いコピー、階層構造について質問の回答へ返信する。

今日のYWT やったこと 質問への回答を読む 新しい疑問点について書く 持っている/使えるサービスでRuby Silverの模擬試験や問題を解く わかったこと 回答への返信 dupメソッドは認識通りshallow copy)なのですが、まずshallow copyの説明です。 shallow copyは複製を作りはするものの、インスタンスの参照自体をコピーするものではありません(インスタンスのハッシュ値が異なるため、中身は同じでも違うものをさす) ですので、fooとbazでは値が異なっているという認識です。 ここまでは理解できました。だからobject_idも変わっているということですよね。 2つめの質問についてです。 「階層構造になっている時、その中身に対して破壊的メソッドを実行すると、元のオブジェクトの中身にも変更が起きてしまう」 この部分に関しては、Rubyの言語の仕様上そうなる、ということで納得はできます。 また、以下のようなコードを書いた時の挙動を見て、foo[0][0..3]のような書き方をすると、「階層構造の中身への破壊的メソッド実行」が起こる、ということが分かりました。 foo = ["a", "b", "c"] baz = foo.dup p foo # -> ["a", "b", "c"] p foo.object_id # -> 60 p baz # -> ["a", "b", "c"] p baz.object_id # -> 80 foo[0][1] = "c" p foo # -> ["ac", "b", "c"] p foo.object_id # -> 60 p baz # -> ["ac", "b", "c"] p baz.object_id # -> 80 以下はfooの出力自体は上のコードと同じになるものの、「階層構造の中身への破壊的な変更」が起こらず元のオブジェクトが書き換わらないケースです。 foo = ["a", "b", "c"] baz = foo.dup p foo # -> ["a", "b", "c"] p baz # -> ["a", "b", "c"] foo[0] = "ac" p foo # -> ["ac", "b", "c"] p baz # -> ["a", "b", "c"] また階層構造がいまいち分からなかったので調べる。≒ツリー構造と解釈。 わわわIT用語辞典 階層構造 仮説として、ツリーを考えた時に、おそらく内部では foo[0] = "ac"と foo[0][1] = "c"が違う働きをしているだろうとは思うんですが、具体的に何が違うのか……どのように違うのか、と新たな疑問が湧いてきてしまいました。 次やること 上の質問を解決したい ツリー構造について Ruby Silver追い込み

Ruby

2021年04月24日(土)

6.0時間

[Ruby]間違えた問題の解説や該当部分の説明を読む、notionで解きなおせるようにまとめる

今日のYWT やったこと 昨日解いた合格教本の間違えた問題の解説や該当部分の説明を読む 間違えたところをnotionで解きなおせるようにまとめる わかったこと 数字のみで構成される行・正規表現 一つ以上の数字のみで構成される行にマッチする正規表現を選べ /^[0-9].$/ /^[0-9]*$/ /^[0-9][0-9]*$/ /^[0-9][0-9].*$/ 答え 3. `/^[0-9][0-9]*$/` 解説 一つ以上の数字のみで構成される行とは…… 1. 数字で始まる 2. 数字の繰り返しで終わる という意味。 [主な正規表現のメタ文字](https://www.notion.so/14f6ffd0c11f43e98c8a72680a736efa) 上の正規表現のメタ文字リストを踏まえて選択肢を見ていくと、 - 1. `/^[0-9].$/` `^[0-9]` で、1文字目が数字 `.$` で、行末が任意の1文字(数字以外も許可) 以上から、**数字で始まる2文字の行**となる。 - 2. `/^[0-9]*$/` `^[0-9]` で、1文字目が数字。 `*` で、**直前の文字やパターンを0回以上連続させる。** 以上から、**数字の0文字以上の繰り返しの行となる。** 0回以上連続させる→0回の可能性もあるため、空行にもマッチする。 - 3. `/^[0-9][0-9]*$/` `^[0-9]` で、1文字目が数字 `[0-9]*` で、続くもう1文字も数字、かつこのパターンを0回以上連続させる。 以上から、**一つ以上の数字のみで構成される行**となる。 選択肢2と違い、空行は許可しない。 - 4. `/^[0-9][0-9].*$/` `.*` があるため、数字2文字で始まり、任意の文字を続けられる。 以上から、**数字2文字で始まる行**となる。 次やること notionまとめ続き

Ruby

2021年04月20日(火)

3.6時間

[Ruby]合格教本の基礎問題30問と、模擬試験50問を解く。 REx Silver1回分解く。模擬試験以外の問題で間違えたところをnotionにまとめる

今日のYWT やったこと REx Silver 1回解く 間違えたところnotionにまとめる Ruby技術者認定試験合格教本 基礎問題30問 間違えたところをnotionにまとめる Ruby技術者認定試験合格教本 模擬試験50問 解説を読む、notionまとめは明日 16問も間違えてしまった。油断できない わかったこと notionにまとめた member? ハッシュがキーを持つか判断し、存在する場合はtrueを返す # member? hash = {"apple"=> "grate", "banana"=> "ole", "orange"=> "juice"} p hash.member?("apple") # <実行結果> # true # 該当するkeyがある場合にtrueを返すので、正しい記述である to_a ハッシュから配列を作成する # to_a hash = {"apple"=> "grate", "banana"=> "ole", "orange"=> "juice"} p hash.to_a # <実行結果> # [["apple", "grate"], ["banana", "ole"], ["orange", "juice"]] # 以上より、to_aで配列を生成したので正しい記述である update !こそついてないが破壊的メソッドである # update hash = {"apple"=> "grate", "banana"=> "ole", "orange"=> "juice"} hash.update({"grape"=> "juice"}) p hash # <実行結果> # {"apple"=>"grate", "banana"=>"ole", "orange"=>"juice", "grape"=>"juice"} # hash を破壊的に変更しているので正しい記述である clear !はついてないが破壊的メソッド 配列の要素すべてを削除し、その結果、空のハッシュ(配列)を返す # clear hash = {"apple"=> "grate", "banana"=> "ole", "orange"=> "juice"} p hash.clear # <実行結果> # {} # 空のハッシュが出力されているので正しい記述である 次やること 合格教本模擬試験50問の間違えたところをnotionにまとめる 正規表現

Ruby

2021年04月19日(月)

3.2時間

551件中の 76-100件 を表示