webエンジニアの日常

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

Rubyをもう一歩進んで勉強する16章(コレクションの取り扱い)

【目次】

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

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

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

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

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

すなわち

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

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

Rubyをもう一歩進んで勉強する15章(クラス変数よりもクラスインスタンス変数を使おう)

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

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

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

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

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

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

続きを読む

【原因別】ブログが続かないときの4つのアイデア

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

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

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

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

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

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

スポンサーリンク

【目次】

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

Progateに出てくるHTML/CSSの文法まとめ

文法・テクニックまとめ

【目次】

  • 文法・テクニックまとめ
    • リストのドットをなくす
    • リスト含む要素の横並び
    • padding・marginの値の指定
    • border
    • 背景画像
    • 透明度
    • 文字間隔
    • ブロックスタイル
    • カーソル
    • 角丸
    • marigin: autoとtext-align: centerの使い分け
    • font-awesomeの使い方
    • 透過度(rgba)
    • アニメーション
    • 行の高さ
    • 線の太さ
    • position
    • カーソルの形
    • クリック時
    • クリック時に動くボタンのcss
    • 重なり
    • mediaクエリ
    • boxsizing
    • viewport
    • clear

リストのドットをなくす

li {
  list-style: none;
}

リスト含む要素の横並び

li {
  float: left (or right);
}
続きを読む

Rubyをもう一歩進んで勉強する14章(privateとprotected)

オブジェクト指向はカプセル化によって公開するpublicメソッドと非公開なprivateメソッドを分けています。

最初の頃はすべて公開したら後で楽じゃないかって思っていたのですが、公開するものを制限することでテスト対象が減り、インターフェースをできるだけ変えないようにすることで修正範囲を狭くできるので、公開しないものはprivateにするようにしています。

さて、rubyでのprivateメソッドの定義は結構面白いです。

privateメソッドとして定義されたメソッドは明示的にレシーバを指定して呼び出すことができません。

privateメソッドとなるルールはこれ一つです。

単純なルールですが、確かにクラスの外からは呼び出せないのでカプセル化されています。

レシーバを指定できないので、クラスの中でもself.hogeみたいにselfを付けてしまうと呼び出せないですが、セッターメソッドの呼び出し以外はselfを付ける必要はないので不便もなさそうです。

続きを読む

Rubyをもう一歩進んで勉強する13章(UFO演算子)

13章はUFO演算子とComparableモジュールについてです。

この二つは以前記事にしたことがあるのでササっと流していきます。

www.uosansatox.biz

簡単に言うと、UFO演算子(<=>)を定義するだけでsortやminメソッドが使えるようになります。

UFO演算子は自由に実装していいわけではなく、次のルールを守る必要があります。

  • 比較できないときはnilを返す

  • レシーバ(演算子の左側)が小さいときは-1を返す

  • 逆にレシーバが大きいときは1を返す

  • 等しいときは0を返す

何をもって大きい小さい等しいのかは自分で決める必要があります。

続きを読む

Rubyをもう一歩進んで勉強する12章(4つの等値)

変数同士が等しいかどうかRubyで調べる手段をご存知でしょうか。

数値同士、文字列同士なら言わずと知れた==を使えばいいですね。ほかにもRubyにはeql?メソッドなどが存在します。

ですが、すべて同じ結果を返すわけではありません。何をもって等しいとするかの定義が少しずつ異なります。

"str" == "str" #=> true

"str".equal?("str") #=> false

そこで今回は4つの「等しい」について書いていきます。

equal?メソッド

equal?メソッドは比較する二つが全く同じオブジェクトであることをチェックします。

全く同じとは、参照しているオブジェクトが同じobject_idを持つかどうか、すなわち、ポインタが同じメモリ上のアドレスを指しているかどうかです。

続きを読む