カテゴリー
Ruby

Arrayクラスについて知ろう

この章では配列の順番を変えたりするArrayクラスのメソッドなどについて説明します。これらのメソッドはArrayクラスにあらかじめ備わっている機能です。
初めにsliceメソッドについて説明します。9 a番目の添え字の要素からbの数だけ要素を取り出した新たな配列を作ります。9 この例の場合は犬から数えて3個取り出しています。
結果は9です。
sliceのもう一つの使い方を説明します。99 この構文は引数が1つですが、aの添え字に相当する要素を取り出して、その要素を返してくれます。
結果は「犬」です。
また9と同じ意味を、atメソッドを使って作ることが出来ます。99

次はsliceの引数に範囲演算子を使った例です。99 0番目の要素から3番目の要素までを切り取って新たな配列を返してくれます。9 次は連続していない配列の要素を切り取って、新たな配列にする方法です。
sliceは連続した要素しか切り取ることが出来ませんでした。
連続していない配列の要素を切り取るには9を使います。
9この構文では添え字に相当する要素を取得できます。
では例をみてみましょう。9 このように任意の添え字を指定するとその添え字に相当するデータを配列として取得できます。
結果は9です。

次は配列同士を足したり引いたりする演算を説明します。
では例をみてみましょう。99 num1とnum2と言う2つの配列がありますが、これに対して演算を行います。9 =>配列同士を足すと2つの配列の要素を重複した要素も一緒に足し合わせて、配列を作ります。
結果は9です。9 =>配列同士を足し合わせますが重複した要素は1つの要素とする配列をつくります。
結果は9です。
9=> num1からnum2にある要素を取り除いた配列を作ります。
num2の6,7,8はnum1には存在しないので無視されます。
結果は9です。

次は配列の先頭や末尾に新たな要素を付け加えたり、取り除いたりするメソッドについて説明します。
初めにunshiftメソッドについて説明します。99 この例ではサイを配列の先頭に付け加えていますので、
結果は以下の通りです。9 次はshiftメソッドについて説明します。99 この例では先頭の要素である猫を取り除いているので結果は9です。

次はpushメソッドについて説明します。99 この例ではサイを配列の末尾に付け加えていますので、結果は9です。
次はpopメソッドについて説明します。99 この例では末尾の要素であるネズミを取り除いているので、結果は9です。

次はfirstメソッドについて説明します。99 この例では猫を返しますので、結果は「猫」です。

次はlastメソッドについて説明します。99 この例ではネズミを返しますので、結果は「ネズミ」です。
次はconcatメソッドについて説明します。99 配列animalの末尾に別の配列9を結びつけますので、結果は以下の通りです。9 次はcompactメソッドとcompact!メソッドについて説明します。
違いは「!」が付いているか、付いていないかです。9 compactメソッドはnilを取り除いた新しい配列を作ります。
compact!メソッドもnilを取り除きますが、新しい配列を作るのではなく、元の配列自体を操作します。
では例をみてみましょう。9 結果は9ですが、元の配列も変わっているのが分かります。
次の例をみてみましょう。9 新しい配列を作るので、新たな配列aを作って、それにnilを取り除いた配列を代入しています。
結果は9です。
試しに9で出力すると元の配列9が変わらずに出力されます。
次はdeleteメソッドについて説明します。
では例をみてみましょう。99 猫を削除したので、結果は9です。

次はdelete_atメソッドについて説明します。
では例をみてみましょう。99 deleteは引数に要素そのものを指定するのに対して、9は添え字を指定します。
結果は9です。

次はdelete_ifメソッドについて説明します。
では例をみてみましょう。99 delete_ifメソッドは条件に合致した要素だけを削除します。
配列のそれぞれの要素が変数にセットされ、ブロック内の条件に合致した要素だけを削除します。
この例では7を超えている要素を削除しますので、8、9が削除されます。
結果は9です。

次はreject!メソッドについて説明します。
では例をみてみましょう。99 delete_ifメソッドと同じ働きをするreject!メソッドを説明します。
reject!メソッドは条件に合致した要素だけを削除します。
条件に合致した要素を新しい配列に入れるのではなく、元の配列に対して操作を行います。
結果は9です。

次はrejectメソッドについて説明します。
では例をみてみましょう。99 rejectメソッドは条件に合致した要素だけを削除します。
条件に合致した要素を新しい配列に入れます。
reject!メソッドは元の配列に対する操作でしたね。
結果は9です。

