webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

ハッシュにデフォルト値を付けれるって知ってました?!

Effective Rubyの勉強メモです。

Hashクラスのオブジェクトに対して無効キーを渡すとnilが返ってきます。

nilが返ってくることを期待して(利用して)書いたコードもありますが、nilが返ってくるためnilガードで値を設定するコードが増えたり、思わぬところにエラーが起こってしまう可能性もあります。

Hashでは無効キーで参照されたときに返す値がデフォルトでnilになっているからです。

ですが、Hashはnewメソッドの第一引数に値を与えると、無効キーで参照されたときのデフォルト値を変更することができます。

今回はHashのデフォルト値について有用な点、注意点、デフォルト値を与える以外の方法を見ていきたいと思います。

続きを読む

何度見てもよく分からないreduceメソッドをマスターする!

Effective Rubyの勉強メモです。

どう使えばいいのかわからない。使い方もいまいち難しいメソッドの一つにreduce(inject)があります。

コレクションオブジェクトを操作するのにmapやeachはよく使いますが、reduceを使うと要素の合計の計算などmapやeachで書いていたものがより綺麗に書けるようになります。

ただ、使い方に癖があるので、できるだけ丁寧に解説していきたいと思います。

続きを読む

Setクラスはこう使え!要素の存在確認をするならSetクラス

Effective Rubyの勉強メモです。

Array, Hashで存在確認する

コレクションにある指定された要素が存在しているかどうかのチェックには、通常Array#include?メソッドを使うかと思います。

例えば、次のような権限クラスを考えます。権限クラスはパーミッションの配列を持ち、ある権限が特定の行動を許可するかどうかを返すcan?メソッドを持っています。

class Role
  def initialize(name, permissions)
     @name = name
     @permissions = permissions
  end

  def can?(permission)
    @permission.include?(permission)
end

パーミッションが少ないときは問題ないですが、Array#include?はO(n)のオーダーで実行するのでパーミッションが増えるとパフォーマンスに問題が出てきます。(例えば、Railsアプリですべてのモデルに対してCRUDのパーミッションがあるかどうか)

続きを読む

至れり尽くせりArrayメソッドで配列に簡単変換

Effective Rubyの勉強メモです。

Rubyではメソッドの引数の型を指定しないため、さまざまな引数が与えられます。

もし配列が引数に与えられることを想定して実装すると、引数に単一のオブジェクトやnilが送られてきた場合に困ってしまいます。

そこで、Arrayメソッドを使って引数のオブジェクトを配列化し、さまざまな種類の引数に対応していきたいと思います。

続きを読む

コレクションの取り扱いあれこれ

Effective Rubyの勉強メモです。

【目次】

  • コレクションをメソッドに渡すときの注意
  • 破壊的メソッドを使わない対処法
  • コレクションをコピーしておく
  • ディープコピーする

コレクションをメソッドに渡すときの注意

rubyでは、コレクション(例えば配列)をメソッドの引数に渡したとき、メソッド内ではどのように配列を参照しているのでしょうか?

実はrubyではメソッドに渡された配列は参照渡しされます。

参照渡しとは、オブジェクトそのものではなく、オブジェクトへの参照を渡すことです。オブジェクトはメモリ上のどこかに格納されており、そのメモリ上のどこを参照しているかのアドレスをメソッドに渡します。

すなわち

a = [1, 2, 3]
def address(object)
  object.object_id
end

p a.object_id
p address(a)
続きを読む

クラス変数の罠。これからはクラスインスタンス変数を使おう

Effective Rubyの勉強メモです。

インスタンス変数とクラス変数

クラス内で@が先頭につく変数はインスタンス変数を表します。

インスタンス変数はオブジェクト一つ一つが持つプライベートな変数です。オブジェクトのあるインスタンス変数に値をセットしてもほかのオブジェクトのインスタンス変数には影響を及ぼしません。

特別な変数にクラス変数というものもあります。@@が先頭につく変数で、クラスで一つの値を持ち、そのクラスのインスタンスすべてで共有されます。

もちろん、クラス変数の値を更新すると、すべてのインスタンス変数が更新後の値を使うようになります。

クラス変数を使う一般的な用途の一つにシングルトンがあります。

続きを読む

とりあえず何か書きたい人のための、ブログが続かないときの4つのアイデア

f:id:s-uotani-zetakansu:20180718205642j:plain

ブログを始めたけど、なかなか続かない。書くことがない。アクセスが伸びないと悩んでいる方は多いと思います。

僕も始めて数か月は1日に1PVあるかどうかという感じでしたが、1年経った今は1日に平均200PVぐらいあります。

他のブロガーに比べると200PVでも少ないと思いますが、とくにSEOとか気にせず(最近はちょっと気にしだしています)なんとなく書いていたブログが1日に200回も閲覧されているのって結構うれしいです。

そこで、僕がなぜこれまでブログを続けてこられたのか、ネタがないときどうしていたのかを、ブログが続かない原因別に対処法を書いていきたいと思います。

より具体的に、すぐに実践できるような方法を書きました。よく見る「身の回りは実はネタであふれている」系のことは書きません。

スポンサーリンク

【目次】

  • 書くこと(ネタ)がない
  • 続けなければならない。けど書けない
  • ネタはあるけど書き始められない
  • アクセスが伸びない
  • 最後に、ネタがない人にとっておきのネタを差し上げます。
  • まとめ
続きを読む