カテゴリー
Ruby

メソッドについて知ろう

この章ではメソッドについて説明します。
メソッドとは引数と言うデータを受け取って、ある一定の処理を行い、戻り値を呼び出し元に返す命令のことを言います。
引数とはメソッドを実行するときにメソッドが使うデータのことを言います。戻り値とは、メソッドを実行した結果、返される値です。
簡単に言いますと「このデータ(これは引数に相当します)を渡すので、この作業をやってくださいね」と命令するとメソッドという機械が作業をしてくれて、その結果(戻り値)を返してくれるというのが一連メソッドの流れです。
例えば「消費税を自動で計算するメソッド」を自分で作りたいとします。
その場合、商品の代金をメソッドに渡すと商品金額に税率を掛けた処理をして、その結果を返すというメソッドを作ることになります。
このような一連の処理を作ることをメソッドを定義すると言います。
通常メソッドはクラス(クラスについては「クラスについて知ろう」で説明します)の中に書きますが、クラスの中ではなくても書くことが出来ます。
クラスの中ではない位置はトップレベルと呼ばれています。これまでの学習ではまだクラスの説明をしていないので、すべてトップレベルで記述してきました。
ここではクラスの中のメソッドではなく、トップレベルでのメソッドの記述方法について説明します。9 〇このメソッドの構文の中にある引数を仮引数と言います。
先ほどの書きましたが引数とはメソッドの中で使われるデータのことです。
引数1を第1引数、引数2を第2引数と言いますが、引数の数はメソッドにより変わります。
〇メソッド名の付け方は基本的には変数の命名規則と同じですが、変数と違って大文字のアルファベットも可能です。
〇引数が複数ある場合はカンマで区切りますが、引数が必要ないメソッドであるならば引数は省略することができます。
実はメソッドは定義しただけでは機能しません。
メソッドを実行するためにはメソッドを呼び出さなくてはいけません。9 今のところはクラスの説明をしていないので、この章ではトップレベルにメソッドが書かれていた場合でのメソッドの呼び出し方について説明します。
〇メソッドの呼び出しの中にある引数を実引数と言います。
〇引数が複数ある場合はカンマで区切りますが、引数が必要ないメソッドであるならば引数は省略することが出来ます。
では例をみてみましょう。9 =>このメソッドは足し算を行うと言う機能を持っています。
このメソッドの中にある引数a,bはこのメソッドが実行されている間だけ有効な引数なので関数の外で出力することは出来ません。これをローカル変数と言います。
このメソッドを呼び出している箇所が9です。
つまり、9という形式でメソッドを呼び出します。
この引数の2はメソッドの中の引数aにセットされ、3はメソッドの中の引数bにセットされます。
そして、このメソッドを実行した結果を9の箇所で出力しています。9 この例の結果は5が出力されます。
ここで注意してほしいことはメソッドの呼び出しよりも、メソッドの定義を後に書かないでください。
つまり、以下の例はエラーになります。9
次は仮引数にあらかじめ初期値を設定する方法について説明します。
初期値を設定するすると、メソッドの呼び出しの際に実引数を設定する必要はありません。
では例をみてみましょう。9 実引数が9のようにカラですのでメソッドの仮引数が使われます。
つまり、aが2、bが3と、仮引数が設定してありますので、この値が使われます。
このように仮引数に値が設定してあれば実引数を省略することが出来ます。
結果は5が出力されます。
仮引数に初期値を設定した場合でも、実引数を設定しても問題ありません。
その場合は実引数が使われます。
では例をみてみましょう。9 実引数と仮引数の両方に引数の値を設定していますが、実引数の5と8が優先されますので、結果は13です。
次の例は仮引数を2つ設定して、実引数を1つしか設定しなかった場合はどうなるか見てみます。9 この場合は仮引数aに8が代入されるので、仮引数 aの2は使われません。
bはそのまま3が使われます。
結果は11です。
次は実引数と仮引数の数が合わない場合の例です。9 実引数が3つで、仮引数が2つなので、実引数が1つ多いです。
結果は次の通りエラーです。9 意味は引数の数が間違っていますと書かれています。
次は仮引数を設定する場合の注意点について説明します。
では例をみてみましょう。9 仮引数の設定値はすべてを設定する必要はなく、例えば例のように2つの引数の中の1つだけを設定することも出来ます。
しかし、メソッド内の引数の設定は右端からしてください。
つまり9 のように、第1引数(先頭の引数)だけを設定して、後の引数を設定しないという形式は取ることができません。
次は実引数に変数を使った例について説明します。99 のように実引数に変数を使用することも出来ます。
次はメソッドに配列を渡す方法について説明します。
では例をみてみましょう。99 では説明をしていきます。99 そして、計算の後にその結果を呼び出し元の9に戻します。
このようにメソッドの実行結果をメソッドの呼び出し側に返すにはreturnを使います。
具体的には9と言う形式で書きます。
例では9の箇所です。9 結果は「答えは530」です。
この例の流れを図にしましたので参考にしてください。9 次の例もメソッドに配列を渡しているのですが、前の例とは違う形態で渡します。
では例をみてみましょう。9 前の例では配列をメソッドに渡した後に、その配列から要素を取り出すためにfor文を使っていましたが、この例ではメソッドに引数を渡すときに実引数の先頭に「*」を付けて、仮引数で個別に要素を受け取ります。
配列である実引数の先頭に「*」を付けると仮引数では配列の要素が分解されて渡されます。
メソッド側には配列の要素の数だけ仮引数を用意してください。
2は仮引数aに入り、3は仮引数bに入り、8は仮引数 cに入ります。
結果は「答えは13」です。
前の例では実引数の先頭に「*」を付けましたが、今度は仮引数にも「*」を付ける例を紹介します。99 実引数の配列名の前に「*」を付けるまでは前の例と同じですが、仮引数にも「*」を使用します。
仮引数の変数aには9が入り、残りの要素は9に配列として入ります。

