ruby

配列指定のリファクタリング

片方が文字列で、展開式は配列をしている場合です。 同じ処理なのに、文字列を配列で処理が違うなんて・・・みたいな展開があった場合です。 文字列の処理を配列にすれば大丈夫です。 def hoge(hoge)←文字列 or 配列が入ってくる Array(hoge).each do |x| ..…

抽出系のメソッド

抽出系のメソッドです。 select 指定するものを抽出してくれます。 x = [1, 2, 3, 4, 5, 6, 7] x.select{|x| x == 2 } => [2] reject 指定するものを拒否して、削除してくれます。 x = [1, 2, 3, 4, 5, 6, 7] x.reject{|x| x == 2 } => [1, 3, 4, 5, 6, 7] …

rbenvをupdateして、最新のrubyを取得できるようにする

最新のrubyを取得するには、rbenvを使用しているのなら、ruby-buildが入っています。 こちらをupdateしないと、rubyの最新がインストールできなかったりします。 rbenvを使用しているのなら、rbenv updateで更新したいですよね。 GitHub - rkh/rbenv-update:…

可変長引数をhashする

可変長引数でhash化することができるオプションがあります。 def hash(**k) puts "#{k}" end hash(foo: 'bar', hoge: 'hoge') →{:foo=>"bar", :hoge=>"hoge"} 普通はhash(*k)とした場合は、ただの可変長引数でいくらでも引数が入力できるという状態になりま…

rubyでクラスの型を確認

継承元を含めているかどうかを確認します。 class Hoge end class Foo < Hoge end hoge = Hoge.new foo = Foo.new ===演算子 p Hoge === hoge → true p Foo === foo → true p Hoge === foo → true is_a? p hoge.is_a?(Hoge) → true p foo.is_a?(Foo) → true …

railsで条件つきvalidationをする方法

A, B, Cがあり、Aをしたら、B,Cがvalidationを行うという状況をしたかったです。 こんなことってありませんか? あまりないのかもしれない・・・ やり方 with_optionsを使えば特定の条件下で複数のvalidationをかけることができます。 個別で行いたい場合は…

railsのpresenceが便利という話

presenceという便利メソッドがあることを教えてもらったので、メモがてらに書いておきます。 使い方 まず、sourceコードです。 presence (Object) - APIdock def presence self if present? end present?であれば、selfを返すというシンプルメソッドですね。…

再帰関数について

社内勉強会で再帰関数という言葉が出たので、全く知らなかったので、調べました。 意味 関数の中で自分自身を呼び出すことです。 そのため、再帰関数と呼ばれているんですね。 サンプル 階乗計算が例にあったので、それを使います。 4 x 3 x 2 x 1こんなやつ…

演算子をオーバーライドする

