この章ではif文と似たような機能を持つ三項演算子について説明します。
では例をみてみましょう。 条件式がtrueの場合には「trueで実行」、falseの場合には「falseで実行」を実行します。
この例では条件式であるnum と3がイコールの時にはを、イコールでは無いのならば
をkに入れます。
if文で書き換えると以下の通りです。
カテゴリー: Ruby
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で出力すると分かります。
結果は以下の通りです。
ハッシュについて知ろう
この章ではハッシュについて説明します。
ハッシュとは配列と似ていますが、配列は複数のデータをまとめて入れることができますが、ハッシュも基本的な仕組みは同じで、複数のデータをまとめて入れることができます。
では配列とハッシュの違いは何か?
大きく違う点は配列は要素を「添え字」で管理していましたが、ハッシュは「キー」で要素を管理します。
配列の場合は以下のように添え字で要素を管理していました。 ハッシュの場合は次の例のように添え字の代わりに「文字列であるキー」を指定します。
ハッシュの場合は個々の要素をキーによって管理します。
では例をみてみましょう。 ハッシュの基本構文は以下の通りです。
キーとは
の箇所で、値は
の箇所です。
配列は前からと順番に数えていましたが、ハッシュには要素間の順番はなく、
で関連付けして記述します。
つまり、は
という関連付けで記述しています。
出力する時にはのように
という形式で書けばキーに対応する値が出力されます。
次の例では以外の方法でハッシュの要素を指定しています。
それはfetchを使う方法です。 では例をみてみましょう。
この例では紺野に対応する値が出力されるので、結果は34です。
もしくは以下のように変数に入れてから出力することも出来ます。 キーに対応する値を
のように変数に結果を入れてから出力させても問題ありません。
結果は以下の通りです。 printを使って
のように存在しない要素を出力する場合は要素が存在していなくてもエラーにはなりませんが、fetch を使って
のように存在しないキーを指定して出力しようとすると
と言うエラーが発生します。
結果は以下の通りエラーです。
もしキーが存在しない時にデフォルト値(決まっている値)を出力させたいのならば
の20のようにデフォルト値を設定します。
では例をみてみましょう。
もしくは
この2つの例はキーである
が無い場合でも20が出力されます。
では次に進みます。
次はの場合はデフォルト値しか出力されませんでしたが、存在しないキーとデフォルト値両方を出力させたい時は以下のように記述します。
変数名はrではなくても、自由に付けてください。
結果は以下の通りです。 以下のようにキーが存在する場合にはその値が出力されます。
また、の部分は行を変えて書くことができます。
結果は以下の通りです。
次はキーが存在しなかった場合、キーそのものを出力する方法について説明します。
のように存在していないキー
を出力するとブロック内の変数kに渡されて、そのキーが出力されます。
のように存在するキーを指定した場合はその値が出力されます。
結果は以下の通りです。 次の例は先ほどの例の変形型でキーが存在しなかったら、そのキーとその値をハッシュの新たな要素として入れる形式です。
つまり次の例はと言う要素を新たにハッシュであるnameに加えています。基本構文は以下の通りです。
例をみてみましょう。
結果は以下の通りです。
配列のその他の知識を得よう
この章では配列の要素を一度に取り出す方法について説明します。
今までは配列の要素をのように1つ1つ取り出していましたが、eachを使うことでまとめて取り出すことが出来ます。
詳しい説明は例の後に行います。 以下の構文で書くことで配列の要素が1つずつ変数に代入されて、実行文で出力されます。
以下の構文の変数名は自由に付けてください。 上の例のeach doの箇所は次のように書き替えることが出来ます。
このように書くことで配列のすべての要素を順番に繰り返し取り出してくれます。
出力される順番は以下の通りです。
つまり、配列animalの要素が順に変数iに入り、putsで出力されます。 結果は以下の通りです。
次は配列の要素がいくつあるのかを確認する方法について説明します。
配列のデータの数は以下の構文で取得できます。
この例では配列の要素が5つあるので結果は5です。
他の方法でも配列の要素数を取得できます。 結果は以下の通りです。
では説明をしていきます。
〇「配列.count」という構文で配列の要素数を取得できます。
例の結果は9です
〇という構文で指定した要素と同じ要素がいくつあるのかを取得できます。
この例では配列の要素である1が4つありますので、結果は4です。
次の例に進みます。 この例ではすべての要素をチェックして
という条件に一致した要素の数をカウントします。
つまり、要素の中で2で割り切れるのは2と4だけですので、例の答えは2です。
「==」は右辺と左辺がイコールという意味ですが、この記号は関係演算子と呼ばれています。
また、以下の構文に条件式がありますが、条件式の詳細は「条件分岐ifの公式1」で詳しく説明します。 以下の通り、結果を変数に入れることもできます。
またcountの中身は行を変えて書いてもいいです。
次の例も前例と同じ構文です。 「f+2==4」という条件に一致した要素の数をカウントしています。
条件にあう2が2つありますので、結果は2です。
次は「nil」について説明します。
nilとはオブジェクトが存在しないことを意味します。
つまり何もないと言う意味です。
例えば要素が存在しないのにも関わらず、その添え字を指定して出力するとnilが返されます。 animalの要素は5つしかないので、
と書いて出力してもその要素は存在しないのでnilが返されます。
結果は以下の通りです。 もう一つnilの例を見てみましょう。
=>要素数を指定して配列を作っても、要素が何も入っていない時にはnilが返されます。
pで出力すると解りますが、と、出力されます。
そのnilを省いた配列を作成したい場合は
という構文で書きます。
この構文はnilの要素が省かれた新たな配列を作成します。
では例をみてみましょう。 デバック用のpで出力するとnilが省かれていることがわかります。
結果は次の通りです。