次はuniq!メソッドとuniqメソッドについて説明します。
uniq!メソッドは配列の要素の中で同じ要素があった場合には1つにまとめます。
また、このメソッドは新しい配列を作るのではなく、元の配列に対して操作を行います。
uniqメソッドは配列の要素の中で同じ要素があった場合は1つにまとめます。
また、このメソッドは新しい配列を作ります。9 では例をみてみましょう。9 結果は4つある1が1つになったので、9です。
次の例をみてみましょう。9 このメソッドは新しい配列を作りますので、配列aという新しい配列に結果を代入してから、出力しています。

次はcollec!メソッドについて説明します。
では例をみてみましょう。99 collec!メソッドは要素の数だけブロックの中を実行し、そのブロックで処理した結果を返します。
また、このメソッドは新しい配列を作るのではなく、元の配列に対して操作を行います。
この例では配列の要素に100を足したものを元の配列に入れています。
結果は9です。
これはmap!メソッドを使って、9と書き替えても同じ意味になります。9

次はcollectメソッドについて説明します。
では例をみてみましょう。99 collectメソッドは要素の数だけブロックの中を実行し、そのブロックで処理した結果を新たな配列として作成します
結果は9です。
次はfillメソッドについて説明します。
では例をみてみましょう。99 fillメソッドは配列の要素を指定した要素で置き替えます。
このメソッドは新たな配列を作成するのではなく元の配列に対して操作を行います。
結果は9です。
fillメソッドの別の例をみてみましょう。99 添え字を指定すると添え字以降の要素が指定した要素で置き換わります。
結果は9です。
fillメソッドの別の例をみてみましょう。99 添え字と個数を指定すると添え字から指定した個数だけ、指定した要素で置き替わります。
結果は9です。
さらにfillメソッドの別の例をみてみましょう。99 範囲演算子で「ここからここまで」と指定する方法です。
この例では3から6までの添え字の範囲を猫に変えています。
結果は9です。

次はreverse!メソッドについて説明します。
では例をみてみましょう。99 reverse!メソッドは配列の順序を逆にした配列を作成します。
この動作は新たな配列に対してではなく、元の配列に対して行われます。
結果は9です。
次はreverseメソッドについて説明します。
では例をみてみましょう。99 reverseメソッドは配列の順序を逆にした配列を作成します。
この動作は元の配列に対してではなく、新たな配列に対して行われます。
結果は9です。
次はsort!メソッドについて説明します。
では例をみてみましょう。99 sort!メソッドは配列の要素を小さい順に並び変えます。
この動作は新たな配列に対してではなく、元の配列に対して行われます。
結果は9です。

次はsortメソッドについて説明します。
では例をみてみましょう。99 sortメソッドもsort!メソッドと同じ機能なので、配列の要素を小さい順に並び変えます。この動作は元の配列に対してではなく、新たな配列に対して行われます。
結果は9です。
次の例をみてみましょう。99 このsortメソッドは「ブロックでソートする機能」です(ブロックとは{ }の中です)。
この動作は元の配列に対してではなく、新たな配列に対して行われます。
この例のブロック内は9となっていますが、これは大きい順になります。
結果は9です。
次の例をみてみましょう。99 このsort!メソッドは「ブロックでソートする機能」です。
この動作は新たな配列に対してではなく、元の配列に対して行われます。9 次は配列に文字列を追加する方法について説明します。
基本構文は以下の通りです。9 これは配列に文字列を付け加えて新たな配列を作成するのではなく、元の配列自体を変更します。9 結果は9です。

カテゴリー
Ruby

Numericクラスについて知ろう

