かるーくRuby #15 File

ファイル操作には組込みクラスのFileを使います。

openメソッドでファイルを開いて、closeメソッドで閉じます。
openにブロックを渡すと、ブロック実行後に自動でcloseしてくれるので、閉じわすれを防止になります。

本当に簡単な例だけ。

以前作ったdog.rbの中身を表示してます。
実行すると、

のような感じになります。
もうちょっと詳しくみたいけど、今日はここまで。

ではまた!

かるーくRuby #14 Comparable

今回はComparableについてです。

かるーくいきます。

以前、Enumerableをやりました。それと同じ感じで

こんな感じで組み込んで<=>を定義します。
年齢が大きい方が大、年齢が同じであれば名前順です。

そうすると<、>、==などが使えるようになります。

実行してみましょう。

合ってますよね?

ではまた!

かるーくRuby #13 モジュール

モジュール、見ていきましょう。

クラスと同じような感じですが、インスタンス化はできません。
便利な機能を集めたものと考えればいいのかな。

簡単な例として挨拶モジュールを定義してみます。

これをクラスに組み込むことで、挨拶を利用できます。
ここで重要なのは、モジュールでクラスで定義されるインスタンス変数を使っているということ。
こんなことができちゃいます。動的型付け言語だから。

ですが、組み込むクラスに@nameというインスタンス変数がないとエラーになるので注意です。

人間クラスを定義します。

ちゃんと@nameを定義します。

間違いないか確認します。

できてました。
Mix-inはもっと奥が深い気もするけど、基本はこんな感じで。

ではまた!

かるーくRuby #12 特異メソッド

今日は特異メソッドについて見てみます。

特異メソッドとは、クラスに定義されたインスタンスメソッドとは異なり、オブジェクト固有に持つことのできるメソッドです。
試してみましょう。

mouse_aとmouse_bはどちらもStringクラスのインスタンスです。
それぞれに独自のgreetメソッドを定義しています。

それぞれのクラスを呼ぶと、別の結果が出力されます。
つまり、Stringクラスではなく、インスタンスであるmouse_aとmouse_bそれぞれに別のgreetメソッドが定義されたということです。

使いどころが難しいですが、使いこなせるようになれたらいいな。

ではまた!

かるーく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チェックは忘れずに。
色んなチェックの仕方があるから知っておかないとコードを読む時も大変ですね。

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

ひねくれRuby #6 ハッシュ

こんにちは

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

ハッシュの形は

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

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

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

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

完璧ですね。

確認します。

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

もう限界です。

ではまた。