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

こんにちは。

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

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

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

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

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

nilの時だけ代入

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

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

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

ひねくれ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には他にも色んな繰り返し処理があるので、状況に合った使い方をしていきたいですね。
ではまた!

かるーくRuby #2 MiniTest

「2回目で急にMiniTestかよ」って思うかもしれませんが、
これぐらい適当にかるーく書いていきます。

まずテストするクラスを定義します。
今回はBookクラスとします。

本の名前と価格を決めて初期化。
その本を読んだら既読状態とする。って感じですね。

それから、テストクラスを定義

3つのテストをしてます。
1. 初期化で名前、価格がきちんと設定されているか。
2. readしてなければ未読の状態か。
3. readしたら既読になるか。

MiniTestを継承するには

が必要です。

実行してみると、

うまく通ってますね。(temp.rbというファイル名にしてます)

今回はこんなところで。ではまた。

かるーくRuby#1 デフォルト引数

適当にRubyのこと書いてきます。
最初は本当に初歩の初歩でデフォルト引数です。
簡単ですが、おさらい程度に。


def my_hello(a, b="Bob")
puts "Hello, #{a} and #{b}!"
end

このメソッドの出力の仕方を見ていきます。

my_hello() # エラー
my_hello('Alice') # Hello, Alice and Bob!
my_hello('Mike', 'Tom') # Hello, Mike and Tom!
my_hello('Bolt', 'Alice', 'John') # エラー

こんな感じですね。

RubyとJavaScript

こんにちは。

ただ本を読んで勉強するだけだと頭に残らないので、途中からですが、今日からブログで学んだことをアウトプットしていこうと思います。

◼Ruby

現在標準添付ライブラリのところを勉強しています。

Tempfile

一時的なファイルを作るには

require 'tempfile'
Tempfile.open do |f|
f.puts 'temp' # 一時ファイルにtempと書き込み
puts f.path # 一時ファイルのパスを表示
end

とするとできるみたいです。

一時的なファイルが削除されるのは以下の4つの場合です。
・Tempfile#closeの引数にfalse/nil以外を指定して呼び出す
・Tempfils#close!を呼び出す
・インタプリタ終了時
・GC(ガベージコレクション)実行時

上記のようにブロックを渡してcloseしても削除されないので注意ですね。
ブロック終了のタイミングで削除するにはopenではなく、createを使うとできるみたいです。

YAML

yamlファイルを下記のようにオブジェクトとしてロードできる

require 'yaml'
yaml_string = <<EOS
remote:
host: localhost
EOS
p setting = YAML.load(yaml_string)
# {"remote"=>{"host"=>"localhost"}}

◼︎JavaScript

ES2015ではclassが使えるけどそれ以前ではfunctionを使ってクラスを表現するのか。。。

ちょっと癖がありますね。

classでは全てpublicになるみたいだし、思ったより厄介そう。慣れないとですね。