この章ではNumericクラスについて説明します。
今まではクラスの作り方を説明してきましたが、Rubyにはあらかじめ定義されたクラスが存在します。
例えばNumericクラス、Stringクラス、Arrayクラス、Hashクラス、Timeクラス、Dateクラスなどがありますが、これらを一つずつ説明していきます。
初めにNumericクラスから説明します。
Numericクラスは以下のクラスに分類できます。9 NumericクラスはIntegerクラス、Floatクラス, Complexクラス, Rationalクラスに分かれ、IntegerクラスはさらにFixnumクラス、Bignumクラスに分かれます。
Numericクラスは今までたくさん使ってきました。
例えば「123」はFixnumクラスのオブジェクトで、「3.4」はFloatクラスのオブジェクトになります。
BignumクラスはFixnumクラスでは収まりきらないほど大きい数の時には自動的にBignumクラスに変換されます。
Rationalは分数の計算などに使われます。
使い方は9と言う形式で書きます。
下の例では分数同士の計算を行っています。
Ruby1.8(バージョン)を使っている場合は9という記述が必要になります(この本ではこの記述は必要ありません)。
では例をみてみましょう。99 この例は9の計算なので、結果は9です。
では次のcomplexクラスの例をみてみましょう。99 複素数の説明はここではしませんが、引数には実数と虚数を指定します。
結果は「2+4i」です。
次はdivmodメソッドについて説明します。これはNumericクラスのメソッドです。
例をみてみましょう。99 意味は「a/b」で計算した答えと余りを配列にしてくれます。
配列の0番目に答えが入り、1番目に余りが入ります。
余りはbの符号と同じ形式で表示されますので、bがマイナス表示ならばマイナスで表示されます。
結果は9です。
次はmoduloメソッドについて説明します。
これはNumericクラスのメソッドです。99 結果は「3」です。
次はremainderメソッドについて説明します。
これはNumericクラスのメソッドです。99 意味は「a%b」で計算した結果と同じです。
答えはaの符号と同じ形式で出力されます。
結果は上が「3」で下が「-3」になります。
次は四捨五入する方法や整数を浮動小数点数に変換する方法について説明します。
初めに整数値から浮動小数点数に変換する「to_fメソッド」について説明します。
このメソッドはIntegerクラスのメソッドです。99 答えは小数点形式の「31.0」になります。
次は四捨五入するroundメソッドについて説明します。
このメソッドは小数点以下を四捨五入します。99 答えは上が「12」で下が「13」です。
次は元の数値を大きい方、小さい方に揃えるメソッドについて説明します。99 ceilは数値を元の数値より大きい整数に揃えます。9 floorは数値を元の数値より小さい整数に揃えます。9 例の結果は上が「2」で下が「1」です
次は乱数を発生させるrandメソッドについて説明します。99 引数を入れなくても大丈夫ですが、その場合は1未満のランダムな浮動小数点数を返します。
引数を与えた場合は0からその数値以内の乱数を返します。
答えはその時々で違う数値が出力されますが、例えば以下のように出力されます。9 では他の例を紹介します。
rand(7)であれば0から6までの乱数値を生成します。
rand(6)+1であれば1から6までの乱数値を生成します。
乱数を発生させるRandomモジュールのrandを使うことでも乱数を発生させることが出来ます。
モジュールの作成方法については説明しましたが、RandomモジュールはRubyで機能が定義されているモジュールです。9 9引数を付けない時は0から1未満の数値が得られます。
引数を与えた場合は0から指定数値以内の乱数を得られます。
例えば引数が12であれば0から11までです。
次はMathモジュールについて説明します。
Mathモジュールは三角関数などの数学関係の演算が簡単に出来るメソッドを提供しています。999 では例をみてみましょう。9 メソッドを実行するには9と書きます
定数を実行するには9という形式で書きます。
結果は以下の通りです。9

カテゴリー
Ruby

モジュールについて知ろう

この章ではモジュールについて説明します。
モジュールは「メソッドをひとまとめにしたもの」です。
クラスはインスタンス変数やメソッドをまとめたものですが、モジュールはメソッドをまとめたものです。
モジュールの基本構文は次の通りです。99 〇モジュール名の先頭は大文字で始めなくてはいけません。
〇モジュールの中にはメソッドや定数を入れることが出来ます。
〇また、モジュールはオブジェクトも継承も作ることはできません。
では例をみてみましょう。99 モジュールの中のメソッドを通常のメソッドのように実行するにはモジュール内のメソッドを9を使用して、モジュールのメソッドとして設定します。
それが以下の箇所です。9 モジュールのメソッドを実行するには9と指定しますが、それが以下の箇所です。9 結果は以下の通りです。99 9次はクラスの中でモジュールをincludeする例です。99 クラスの中や任意の場所にモジュールを入れ込むには前の例で説明した通り9という形式で書きます。9 以下の赤枠の箇所がTestクラスの中でZeiModuleモジュールを取り入れている箇所です。9 以下のようにTestクラスの中のresultメソッドを呼び出すことで、ZeiModuleモジュールの中のshouhizeiメソッドを呼び出しています。
test.result(150000);
結果は以下の通りです。9