配列の実引数に「*」を付けて渡して、仮引数では「普通の変数と「*」を付けた変数」で受け取ると配列の要素を分けて代入することができます。
その後、配列の要素をfor文で処理しています。9 結果をreturnで返しているのですが、この例の場合は2つの変数を9のように返しています。
複数の変数を返す時にはカンマで区切って記述してください。
その戻り値をどのように受け取るかと言いますと、9という形式で受け取ります。
この方法は複数の値を一度で受け取ることができます。これを多重代入と言います。
この例では以下の箇所です。9 多重代入についてもう少し例を出して説明します。9 では以下の場合にはどうでしょうか。9 では次の例をみてみましょう。9 では次の例をみてみましょう。9 次の例はメソッドの中でヒアドキュメントを使った例です。99 この例は与えた実引数の値をヒアドキュメントで出力しています。
結果は以下の通りです。9

カテゴリー
Ruby

redoについて知ろう

この章ではredoについて説明します。
redoはnextの機能と似ていますが、少し注意が必要です。
redoについての詳しい説明は次の例の後にします。
では例をみてみましょう。99 nextは条件にマッチしたら、先頭に戻ってループを続け、その周回の要素は出力されませんでした(「nextについて知ろう」の例では5だけが抜けていました)。
redoも条件にマッチしたら先頭に戻るのですが、同じ繰り返しをもう一度行います。
同じ繰り返しを行うので、5の要素も改めて出力されることになります。
しかし,カウントの値aはその間もカウントされていますので、配列の5の要素を出力するにしても、カウントaは6になっていますので、出力は「カウント6は5」になります。
結果は以下の通りです。9

カテゴリー
Ruby

nextについて知ろう

この章ではnextについて説明します。
nextはループの中で、ある条件下に当てはまった時に現在の周回を抜けて、次の周回のループに行動を移します。
nextはbreakのようにループ自体を止めることはしません。
では例をみてみましょう。99 aが5になったらnextを実行し、5になっていなければ以下の文を実行して、またブロックの先頭に戻ります。9 nextとは現在の周回を抜けて、次の周回のループに行動が移ると言う意味を持っていますので、aと5が同じになったら「カウント5は5」を出力することなく、先頭に戻ってループを続けます。5だけが抜けていますが、ループ自体は止まっていないことを確認してください。
結果は以下の通りです。9

カテゴリー
Ruby

loop doとbreakについて知ろう

この章では無限に繰り返しを行うloopについて説明します。
loop doはそのまま何も条件付けを行わないと無限に中身を繰り返します(whileみたいに条件判断する箇所がありません)。
条件づけにはifなどを使うのですが、その中でbreakを指定します。
breakとはループを強制的に終了させる意味を持っています。
では例を見てみましょう。9 9aが5になったらbreakを実行します。
aが5になっていなければif文は実行しませんので9を実行して、9の箇所でaに1を足します。
そしてまたloop doの先頭に戻ります。
breakとはループを強制的に終了させる意味を持っていますので、aと5がイコールになったらループを抜けます。
breakで抜けた後は、それ以降の文は実行されません。
結果は「猫」を5回出力させます。9
次の例ではeachの中でbreakを使っています。9 この例ではaが5になったらbreakするので、5は出力しません。
結果は以下の通りです。9 このようにbreak文はeach,while,until,forなどの繰り返し文の中で「ある条件」に当てはまった時に、その繰り返し文を終了させるために使用します。
「ある条件」とはこの例の場合に9はです。

カテゴリー
Ruby

その他の繰り返し文について知ろう

