webエンジニアの日常

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

至れり尽くせり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回も閲覧されているのって結構うれしいです。

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

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

スポンサーリンク

【目次】

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

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);
}
続きを読む

秘密のprivateと秘伝のprotected

Effective Rubyの勉強メモです。

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

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

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

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

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

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

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

続きを読む

あっ!UFO演算子!Comparableモジュールの実装方法をご紹介します。

Effective Rubyの勉強メモです。

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

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

www.uosansatox.biz

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

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

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

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

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

  • 等しいときは0を返す

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

続きを読む