カテゴリー
Ruby

アクセス装飾子について知ろう

この章ではアクセス装飾子について説明します。
アクセス装飾子とはメソッドに対してのアクセスを制御するための装飾子です。
Rubyのアクセス装飾子はpublic、protected、private があります。
privateは子クラスのメソッドから親クラスのprivateのメソッドを呼び出すことが可能です。
publicはどこからでも使うことができます。
いままでメソッドにはアクセス装飾子を付けていませんでしたが、アクセス装飾子を付けないとpublicに指定したのと同じ意味になります。
publicが付いたメソッドはどこからでも使うことができるので、子クラスからでも親クラスのメソッドにアクセスできます。
protectedはメソッドを子クラスの中から使えます。
それと自身のクラスの中ではインスタンスメソッドとして使えます。
アクセス装飾子の詳しい説明は例の後に行います。
では例をみてみましょう。99 初めに2種類のアクセル装飾子の指定方法について説明します。
1つ目は例の通り,メソッドの上にアクセス装飾子を指定する方法です。
この方法は複数のメソッドに対しても適応可能です。
例えば以下のようにsample123メソッド、sample456メソッドに対し1つのprivateで指定することができます。9 2つ目は9と言う形式で指定する方法です。
この方法は個別のメソッドに設定します。9 次はprivateの使い方について説明します。
①親クラスの中でprivateをメソッドに付けると親クラスや子クラスのオブジェクトからそのメソッドを呼び出すこはできません。9 ②子クラスのメソッドから親クラスのprivateのメソッドを呼び出すことが可能です。
クラスの中のメソッドからのみprivateのメソッドは実行できます。9 〇同じクラス内のメソッドからprivateのメソッドを呼び出すことは出来ます。
99 次はprotectedについて説明します。
では例をみてみましょう。99 ① 子クラスのメソッドから親クラスのprotectedのメソッドを呼び出すことが可能です。9 また、privateでは出来ませんが、9のようにオブジェクト自身を子クラスのメソッドに送って、そこからprotected指定のメソッドを呼び出すことが出来ます。
つまり、9はオブジェクトの9を引数にして9という形態でprotected指定のsampleメソッドを呼び出します。
結果は以下の通りです。9
②以下のように子クラスのメソッドから直接、親クラスのprotectedメソッドに接続できません。9
③以下の通り、同じクラス内のメソッドからprotectedのメソッドを呼び出すことは出来ます。
showメソッド内でprotectedのkeisanメソッドを呼び出しています。99 以上でprivateとprotectedの説明は終わりにしますが、この他にpublicがありますが、この装飾子はどこからでもアクセスできる装飾子で、あえて9と宣言しなくても、何も付けていなければそのメソッドはpublicを意味します。9

カテゴリー
Ruby

クラスの継承について説明します

この章ではクラスの継承について説明します。
クラスの継承とは元々あるクラスを拡張して、新しいクラスを作成することを言います。新しいクラスを作成するのに元のクラスと変数やメソッドが重なった場合, 元のクラスの機能を使える仕組みが継承です。
つまり、新しいクラスをゼロから作成するのではなく、元のクラスの機能を借りて新しいクラスを作成する仕組みが継承です。
元のクラスを親クラス(スーパークラスとも言います)、その親クラスを受け継いだクラスを子クラス(サブクラスとも言います)と言います。9 では少し長いですが例をみてみましょう。9999999 では説明を始めていきます。
この例では親クラスのBankクラスを受け継いだShoukenクラスを作成しています。
その子クラスの中には親クラスにはない子クラス独自のメソッドや変数を書きます。
なぜなら、子クラスは親クラスのメソッドや変数を全て使うことができるので、あえて親クラスのメソッドや変数を書く必要が無いからです。
ではどこで親クラスの変数を取得しているかと言いますと9です。
superとは親クラスを意味します。
子クラスの中でsuperはinitializeメソッドの中にありますが、この場合にはsuperは親クラスのinitializeメソッドを呼ぶことを意味します。
子クラスのメソッドの中でsuperを使うとそのメソッド名と同名のメソッドを親クラスから呼び出すことができます。
この例では子クラスのinitializeメソッドの中でsuperを使っているので親クラスのinitializeメソッドを呼び出すことができます。9 super(name,age,money)の箇所は以下の作業をしています。
オブジェクトの引数が親クラスのinitializeメソッドの中のインスタンス変数に代入されます。9 そして、initializeメソッドの引数aは@company1に代入されます。9 その他にもこの例では以下のように子クラスのresultメソッドからsuperを使って、親クラスのresultメソッドを呼び出しています。9 実はこのresultメソッドは親クラスにも子クラスにもありますが、このように子クラスの中で親クラスと同じ名前で中身だけが違うメソッドを作ることが出来ます。
これをオーバーライドと言います。
先ほども書きましたが、superの機能を詳しく言いますと子クラスの中のオーバーライドしているメソッドの中にsuperを記述すると親クラスの中の同名のメソッドを呼び出すことができます。
例えば上の例では子クラスのresultメソッドから親クラスのresultメソッドを呼び出しています。
では次の箇所の説明をします。9 複数の箇所で9を使っていますが、「+」は文字列同士を連結する機能がありますので、オブジェクトが数値の場合には9を使用して、文字列に変換してください。9 結果は以下の通りです。9