配列の章でも説明しましたが9も繰り返し文の一種です。
配列の章で書いた例をもう一度載せておきますので復習してみてください。9 9このように書くことで配列のすべての要素を繰り返し取り出してくれます。
結果は以下の通りです。9 単純に繰り返し回数を指定して、処理を繰り返す場合にはtimesメソッドが便利です。9 〇「繰り返す回数」に浮動小数点数は使用できません。
〇「変数」は省略できます。
では例をみてみましょう。9 もしくは次のように書くことも出来ます。9 では説明をしていきます。9 =>繰り返す回数に3を指定したので3回 猫を出力します。
基本構文にある変数は省略していますが、その場合にはprint文を回数分だけ繰り返すだけです。9 =>繰り返す回数に3を指定したので、0から3回繰り返します。
変数iには1からではなく0から順番に数値が代入されるので注意してください。
結果は次の通りです。9
次はuptoについて説明します。
では例をみてみましょう。99 この構文はaの値からbの値まで1回繰り返すごとに1を足していきます。
aはbより大きい値を指定できませんので注意してください。
また、aとbには浮動小数点数は使用できません。
例の意味は1から始まって、「繰り返し1」が出力し終えたら、1を足して「繰り返し2」を出力し、これを「繰り返し5」まで繰り返します。
結果は以下の通りです。9 次のように変数を省略して書くと以下のようになります。
この場合にはprint文を5回繰り返すだけです。9 結果は以下の通りです。9
次はdowntoについて説明します。
では例をみてみましょう。99 この構文はaの値からbの値まで1回のループごとに1を引いていきます。
aはbより小さい値を指定できませんので注意してください。
また、aとbには浮動小数点数は使用できません。
この例の意味は5から始まって、「繰り返し5」が出力し終えたら、1を引いて「繰り返し4」を出力し、これを「繰り返し1」になるまで繰り返します。
結果は以下の通りです。9
次は1回ループするごとに、指定した値を足していく構文について説明します。
では例をみてみましょう。99 aからbに達するまで,一回ループするごとにcを足します。
cがプラスの値の場合はaはbより小さいことが必要です。
cがマイナスの値の場合はaはbより大きいことが必要です。
cが省略された場合は1となります。
浮動小数点数も指定できます。
では例の説明をしていきます。9 =>2から始まって、ループごとに2を足して10になったら繰り返し文を終えます。9 =>基本構文のcの箇所を省略した場合は1ずつ足されていきます。
結果は以下の通りです。9 stepに関してもう一例あげます。9 初めのstep文は20からループごとに5ずつ引いていって10になったらループを終えます。
次のstep文は浮動小数点数を指定している例です。
1.4から8.9まで、2.5を足しながら繰り返します。
結果は以下の通りです。9

カテゴリー
Ruby

untilについて知ろう

この章ではuntil文について説明します。
untilもwhileと同じく繰り返しを行う場面で使用されます。
untilは実行される時に条件式がtrueもしくはfalseであるのかをチェックします。
falseである場合はuntilの処理文が実行されます。
trueである場合には処理文は実行されません。
whileは条件式がtrueの場合に中身が実行されるので、違いを確認してください。
では例をみてみましょう。9 until文の構文は以下の通りです。9 では実行の手順について説明します。
① numに1を入れます。goukeiに0を入れます。
num>3がfalseなので、繰り返し文を実行します。

② goukei +=numが実行されます。
これは9と同じ意味なので9と計算され、1がgoukeiに代入されます。

③ num +=1の箇所で9と計算され numには2が代入されます。

④先頭に戻って9を評価しますが、まだnumは2でfalseなので、繰り返し文は実行されます。

⑤ goukei +=numが実行されます。
これは9と計算され、3がgoukeiに代入されます。

⑥ num +=1は9と計算され、numには3が代入されます。

⑦先頭に戻って9を評価しますが、まだnumは3でfalseなので、繰り返し文は実行されます。

⑧ goukei +=numが実行されます。
これは9と計算され、6がgoukeiに代入されます。

⑨ num +=1は
9と計算されnumには4が代入されます。

⑩先頭に戻って9を評価しますが、
ここでnumは4でtrueになり繰り返し文は終了します。

⑪最後に9を実行して、6を出力します。
これをwhileを使って書き替えると次のようになります。9 「while !(num> 3)」のようにwhileと条件式の間に否定の演算子「!」を付けるとuntilを使ったのと同じ意味になります。
次はuntil装飾子について説明します。
until装飾子とはuntil条件文 を末尾に書く形式のことを言います。9 条件式がfalseの間は繰り返し文が実行されます。
では例をみてみましょう。9 numを出力してから、untilの条件式の判定に入るので結果は1から4までを出力します。
結果は以下の通りです。9

カテゴリー
Ruby

自動計算プログラムを作ろう

