かるーくRuby #11 継承

今回は、犬猿の仲で作った犬クラスと猿クラスをもうちょっとスッキリ書いてみます。

犬クラスと猿クラスは体長、位置、歩く動作、また距離計算は同じなので、これを動物クラスとして纏めます。

その後、犬クラスと猿クラスから上記の処理を削除します。
この時、Animalクラスを継承すると、Animalクラスのインスタンス変数やメソッドが使えるようになります。

猿クラスも同じ感じです。

大分スッキリしました。
これで実行してみると、前回と同じように動作することがわかります。
継承をうまく使ってコードの可読性を上げたいですね。

ではまた!

かるーくRuby #10 クラス<2>

昨日の続きです。

猿クラスを実装しましょう。
犬クラスと同じような感じです。

※全体を実装した結果、前回の犬クラスの細かな値などを微調整してます。

フィールドクラスも実装しちゃいましょう。

初期化処理で犬、猿を生成して、フィールドに配置してます。
その後、時間が進むと犬と猿はフィールド内を歩き始めます。
それぞれが近づくと、啀み合います。
draw_fieldは犬と猿の位置を示す為のものです。

さあ、あとはフィールドクラスを生成して時間を進めていくだけです。

フィールドのサイズを7×7、犬と猿のサイズを2にしてフィールドを作成しています。
キーを入力する度に時間が進みます。

実行してみましょう。

犬の位置が「D」、猿の位置が「M」で表示されています。
キーを押して進めていくと・・・

こんな感じで近づいた時に啀み合うセリフが表示されます。

うん、いい感じですね。
次回は犬クラスと猿クラスが同じような処理をしているので、何とか簡単にしましょう。

ではまた!

かるーくRuby #9 クラス<1>

今回は今までも使ってきたクラスについて書いていきます。

オブジェクト指向には欠かせないクラス、
ここではクラスを使って犬猿の仲を表現しましょう。
ちょっと大きいものを作るので、何日かに分けて投稿します。

まずは大まかな内容をみておきましょう。

<犬クラス>

持っている特徴:体長、位置
動作:歩く、猿の位置検知、吠える、走って逃げる

<猿クラス>

特徴:体長、位置
動作:歩く、犬の位置検知、威嚇、ひっかく

<フィールドクラス>

特徴:犬、猿、広さ
動作:時間を進める、犬、猿の位置調整

フィールドクラスに犬と猿を置いて近づいたら威嚇したり吠えたりするって感じですね。
では、今日は犬クラスを実装してみましょう。

インスタンスを生成した時に必ずコールされるinitializeで初期位置と体長を設定してます。
で、歩いて猿検知して相手が大きかったら逃げて、小さかったら吠える。

何と冷静な犬だろう。
明日は猿クラスを作ります。

ではまた!

かるーくRuby #8 正規表現

正規表現って苦手なんですよね。

普段使ってれば分かるんでしょうけど、あの記号たち、覚えきれないです。
まあ調べて使えれば問題ないでしょう?

今日はRubyじゃなくて正規表現です。
そう、正規表現はRubyだけのものじゃない。

簡単なやつだけ作ってみましょう。
まずは年月日

僕の誕生日が表示されます。
\dが数字、+が1回以上繰り返しです。

続いて住所

うん、上手くいってます。
\Dが数字以外の文字、[]はこの中から1文字です。

さらにメールアドレス

できた!deguchi._test@test-sample_.comが表示されます。
\wがアルファベット、数字、アンダスコア( _ )のどれかの1文字、{}は繰り返し最小数と最大数の指定。

本当にかるーくでした!
もっと複雑な正規表現もいっぱいあるので、使いこなせたらいいですね。
ではまた!

かるーくRuby #7 nilチェック

こんにちは。

今日はオブジェクトがnilかどうか判断する方法を見ていきます。
他の言語だとNULLと言うことが多いですが、Rubyの場合はnilです。

Rubyでは基本的にはオブジェクトは初期化と共に宣言されますが、メソッドの引数など、使う側に依存するオブジェクトはnilとなっていないか心配になります。

そこでnilチェックをします。
一番誰でも分かるチェックの仕方がこんな感じ

ifの条件はnilでも偽と見なされるため、以下でも可能です。

||や&を使ってもnilのチェックができます。

nilの時だけ代入

nilじゃない時だけメソッドコール

どれでもいいですが、オブジェクトのnilチェックは忘れずに。
色んなチェックの仕方があるから知っておかないとコードを読む時も大変ですね。

今日は短いですが、終わりです。
ではまた。

イクメン最高峰

こんにちは

最近訳あってものすごく家事育児をしてます。
やばいです。イクメンです。

イクメンの今日の1日を紹介します。

6:30 起床
怒涛の一日が始まります。
子どもの調子が悪いということで、病院へいかないといけないのですが、
その順番を取るのが7:00から(受診は9時以降順番)ということで、急いで着替えて病院へ。

7:00 病院到着、順番取る(3番)
人が少なく、かなり早めに取れました。
これならもうちょっと遅くてもよかったかも。

7:10 帰宅
子どもの朝ご飯を作ります。
いつも同じですが、パンを焼いてバナナヨーグルト
で、自分の分はパンだけ。

7:30 子どもの相手
好きなテレビ「みいつけた」が始まるまでご飯食べさせたり、遊び相手をしたりします。

