SyuchiNikuRingの備忘録

お勉強したことをまとめておく場所。中の人の理解や感覚で書いているから不正確なことも多いかも。

Ruby入門season1~演算記号・条件分岐・配列・キャッシュ~

やっほー。

今回はRubyのお話。

入門of入門のお話をまとめます。

標準出力はputs "(出力内容)"です。JavaでいえばSystem.out.println, C++でいえばcoutに当たるものですね。

四則演算については他の言語と同じです。

変数に関しては型を宣言する必要はなく、いきなり書いていいみたいです。驚き。

 

そして出力中に変数を入れたいときには#{変数}として出力する文字列や数値に含めてよいです。これを変数展開といいます。C++Javaでは、(文字列) + 変数 + (文字列)としてきたので、Rubyの柔軟性はいいですね。数値と文字列を出力で連結することはできないので、この記法で型が異なっても出力できるようにあらかじめ埋め込んでいると考えれば自然かもしれませんね。

条件分岐に関しては、ifで始まりendで終わります。endはこれまでの言語では出てこなかったので、忘れないようにしないとですね。条件分岐で、分岐が3つ以上あるときには、if/elsif/else/endの順で記述します。elifでもelseifでもなく、""elsif""です。スペルに気を付けましょう。

 

次に配列です。配列も配列を宣言することなく、(変数) = [値1、値2、…]のように書きます。配列中の特定値を取り出すときは、配列変数[インデックス番号]とします。変数展開も可能です。

 

C++Javaと大きく異なるのは繰り返し文です。Rubyではeach文を使います。

配列.each do |変数名| / endで書きます。このときの変数名は好きなものをつけられます。繰り返しは要素数分だけ行われます。

 

配列の次はキャッシュです。キャッシュは値を「キー」と結びつけます。表記の仕方は{キー => 値1, キー => 値2,...}です。複数種類のキーを使って値を記述すれば、代入先の変数を一気に記述できます。例えば、こんな感じ。

f:id:SyuchiNikuRing:20180907155145p:plain

 

これでsushi変数にマグロの情報を代入できました。これをputs sushiとすると、出力は「{"name" => "まぐろ", "price" => "130円", "wasabi" => "あり"}」となります。

ハッシュでは、変数[キー]とすることで特定のキーの値のみ取り出すことも可能です。そして、特定のキーに新たな値を代入することで値の更新が可能です。また、キーを新たに追加することもできます。追加する場合はキャッシュの最後尾に追加されます。

ところで毎回キーに""をつけるのはめんどくさいですよね。そこでキーの頭に「:」をつける書き方もあります。これを「シンボル」といいます。「""」「''」の代用だと今は考えてもらってOKです。正確には異なりますが、いまは気にしなくてOKです。

 

と、ここまでいろいろ書きましたが、実際には、

f:id:SyuchiNikuRing:20180907162833p:plain

と書けます。もっとも値を取得する際にはシンボルを使います。

 

キャッシュと条件分岐を組み合わせることもできます。

存在しないキーを指定するとnilとなり、条件分岐ではfalseとなります。先ほどのsushiの例からpriceをなくして動かしてみます。

f:id:SyuchiNikuRing:20180907161940p:plain

実行するとこうなります。

f:id:SyuchiNikuRing:20180907162009p:plain

うまくいきましたね。

 

キャッシュは配列に組み込むこともできます。

⁂wasaiではなくwasabiです。修正します。<2018/09/07>⁂

f:id:SyuchiNikuRing:20180907163232p:plain

実行してみます。

f:id:SyuchiNikuRing:20180907163250p:plain

130円なら食べよう...って感じで、えんがわの情報が手に入りました。

 

えんがわがさび抜きなのか否かだけを知りたいときはどうしたら良いのでしょうか。

簡単です。まずえんがわの情報が入っているキャッシュを取り出してから、キャッシュ内のインデックス番号を指定することで欲しい情報をピンポイントで取り出せます。

⁂priveではなくpriceです。修正します。<2018/09/07>⁂

f:id:SyuchiNikuRing:20180907164527p:plain

実行します。

f:id:SyuchiNikuRing:20180907164550p:plain

正しく出ました。

each文の中に入れてみました。

f:id:SyuchiNikuRing:20180907170025p:plain

実行します。

f:id:SyuchiNikuRing:20180907170051p:plain

いい感じですね。ちなみにeach文の変数(| |の中のもの)で変数展開しないとエラーになります。中の人はしばらくそれに気が付かないでエラーを吐かれ続けました。

 

今回はここまで。