カテゴリー
Ruby

selfについて知ろう

この章ではselfについて説明します。
では例をみてみましょう。9999 selfはメソッド内で実行されると、そのメソッドを実行しているオブジェクト自身を参照することが出来ます。
この例ではchangeメソッドの中でmyname変数の中身を変えていますが、ローカル変数とインスタンス変数の名前が同じです。
そこでselfをインスタンス変数の前に9と言う形式で付けることでローカル変数ではなくでインスタンス変数を指し示すことが出来ます。9 では次の例をみてみましょう。999 では説明を始めます。
selfは他にもクラスメソッドを作成する際にも使われます。
クラスメソッドは9と言う形式でしたが、9と言う形式でも書くことも出来ます。

カテゴリー
Ruby

クラス変数について知ろう

この章ではクラス変数について説明します。
変数名の前に@@が付いた変数はクラス変数と呼ばれています。
クラス変数はインスタンス変数のようにインスタンスに属する変数と違ってクラスに属しています。
では例をみてみましょう。99999 前の章では変数名の前に@@が付いた変数はクラス変数であると説明しましたが、この例では@@count1がクラス変数です。このクラス変数はクラスの中のメソッドではない箇所で宣言します。
この例ではオブジェクトを2つ以下のように作っています。9 インスタンス変数の場合はこの2つのオブジェクト間ではインスタンス変数の値を共有できません。まったく別個のインスタンス変数になります。
これとは逆にクラス変数はクラスに属しているので、オブジェクトごとにクラス変数の値が変わるわけではありません。どんなに新しいオブジェクトを作成してもクラス変数を共有して使用することが出来ます。
以下の箇所ではオブジェクトを作成するたびにクラス変数であるcount1に1を足しています。9 そして、以下の箇所でそれぞれのオブジェクトでcountメソッドを呼び出していますが、出力するとクラス変数@@count1がカウントされているのが解ります。9 結果は以下の通りです。9

カテゴリー
Ruby

クラスメソッドについて知ろう

この章ではクラスメソッドについて説明します。
クラスメソッドの前にクラス変数について説明します。
変数名の前に@@が付いた変数はクラス変数と呼ばれています。
クラス変数はインスタンス変数のようなオブジェクトに属する変数と違ってクラスに属している変数です。
クラスメソッドはインスタンスメソッドと違ってクラスから直接呼び出されるメソッドです。
クラスメソッドはオブジェクトを作成しなくてもクラスメソッドを使うことができます。
クラス変数は次の章で説明しますので、この章ではクラスメソッドの説明をします。
では例をみてみましょう。999
では説明を始めます。
クラスメソッドの構文は以下の通りです。9 クラスメソッドの特徴はクラスから直接メソッドを呼び出せることです。
つまり、newでオブジェクトを作成しなくてもメソッドが呼び出せます。
クラスメソッドは9という構文で作成します。9 クラスメソッドを呼び出すには9 のように9と言う形式で書きます。

結果は「10900」です。

カテゴリー
Ruby

クラスについて知ろう

