Closed22

Rubyリハビリする

ハガユウキハガユウキ

bundle list コマンドは、現在のプロジェクトにインストールされているすべての gem とそのバージョンを表示する Bundler のコマンドです。

ハガユウキハガユウキ
require_relative "../../modules/stdin_module"
require "faker"

# stdinのテストがなぜかうまくいかなかったので、stdinのテストは保留
RSpec.describe StdinModule do
  let(:stdin_class) { Class.new { include StdinModule } }
  let(:stdin_class_instance) { stdin_class.new }
  # let(:$stdin) { StringIO.new("apple, orange, pine") }

  describe "#get_multiple_words" do
    context "when separate is comma" do
      it "array length is 3" do
        stdin_class_instance.stub(:gets).and_return("apple, orange, pine")
        words = stdin_class_instance.get_multiple_words
        expect(words.size).to eq 3
      end
    end
  end
end

ハガユウキハガユウキ

ここまでで参考にした記事

https://eikaiwa.dmm.com/uknow/questions/70429/

https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/inject.html
https://qiita.com/saitok7/items/6ec166fdaf5b77a058d4

letは内側のやつが参照される
beforeとかletですごい迷った記憶があるけど、何が原因だったのか忘れた。
https://qiita.com/saburou_itijiku/items/e056685f28b23e3e2533

配列が空かどうかはempty?を使えば良い
https://docs.ruby-lang.org/ja/latest/method/Array/i/empty=3f.html

Rspecを実行するなら、rubyコマンドじゃなくて、rspecコマンドを使う。

Rspecのdescribeの隣に書いたモジュールやクラスネームは、described_classで参照できる
https://docs.ruby-lang.org/ja/latest/method/Array/i/empty=3f.html

https://techtechmedia.com/described-class-rspec/

module_functionを使うと、module_functionを実行すると以下の2つの処理が行われる。
 ・インスタンスメソッドのprivate化
 ・publicクラスメソッドの作成

これ気をつけないとな。
https://qiita.com/nakamurau1@github/items/20ed074563360a2f1ffc

ハガユウキハガユウキ

ここまでで参考にした記事

配列から重複していない要素を取り出す
https://qiita.com/suzu12/items/af0ccbca88f33dec2fda

実際にはこんなコードを書いた

    # @param [Array<Integer>] numbers
    # @return [Integer]
    def get_unique_number(numbers)
      number_counter = Hash.new(0)
      numbers.each { |number| number_counter[number] += 1 }
      unique_numbers = number_counter.filter { |_, count| count == 1 }.keys
      unique_numbers[0]
    end

JSON.parseで文字列を配列にしたりハッシュにしたりできる
https://docs.ruby-lang.org/ja/latest/method/JSON/m/parse.html

Hash.newで空の配列を作れる。引数はキーに対応する値が存在しない時のデフォルト値
引数を省略した場合、{} と同じ
https://docs.ruby-lang.org/ja/latest/method/Hash/s/new.html

filter
https://docs.ruby-lang.org/ja/latest/method/Hash/i/filter.html

begin ~ rescue
https://qiita.com/k-penguin-sato/items/1a6c8096effccb19565a

カスタム例外
https://qiita.com/k-penguin-sato/items/3d8ce4e71520da2d68c4

メソッド内ではbeginとendを省略できる。省略するほうが推奨される

def redundant
  begin
    ala
    bala
  rescue StandardError => e
    something
  end
end

def preferred
  ala
  bala
rescue StandardError => e
  something
end

resucue書くときに、捕虜する例外クラスを指定しないと怒られる。
https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Style/RescueStandardError

エラークラスを使うときに、引数を指定するのかは、Rubocopの設定を指定できる
https://qiita.com/masayuki14/items/a7173e0b0f226a4711ad

ハガユウキハガユウキ

ここまでで参考にした記事

mainメソッド
https://qiita.com/jnchito/items/4b4cae54170cc2f4377e

コンパクト記法では最後(一番右端)以外の名前空間に対しては class か module かを指定しない。コンパクト記法ではその名前空間が定義されていれば参照するが、定義されていなければ例外が発生する(つまり、自動で定義して欲しい場合なら、ネスト記法を使う。

https://zenn.dev/noraworld/articles/ruby-class-and-module-children#コンパクト記法の場合

yardでドキュメントを生成できる。しかもweb上で見れちゃう
https://morizyun.github.io/blog/yard-rails-ruby-gem-document-html/index.html

Array#delete_atは、配列の指定されたインデックスの要素を削除する
https://docs.ruby-lang.org/ja/latest/method/Array/i/delete_at.html

loopを使えば、breakでループを終了させない限りループし続ける処理を実装できます。
https://docs.ruby-lang.org/ja/latest/method/Kernel/m/loop.html

Array#reverse_eachは、各要素に対して逆順にブロックを評価する
https://docs.ruby-lang.org/ja/latest/method/Array/i/reverse_each.html

rubyにもbreakとcontinueあった
https://itsakura.com/ruby-for

OFFSET句は、データの取得を行う最初の位置を指定する
https://www.javadrive.jp/sqlite/select/index10.html#section2

RubyでWhile trueで無限ループもできるが、無限ループしたいなら、loopを使えば良い
https://www.javadrive.jp/ruby/for/index1.html

https://www.google.com/search?q=正方行列&rlz=1C5CHFA_enJP931JP939&oq=正方行列&gs_lcrp=EgZjaHJvbWUyCQgAEEUYORiABDIHCAEQABiABDIHCAIQABiABDIHCAMQABiABDIHCAQQABiABDIHCAUQABiABDIHCAYQABiABDIHCAcQABiABDIHCAgQABiABDIHCAkQABiABNIBCTExMzE5ajFqMagCALACAA&sourceid=chrome&ie=UTF-8

rubyは基本値渡しだが、配列の時だけ参照渡しになるそう。
メソッド内でそのメソッドを使う人が予想だにしない処理を加えない。
一連のまとまった処理ならそれでメソッドを作る
https://sakaishun.com/2023/02/27/ruby-argument/

https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Style/WhileUntilDo

Array#emptiy?意外と使う。length == 0をしなくて済むから楽。
https://docs.ruby-lang.org/ja/latest/method/Array/i/empty=3f.html

このスクラップは2023/10/14にクローズされました