コメントでいただいたので、調べてみました。 mikamisan.hatenablog.com rubyは演算子をオーバーライド(上書き)することができるようです。 対象となる演算子 | ^ & <=> == === =~ > >= < <= << >> + - * / % ** ~ +@ -@ [] []= ` ! != !~ 上記はメソッド…

要素代入(=)という書き方

gemとかでこういう書き方をたまに見かけます。 def hoge=(hoge) @hoge = hoge end メソッドに=つける意味あんのか?などと思っていました。 要素代入と呼ばれるものです。 参考 ztbuz.hateblo.jp 使い方 class User def name=(name) @name = name end def na…

rubyで多次元配列を作る

多次元配列の作り方がわからなかったのですが、こうすれば作成できます。 hash = Hash.new{ |h, k| h[k] = [] } => {} hash[:foobar] = { foo: :bar} => {:foo=>:bar} hash => {:foobar=>{:foo=>:bar}} hash[:foobar] => {:foo=>:bar} hash[:foobar][:foo] =…

in?とinclude?について

in?という、ActiveSupportのメソッドが使いやすいかもしれないと思ったので、書いておきます。 自分が今やっているプロジェクトで使われていたので、調べました。 結果は同じのinclude?と比較します。 include? まずは、include?からです。 x = [1, 2, 3] y …

rubyの配列の演算子

一発でわからない演算子があったので、備忘録をかねて書きます。 | 和集合 x = [1, 2, 3] y = [2, 3, 4] z = x | y ←重複を削除してくれます。 →=> [1, 2, 3, 4] - 差集合 x = [1, 2, 3] y = [2, 3, 4] z = x - y →=> [1] & 積集合 x = [1, 2, 3] y = [2, 3,…

"#{hoge}"で式展開できた

今日、コードレビューで指摘を受けて、教わりました。 いや、今まではずっと変数展開しか知らなかったので、感動しました。 できたんですね・・・ def self_introduction(name, pseudonym) puts "#{"#{pseudonym} is pseudonym ," if pseudonym} my name is …

rubyのtryが便利かもしれない

tryメソッドという、有効な手立てがあることがわかりました。 使い方 comment = Comment.last cooment.try(:body) →'hoge' ←存在していれば →nil ←存在しなければ 何が便利かというと、こういう形の場合に省略できるということです。 comment = Comment.last…

eachの戻り値について

eachの戻り値がわかってなかったので、備忘録で書いておきます。 fruits = %w(apple orange grape) def sample puts "hoge" puts yield puts "Hoge" end sample do fruits.each do |fruit| "I like #{fruit}" end end → hoge apple orange grape Hoge I like…

unlessで結合した論理式を重ねていかない方法

hoge unless ~ ここの~でよく追加して条件を埋めていました。 自分がやっている場合は、いいのですが、何が困ったかというと、自分で振り返ってみたら分からなくなってしまします。 ~でない限りという否定の条件なので、これが深くなっていくと、ぱっと見で…

gemのawesome_printでirbの表示形式を整形できる

irbを使用していると、オブジェクトが整形されて出力されません。 小さいデータならいいのですが、量がかさばってくると探すだけで正直しんどいです。 そんな時に便利なgemがawasome_printです。 github.com 使い方 インストール gem install awesome_print …

rubyのyieldについて

yieldはrailsで見かけますが、よく理解していなかったです。 ここでyieldについて説明します。 ブロックについて yieldについて話をする前に、ブロックの話をしないといけません。 そもそもブロックってなんですか?というところですね。 name_list = %w(ali…

klassの使い方

klassって意味がわかんないよーって状態だったので、調べました。 下記を参考にさせていただきました。 stackoverflow.com 定義 classは予約語なので、classが使えないときに使いましょうということでした。 サンプル def inspect_class(class) puts class.c…

update_attributes/update_columnsの違い

今日はupdate_attributes/update_columnsの違いについて説明します。 自分自身が違いを理解していなかったので、使い分けの理解ができていなかったです。 概要 下記の記事から引用させていただきます。 qiita.com メソッド 保存 バリデーション(*1) コールバ…

moduleの定数にアクセスする方法

moduleの定数にアクセスする必要があるとは思ってもいなかったです。 まさかこんな日が来るとは・・・ module Hoge class Hogehoge HOGE = "hoge" end end p Hoge::Hogehoge::HOGE → hoge module Hogee module Hogehogee HOGEEEE = "hogeeee" end end p Hoge…

rubyメソッドチェーンの作り方

今日はメソッドチェーンの作り方を教えてもらいました。 応用が利くことになると思うので、備忘録的に書いておきます。 メソッドチェーンとは メソッドチェーンとは、メソッドをつなげていくものです。 サンプルです 'hoGe'.downcase.upcase => 'HOGE' 作り…

rbenv-default-gemsが便利!

rbenv-default-gemsが超便利です。 rubocopを使用していて、rubyのversion変更していたらエラーが出たので、解決策を探していました。 エラー内容です。 Error: rbenv: rubocop: command not found The `rubocop' command exists in these Ruby versions: 2.…

rubyの可変長引数

メソッドの引数で*hogeが気になっていました。 *がついている引数を可変長変数といいます。 意味 コンピューターで,処理単位の長さを変えられるようにしたもの。ファイルを小さくできる。 可変長(かへんちょう)とは - コトバンク メソッドでは、処理単位の…

with_indexについて

便利メソッドの紹介です。 railsでユニークな値をつけたいときには、with_indexを使えば簡単に実現できます。 pepole = %w(Bob Tom Lazy) pepole.each.with_index do |name, index| p "#{index}:#{name}" => "0:Bob" "1:Tom" "2:Lazy" end each_with_indexで…

スペースシップ演算子について

スペースシップ演算子(<=>)を初めて知りました。 巷では、宇宙演算子とも呼ばれているようです。 具体的な動作を見てみましょう。 役割 左辺の値が右辺よりも小さければ負の数、等しければ0、大きければ正の数を返す 基本的な動作です 100 <=> 10 => 1 100 …

includeとextendの違い

内容を見ていると同じに見えてしまう。 includeとextendの動きを見てみます。 両者の違い クラスのインスタンスメソッドとして取り込むことができる(include) そのオブジェクトにだけ特定の振る舞いを与えることができる(extend) ソースコードで試してみ…

privateメソッドの役割

呼び出し制限をかける場合に、privateメソッドを使っていました。 しかし、曖昧なまま使っており、privateメソッドの正しい役割を知りませんでした。 メソッドの役割 レシーバを省略する形でしか呼び出せない 具体例を出します class Greet def hello puts '…

rubyメソッドの感嘆符の慣習

最近パーフェクトrubyを読んでいます。 自分の中で、新しい気づきが多いので、備忘録として書いています。 rubyの使われ方 感嘆符をつける意味は、注意を促すときに使用される傾向があります。 今回の例では、reverseメソッドで説明します。 reverse は自身…