この章ではクラスについて説明します。
今までのプログラムでは変数とメソッドを扱ってきましたが、クラスと言う機能を使うことで、多くの変数とメソッドを1つの機能体として働かせてデータを処理することが出来ます。
クラスとは物を作る設計図に例えられます。設計図は車や家や鉛筆をつくる場合に必要ですが、この設計図に当たるものがクラスです。
例えば車や家や鉛筆の中には色々な部品が含まれていますが、それらの部品には「状態」や「ふるまい」があります。
鉛筆であれば「状態」は鉛筆の形、芯、線の濃さなどで、「ふるまい」は線を引く、削るなどの動作です。
その「状態」や「ふるまい」をクラスと言う設計図に書いていきます。
「状態」を変数で書き、「ふるまい」をメソッドで書くことになります。
その「状態」や「ふるまい」に指示を出すのはオブジェクトの役割です。
例えば「線を消す」など具体的な指示をオブジェクトと言う司令塔から出します。
クラスの基本構文は以下の通りです。9 クラス名の初めの一文字目は大文字のアルファベットで書きます。
classとendの間に変数やメソッドなどを記述して、クラスの中身を作ります。
クラスはただの設計図なので、このクラスに指示を出す必要がありますが、それがオブジェクトです。9 〇引数は省略できます。
〇このオブジェクトはインスタンスとも呼ばれています。
ではクラスの例を見てみましょう。999 クラスの中に@ マークの付いている変数がありますが、これはインスタンス変数と呼ばれていまして、クラスの中で使われます。9 =>オブジェクトの基本構文は9と、説明しましたが、このオブジェクトを作成する過程でクラスの中のinitializeメソッドを自動的に呼び出してくれます。nyuukinメソッドやshukkinメソッドは自身で作ったメソッドですが、このinitializeメソッドはRubyであらかじめ定義されているメソッドです。
そしてこの9の中の引数100000がinitializeメソッドの引数(この例ではc)に入ります。
他の言語ではコンストラクタと呼ばれる機能です。
このようにinitializeメソッドを使ってインスタンス変数に値を設定することが出来ます。
また以下の通り、初めからインスタンス変数に値を設定することもできます。
その場合には9のように引数を省略できます。9 次に以下の箇所の説明をします。9 =>クラス内のメソッドにデータを渡すには9という形式で書きます。
そうするとクラス内のメソッドが実行されます。
最後にshowメソッドを出力するとnyuukinメソッドやshukkinメソッドで計算された結果が入っている@zandakaが返されますので、これをprintで出力しています。
結果は「91000」です。
次の例はinitializeメソッドの引数にデフォルト値を設定する例です。999 初期値を設定するときには以下のように9とデフォルト値を設定してください。
メソッドの章で説明した通り、メソッドにはあらかじめ値を設定することができます。9 このようにメソッドに引数を設定した時にはオブジェクトの引数をカラにしても、そのメソッドの引数の設定値が使用されます。
先ほども説明しましたが、もう一度クラスの中のメソッドを呼び出す方法について説明します。
この例ではクラスの中で3つのメソッドを定義しています。9 これらのメソッドを使用するためには9という構文で書きます(initializeメソッドだけはオブジェクトを作成過程で自動的に呼び出されるので、明示的にこの構文を使う必要はありません)。
この構文でメソッドにデータを入れていきます。この例では以下のように書いています。99 引数が無い場合にはshowメソッドのように省略することができます。9 これらのメソッドはオブジェクトからアクセスするのでインスタンスメソッドと言います。
今までのトップレベルのメソッドは9のようにメソッド名だけでメソッドを呼び出していましたが、オブジェクトから呼び出す場合は9で書くことを覚えておいてください。
次にインスタンス変数について説明します。
インスタンス変数はインスタンスメソッドからのみ参照できますので、メソッドを通してインスタンス変数の値を取得します。
ですので、この例ではすべてメソッドの中でインスタンス変数の値を足したり、引いたりしています。
では次の説明に進みます。
オブジェクトは1つだけではなく、次のように変数を変えていただくと何個でも作ることが出来ます。
例えばこの例ではbooksとbooks2の2つを作成しています。9 オブジェクトをたくさん作成してもインスタンス変数はオブジェクトごとに値が設定されますので、booksの@zandakaとbooks2の@zandakaの間には関係性はありません。
結果は以下の通りです。9
では次の例を見てみましょう。9999 では説明をしていきます。
initializeメソッドでインスタンス変数に値を設定することもできますし、setメソッド(メソッド名はsetを付けなくても構いません)を使っても値を設定することができます。
この例ではsetメソッドで設定した値でinitializeメソッドで設定した値を上書きしていますが、initializeメソッドで設定したデータよりsetメソッドで設定したデータの方が優先されます。
setメソッドだけで値を設定したい場合にはinitializeメソッドは書かなくても結構です。
ではsetメソッドについて説明します。
インスタンス変数に値をセットするためにはinitializeメソッドやsetメソッドを通常使用します。9 =>「set..」というのはインスタンス変数の値を設定する時に使います。
特に「set..」で書かなくてはならないという決まりがあるわけではありませんが、解りやすいので慣習になっています。
通常はインスタンス変数ごとにsetメソッドを書きます。