7:45 身支度
歯磨きしたり、着替えたり、トイレに行ったり、洗い物したりします。
子どもはテレビに夢中です。
「みいつけた」の後も、「おかあさんといっしょ」を見ます。

8:45 コーヒーを淹れる
9時からリモートで仕事開始なので、その前にコーヒーを入れておきます。
眠すぎるので。
子どもは妻と病院へいきます。

9:00-12:30 仕事
本当はもう少し早くから作業してます。

12:30-13:30 昼休み
子どものご飯を作って食べさせます。
作ると言っても、レトルトのカレーと昨晩の味噌汁を温めるだけです。
その後、自分のご飯を作って食べていたら、妻が美味しそうと言って僕の分を食べました。
僕は妻が作っていた冷凍パスタを食べました。

13:30-18:00 仕事
午前の続きです。
今はプログラムの移植をしてます。
検証しながらなので、かなり探り探りです。

18:00 洗い物
昼ご飯の食器の洗い物をします。
夜食べる分の米を炊きます。

18:45-21:00 病院
子ども、今日2回目の病院です。
こちらがいつも行っている病院です。
昨日の夜喘鳴が酷すぎたので、本当は朝行きたかったのですが、開いてなかったので、別の病院へ行きました。
今度は僕が連れていきます。
かなり喘鳴がひどく、点滴をしてもらいました。
その分、時間もかかりました。

21:30 帰宅、夕食
帰ってすぐ夕飯を作って子どもに食べさせます。
自分の分も作ります。スクランブルエッグと味噌汁です。
時間がある時はもっと色々作ります。
今日は鮭を料理しようと思っていたのに、病院に時間を取られすぎました。

22:15 風呂
子どもをお風呂に入れます。

22:45 洗い物
子どもと一緒に一旦ベッドに入り、隙を見て脱出します。
そして夕飯の洗い物をします。

23:15 現在
ブログを書いたり勉強したりします。
今日はビール付きです。

大体寝るのは1時〜2時ぐらいです。
最近はこんな感じの繰り返し。
結構ギリギリの生活してるなと思っているのですが、
世の中のイクメンさんはどんな生活をしているのでしょうか。

てかリモートワークじゃなかったら完全につんでる。

ではまた。

ひねくれRuby #6 ハッシュ

こんにちは

今日はハッシュです。
なんか普通に書くのも飽きてきたので、ちょっとひねくれた書き方をしてみようかと思います。

ハッシュの形は

の組み合わせってことはご存知かと思います。

そのデータの持ち方として、例えばこんな感じで考えてみましょう。
キー:夫の発言
値:妻の反応

発言と反応の組み合わせはあらかじめ決まっているので、定数として定義しましょう。

では、標準入力から言われたことについて返答しましょう。

完璧ですね。

確認します。

なんという悲惨な光景でしょうか。

もう限界です。

ではまた。

かるーくRuby #5 Enumerable

今日はEnumerableを見ていきます。

ちょっと分かりにくいかもしれませんが、自分用の配列MyArrayを定義します。

配列3つ持っているだけですね。
※本来は多重配列にすれば済む話ですが、Enumerableをincludeした時の動作を確認したかったので、お許しください。

使ってみましょう。
まず、MyArrayのインスタンスを生成してデータを代入します。

自分で定義したeachメソッドを使ってみましょう。

出力は以下の通り、正しいですね。

ここからがEnumerableをincludeすることで受けられる恩恵です。
mapメソッドを使ってみましょう。

実行結果、

eachを定義するだけで、色んなメソッドが使えるようになります。
これ初めて知った時は感動したなあ。

ではまた!

かるーくRuby #4 イミュータブル

こんにちは。

今日はオブジェクトの変更可否について見たいと思います。
変更できるオブジェクトをミュータブル、変更できないオブジェクトをイミュータブルって言います。

基本的なデータ型では下記の4つがイミュータブル。
・数値
・シンボル
・true/false
・nil

これ以外はミュータブルです。
Rubyで定数を定義しても上記以外のオブジェクトだとミュータブルです。

定数のくせに破壊的に変更できちゃう。

ので、イミュータブルなオブジェクトに変更しちゃいましょう。

定数を破壊しようなんていう人はいないと思いますが、
念の為、freezeして変更できないようにしておきましょう。

あ、freezeしても下みたいに定数の入れ物に別のオブジェクトを入れることはできるので注意ですね。
(Warningは出ると思いますが。)

そもそもオブジェクトと入れ物は別物なので、ごっちゃにならないように気をつけましょう。

ではまた!

かるーくRuby #3 繰り返し

こんにちは
今回は繰り返しです。

適当にプログラム作っていきます。
生徒と学校クラスを定義して、平均点を求めます。

生徒クラスでは繰り返しは使いません。
データを持っているだけです。

学校クラスでは、まず、生徒を入学させます。
そして所属している生徒の平均点をcalc_averageで求めます。
この時、配列に定義されているeachメソッドを使います。
便利ですね。

では実際にインスタンスを生成して使ってみます。

ここでもう一つ繰り返し。
生徒のデータを登録する為に、数値クラスのtimesメソッドを使っています。
今は30人分のデータを作成しています。

で、実行した結果。

正しく表示されましたね。
1人点数やばい奴いますね笑

Rubyには他にも色んな繰り返し処理があるので、状況に合った使い方をしていきたいですね。
ではまた!