この章では5問の計算式を表示させ、それに対して答えを入力させます。
そして、正解数を表示して、終わりになります。999 では先頭から説明していきます。9 ここではカラの配列を作成しています。
answerにはユーザーが入力した答えが入ります。
resultには正解値が入ります。
後からこれらの配列には5つのデータがそれぞれの配列に入ります。
次に以下の箇所の説明をします。
randメソッドについては説明済みですが、0から50までの数値をランダムに生成します。9 次に以下の箇所の説明をします。9 ここでは計算式の表示をしています。
つまり、以下の計算式の表示を行います。
whileで5回ループしているので、計算式も5つ表示されます。9 次に以下の箇所の説明をします。
説明済みですが、この箇所は9とgetsメソッドを使って、入力値を整数値に変換しています。9 answerにはユーザーが入力した答えが以下の順序で入ります。
resultには正解値が以下の順序で入っています。9 次の箇所では入力値と正解値を比べて、trueであればrightanwerに1が足されていきます。
このif文はwhile文の中に入っていますので、5回の答え合わせを行います。9 以下の箇所で正解数を出力して終了です。9

カテゴリー
Ruby

while文について知ろう

この章ではwhile文について説明します。
while文はfor文と同じく、何度も繰り返すような処理を必要とする時に使用します。
では例をみてみましょう。9 while文の構文は以下の通りです。9 〇 doは省略可能です。
初めにwhileが実行される時に条件式がtrueもしくはfalseなのかをチェックします。trueである場合はwhileが実行されます。
falseである場合はwhileは実行されません。
では実際の動きを見てみましょう。
① numに0を代入します。

②条件式(num<3)をチェックした結果、trueなので繰り返し文を実行し、9で 0を出力します。

③ num +=1の箇所で0であったnumに1を足して、1にします。

④それからまたwhileの先頭に戻って条件式を評価します。
条件式をチェックした結果、numは3以下でtrueなので9を実行して1を出力します。

⑤ num +=1の箇所で1であったnumに1を足して、2にします。

⑥それからまたwhileの先頭に戻って条件式を評価します。
条件式をチェックした結果、numは3以下でtrueなので9を実行して2を出力します。

⑦ num +=1の箇所で2であったnumに1を足して、3にします。

⑧それからまたwhileの先頭に戻って条件式を評価します。
条件式をチェックした結果、numは3以下ではないので、falseになりwhile文が終了になります。
結果は以下の通りです。9
次はwhile装飾子について説明します。
while装飾子は9を末尾に書く形式のことを言います。9 では例をみてみましょう。9 numを出力してから、whileの条件式の判定に入るので結果は1から6までを出力します。
結果は以下の通りです。9

カテゴリー
Ruby

for文について知ろう

この章では繰り返し構文について説明します。
同じような処理を何度も繰り返すプログラムを書く場合、以下のように同じ処理を何回も書くのは面倒ですし、間違いも多くなりがちです。9 そこでforという構文を使うと繰り返し文を簡潔に書くことが出来ます。
for文の構文は以下の通りです。9 「オブジェクト」には範囲オブジェクトや配列オブジェクトやハッシュオブジェクトを指定します。
これまで説明してきた範囲演算子は範囲オブジェクトに属しています。
では例をみてみましょう。9 この例では1から始まって、その数値が9の中のaにセットされ、最後に9で出力します。
次は2が9のaにセットされ、9で出力します。
次は3が9のaにセットされ、9で出力します。
次は4が9のaにセットされ、9で出力します。
図にすると以下のような順序で出力されます。9 次はfor文を使って配列の要素を出力する例です。9 配列の要素の1個1個がaに代入されて、printで出力しています。9 結果は以下の通りです。9 次はfor文を使ってハッシュの要素を出力する例です。9 =>ハッシュの場合にはfor文の中の変数は2つ使用します。
forの中のaとbには9が入り,9が順番に入ります。9 結果は以下の通りです。9

カテゴリー
Ruby

if文で占いを作ろう

この章では今まで説明してきたif文と配列を使って、占いプログラムを作ります。
では例をみてみましょう。99 resultは大吉から大凶までの要素を持つ配列になっています。
answerには0から6までのランダムな数が入ります。
ランダムな数を得るにはrandメソッドを使います(メソッドの意味については「メソッドについて知ろう」の章で説明します)。9 整数値を入力した場合には0から9までの乱数値を生成します。
0もしくは何も入力しない場合は0以上 1未満の乱数値を生成します。
この例のrand(7)であれば0から6までの乱数値を生成します(7までではありません)。
rand(6)+1であれば1から6までの乱数値を生成します。
乱数を得た後はif文で判定を行います。
例えば乱数が0であれば9という条件式になるので、「大吉です」が出力されます。
結果は以下の通り、毎回違う値が出力されます。9 これをcase..when文で書き換えると以下のようになります(先頭の2行は省略)。99