次はgetメソッドについて説明します。9 =>「get..」と言うのは値を呼び出し元に返す時に使います。
特に「get..」で書かなくてはならないと言う決まりがあるわけではありませんが、解りやすいので慣習になっています。
通常はインスタンス変数ごとにgetメソッドを書きます。
getメソッドは値を返すために作られるメソッドです。
結果は以下の通りです。9 しかし、インスタンス変数の数だけ、このようなメソッドを書くのは面倒に思いませんか?
そこでRubyにはそれを簡潔にする機能が備わっています。
次の例で説明します。99 では説明を始めます。
9と、書くことで例えば本来ならばsetNameメソッドとgetNameメソッドを2つ書かなくてはいけませんでしたが、9と書くだけでこれらの2つのメソッドと同じことを行わせることが出来ます。
この9の中の変数に値を設定するには9という構文で入れていきます。
この例では以下のように入れています。9 インスタンス変数の値を出力するには9という構文で記述します。
この例では以下の箇所です。9 では次の例に進みます。99 では説明を始めます。9 「attr_writer :変数名」は以下のようなsetメソッドと同じ役割があります。9 「attr_reader :変数名」は以下のようなgetメソッドと同じ役割があります。9 使い方は9と同じです。

カテゴリー
Ruby

星座判定メソッドを作ろう

この章では配列、if文、メソッドを使用して、星座判定システムを作成します。99999 9=>getsメソッドはユーザーがキーボードから入力した文字列を返します。
そして、その文字列を9で整数に変換します。前の章では自身でメソッドを作ってきましたが、getsメソッドなどはRubyであらかじめ機能が定義されているメソッドです。
つまり、このメソッドはユーザーが入力した文字列を整数値に変換するのですが、例え数字で入力したとしても、入力値は文字列として入力されるので、これを整数値に変換するのが9です。
これらの2つのメソッドを「.」で繋ぎます。
このプログラムでは2か所ユーザー入力の箇所がありますが、それらがbirthmonthとbirthdayに代入されています。99 この配列内は山羊座から順番通りに並んでいますので、決してランダムに並んでいるわけではありません。
day1には各星座の月の末日を配列に入れています。
day2には1月から12月までの末日を配列に入れています。9 =>例えばmonthに1が入り、dayに19が入っているとします。
そうすると9の部分でcountが0の時にifの条件式がtrueになりますので、入れ子のif文の条件式の判定に入ります。
このようにif文は入れ子にすることが出来ます。
つまり、初めのif文がtrueの場合に次のif文でさらに条件式を判定します。9 「day <= day1[count]」の中のdayには19が入り、1周目の9にはday1の0番目の要素である19が入っていますので、条件式はtrueになり、nameにはnames配列の0番目の要素であるやぎ座が入ります。
例えばdayに19ではなく23が入っていると仮定すると9はfalseになるので、9の条件式の判定に入ります。
ここでday2[count]にはday2の0番目の要素である31が入っていますのでtrueになり、name には9に該当する星座が入ります。
9のcountには1周目では0が入っていますので9で余りを求めると1になります。
結果、names[1]となり、みずがめ座が入ることになります。
ではさらに、以下の箇所の詳しい説明をします。9 「count + 1」の箇所の説明をしますと例えばmonthが1で、day が23の場合には99になりfalseになるので、elsifのブロックに入りますが、1月は やぎ座とみずがめ座しかなく、やぎ座ではないのならばみずがめ座しかないのでnames配列を1つ進めるために9で1を足しています。
names.lengthを使っている理由は例えば9 の中のcountに11が入ると9の箇所が12になりますが、9の箇所が無いと仮定すると9となってしまいますが、実際に9という要素はありません。
そこで9で余りを0(12割る12で余り0)にして山羊座が出るように設計しています。
つまり、該当する以下の余りの数字がnames配列の添え字になり、その該当するデータがnameに入ります。9 最後にreturnで返ってきたnamesの値がjuに入り、printで出力します。
結果は以下の通りです。9