この章ではcase文について説明します。
case文はif文と同じ機能があります。
では例をみてみましょう。 この基本構文の意味は対象のオブジェクトが値 1であるならば実行文1を、対象のオブジェクトが値2であるならば実行文2を、その他は実行文 3を実行すると言う意味です。
この例の結果は以下の通りです。 先ほどのcase文をif文で書き換えると以下の通りです。 whenの後の値はのように複数書いても問題ありませんが、その場合にはカンマで区切ってください。
では例をみてみましょう。
animal の値のと以下のwhenの条件部分が一致しますのでが実行されます。 結果は以下の通りです。 では次の例を見てみましょう。 この例は配列のすべての要素に対して、その要素がどの範疇にあるのかをcase文でチェックしています。
配列の要素が1つずつiにセットされ、その値がどの場所に収まっているかをwhenで確認しています。
each doについては配列の章で説明しましたので、忘れた方は見直してください。
「1..30」の間に「..」がありますが、これを範囲演算子といいます。
範囲演算子はと言う形式で書きますので、この例では1から30までという意味になります。
文字列で書く場合はという構文で書きます。
例えばと、書きます。
結果は以下の通りです。 範囲の作成方法は他にもあり、以下の構文で書くことが出来ます。これはRangeクラスのオブジェクトですが、クラスについては「クラスについて知ろう」で説明します。 exclude_endをtrueで指定すると終端の数値を含みません。つまり、と書きますと30は含まれません。
では例をみてみましょう。 結果は以下の通りです。
月: 2015年5月
unlessについて知ろう
三項演算子について知ろう
if文で星座判定をしよう
この章ではif文で星座判定プログラムを作成します。
少し長いプログラムですが、if文が繋がっているだけです。
では例をみてみましょう。 このプログラムではユーザーに誕生日の月と日を入力させて、その結果を表示するプログラムです。
では先頭から説明をしていきます。
ユーザーに文字を入力させるにはgetsメソッドを使います(メソッドについては「メソッドについて知ろう」で説明します)。
getsメソッドはユーザーがキーボードから入力した文字列を返します。
文字列を返すので、これを整数値に変換しないとif文の判定ができません。
そこでさらにを使います。
入力値は文字列として入力されるので、これを整数値に変換するのがです。
この章はif文の入れ子を説明するために用意したので、これらのメソッドについては「星座判定メソッドを作ろう」「stringクラスについて知ろう」で詳しく説明します。
これらのメソッドで行うことは以下の赤枠の箇所の入力です。
入力するまでプログラムの実行は止まりますので、入力をしてエンターキーを押すと次に進みます。 では次に進みます。
このプログラムのif文の入れ子を使ってます。
つまり、if文の中にif文が入っている構造です。 例えばmonthに1が入っているとします。
そうすると上のif文のがtrueになりますので、さらに入れ子のif文の判定に入ります。
1月ですと、山羊座と水瓶座の2つの星座がありますので、という形式でif文の入れ子の条件式を作成します。
そして、dayの値が31を超えると「間違い」が出力されます。
まとめますと、入れ子のif文とは始めのif文の条件式にマッチしたものに対して、さらに条件を絞りたい場合に使われます。
つまり、1月という初めの条件式にマッチしたら、さらに山羊座か水瓶座を調べたいので、if文の入れ子を使っています。
論理演算子を使ってみよう
論理演算子を使うことで複雑な条件式を記述することが可能になります。
論理演算子を挟んだ左辺と右辺には関係演算子を使った条件式などを記述します。 「&&」と同じ働きをする演算子に「and」がありますが、この演算子は「&&」よりも 優先順位の低い演算子です。
優先順位の説明は後ほどします。
「||」と同じ働きをする演算子にorがありますが、この演算子は「||」よりも 優先順位の低い演算子です。
では例をみてみましょう。 結果は以下の通りです。 &&の右辺も左辺も条件を満たしている場合のみtrueになるので、この例の場合は両辺とも条件を満たしているのでtrueになります。
では次の例をみてみましょう。 結果は以下の通りです。 「||演算子」の場合は右辺か左辺のどちらかの条件式がtrueの場合にtrueとなります。
この例では左辺は条件を満たしているけど、右辺は条件を満たしていませんが全体はtrueになります。
では次の例をみてみましょう。 「!」は否定を表します。
条件式がtrueではない時にif文が実行されるので、この例ではif文が実行されます。
結果は次の通りです。 では論理演算子の優先順位とは何かを説明します。
論理演算子には順位がありまして、の方がandやorよりも優先度が高いのです。
優先順位が高いとはその演算子から先に実行されると言うことです。
では次の例をみてみましょう。 「and」より「||」の方が優先順位が高いので結びつきは以下のカッコのようになります。
優先順位が高い方が先に判断されます。 以下のようにand同士が結ぶ付くわけではありません。
これが優先順位の意味です。 結果は以下の通りです。
条件分岐ifの公式3
条件分岐ifの公式2
条件分岐ifの公式1
この章では条件分岐について説明します。
条件分岐を日常の場面で説明します。
例えば、生活の場面で、もし、お金が10000円あったらフランス料理にして、20000円あったら中華料理にすると判断していますが、プログラムでもこのような表現ができるのです。
このように条件によって表現を変えることを条件分岐と言います。 条件式は条件を満たしていればtrueを返し、条件を満たしていないならばfalseを返します。
そして、trueの時にif文が実行されます(true,falseについては後ほど説明します)。
条件式には次の表のような関係演算子を使ってとかなどをのような記号を使って表現します。 では例をみてみましょう。 aは12で3より大きいので、条件を満たしているのでtrueになります。
このように条件を満たしていることをtrueと言います。
条件を満たしているのでif文は実行されます。
もっと正確に言うと、条件式は条件を満たしていればtrueになり、if文が実行され、条件を満たしていないならばfalseになり、if文は実行されません。
print でを出力するとtrueが出力されます。
print でを出力するとfalseが出力されます。
結果は以下の通りです。
次はfalseの例を紹介します。 結果は何も表示されません。
なぜかと言いますとの部分が条件を満たしていないからです。
つまり条件式がfalseになり、ifの中は実行されません。
では例をみてみましょう。 この例は関係演算子を使っていませんが、条件式に変数を入れています。
変数を入れた時のtrueとfalseの条件に付いて説明します。
trueとはfalseとnil以外のすべてです。この例では12というデータが入っているので条件式はtrueです。
0 やカラの文字列も全てtrueです。
例えカラ文字の変数でも何かしらのデータが入っていれば条件式はtrueになると覚えてください。
以下の例は条件式にfalseやnilが入っているので条件式はfalseです。
これらのfalseやnilや trueは疑似変数と呼ばれています。 次の例はカラ文字を変数に入れていますが、条件式はtrueです。
カラ文字とは以下の例をみていただくと分かりますが、の部分です。 次はif文で文字列の比較を行う方法について説明します。
では例をみてみましょう。 文字列の比較は数値と同じ関係演算子を使います。
Perl言語などは文字列専用の関係演算子を使っていますが、Rubyは数値も文字列も同じ関係演算子を使います。
文字列同士の比較の場合は以下のような規則があります。
〇アルファベットの比較では大文字の方が小文字より大きい。
〇 aが一番小さくzが一番大きい
〇日本語の比較は「あ」が一番小さく、「ん」が一番大きい。
結果は以下の通りです。
ハッシュのその他の知識を得よう
この章では今まで説明した事以外のハッシュの知識について説明します。
初めに今までとは違ったキーと値の設定方法について説明します。
今までは以下のように記述すればハッシュの要素を追加できました。 この他にもという構文でキーと値を追加することが出来ます
では例をみてみましょう。 このように書くことでハッシュにという新たな要素が加わります。
上書きしたい場合は以下の通り、キーに対する値に他の値を設定します。 結果は以下の通りです。 次はハッシュの要素が何個あるかを確認する方法について説明します。
では例をみてみましょう。 この構文でハッシュの要素数を取得できます。
結果は以下の通りです。
次はハッシュの要素をすべて出力する方法について説明します。
では例をみてみましょう。 ハッシュの要素をブロック内のにそれぞれセットして、出力します。
例えば例の中のaにはキーが入り、bには値が入ります。
この構文で書けばすべてのハッシュの要素を出力することが出来ます。
結果は以下の通りです。 キーと値の両方を出力したい時は前の例の構文でもいいですが、キーだけ、もしくは値だけを出力したい場合について次の例で説明します。
では例をみてみましょう。 キーだけを出力したい時にはを使い、値だけを出力したい時にはを使います。
結果は以下の通りです。
次はハッシュの全てのキーを配列に変える方法について説明します。
では例をみてみましょう。
この構文でキーだけを配列にすることが出来ます。
この例ではkがその配列になります。
結果は次の通りです。
次はハッシュの全ての値を配列に変える方法について説明します。
では例をみてみましょう。 この構文で値だけを配列にすることが出来ます。
この例ではkがその配列になります。
結果は以下の通りです。
次はキーと値を「配列の配列」に変える方法です。
では例をみてみましょう。 結果は以下の通りです。
この構文でキーと値を配列の配列にすることが出来ます。
配列の配列とはどのような形式であるのかを説明します。
文字通り、配列の配列は配列の中に配列を入れる形式です。
この例の配列の配列は以下のようになっています。 =>外側の[ ]の中にさらに配列が入っている形式になります。
では細かく分解してみます。
ハッシュのその他の作成方法を知ろう
この章では様々なハッシュの作成方法について説明します。
ハッシュの書き方は以下の書き方以外にもありますので、次の例で説明します。 では例をみてみましょう。 基本構文は以下の通りですが、Hashのカッコの中に2種類の方法でキーと値を書くことができます。 結果は以下の通りです。 では次の例をみてみましょう。
要素の無いハッシュを作って後から値を入れることもできます。 「Hash.new」というカラのハッシュを作成してからのようにキーと値を指定してデータを入れていきます。
結果は以下の通りです。 では次の例をみてみましょう。
キーが存在しない時にデフォルト値を設定する例です。 のように存在しないキーで出力しようとした時にのようにデフォルト値を設定しておけばその値が出力されます。 結果は以下の通りです。 では次の例をみてみましょう。
次はキーを指定して、その値を出力させたくてもキーが存在しない場合に、の中で指定した値を出力させたい時には以下のような形式で記述します。 この構文で書くと例え指定したキーと値が無くても、そのキーと値が新たな要素としてハッシュに加わります。 のように存在しないキーを指定した場合はデフォルト値が出力されますが、この例の場合は20です。
例えキーが存在しなくてもハッシュに新しいキーと値として追加されているのがデバック用のpで出力すると分かります。
結果は以下の通りです。