どぼじょのIT学習ブログ

高専卒土木女子がIT業界を目指してお勉強。

Ruby入門 part10

Ruby入門いよいよラストスパートです!
標準ライブラリのセクションに入りました\(^o^)/

目次

1.標準ライブラリ

Rubyで最初から用意されているクラスやモジュールを標準ライブラリといいます。
項目は公式リファレンスマニュアルのライブラリに載っています😊
docs.ruby-lang.org

2.数値(Numeric)クラス

2-1. 整数(Integer)と浮動小数点数(Float)の変換

Numericクラスには、サブクラスとしてIntegerクラスとFloatクラスがあります。
Numeric は数値、Integer は整数、Float は浮動小数点数でしたね👨‍🎓
整数と浮動小数点数といっても、数値を指すことには変わりないので、例えば1010.0はお互いに変換することができます。

メソッド 用途
to_f IntegerからFloatに変換
to_i floatからIntegerに変換(小数点以下切り捨て)
truncate 同上
round floatからIntegerに変換(四捨五入)
ceil floatからIntegerに変換(切り上げ)
floor floatからIntegerに変換(切り下げ)

小数点以下の扱いにもいろいろなパターンがありますね〜🤨
それぞれ試して結果を見てみましょう!!

gist.github.com
結果は以下のとおりです。
f:id:mistyrinth:20181128155044p:plain
ちょっとずつ結果が違うので、用途を考えて変換しなくちゃですね💪

2-2. 数値を文字列に変換

続いては、Integerクラスで用意されているメソッドを2つ紹介です!
ひとつは数値を文字列に変換するto_sメソッドです。sStringの頭文字ですね。
数値を文字列にするというのは、10"10"にする感じです。数字としての10ではなく、「10」という文字列にするということです。
また引数として、2から36までの基数を指定できます。
例えば10.to_s(2)なら、10を2進数にした1010が文字列として返ってきます👏 もうひとつは数値を文字コードに変換するchrメソッドです。
US-ASCIIでは、1バイトの文字(簡単に言うと半角の文字)は、0 から 255 までの範囲の文字コードに対応しています。
ただし私の使っている環境がUTF-8なので、実際に試すとエラーになります😖
今はNumericクラスの学習がメインなので割愛しますが、UTF-8文字コードがあれば、文字コード.chr(UTF-8)という書き方で文字に変換できます😊
数値を文字列にするほうを実際にやってみました!

gist.github.com
結果は以下のとおりです。
f:id:mistyrinth:20181128164545p:plain

2-3. 割り算メソッド

次は、割り算についてのメソッドを紹介します。
四則演算についてはこちらの記事に書いたとおりです。
当時は注意点として、/を使って割り算をすると、整数÷整数=整数になってしまうことを挙げました🙁
今回は、/以外の方法で割り算をして、答えが浮動小数点数になるようにしてみます!
割り算をするためにNumericクラスに用意されているメソッドとして、divメソッドとquoメソッドがあります。
割り算に使われる数値が整数でも浮動小数点でも、divメソッドは答えを整数で返します。
逆にquoメソッドの答えは浮動小数点数になります。
割られる数と割る数のパターンに対する結果を以下にまとめました!

- div:割り算の答えは整数
- divmod:割り算の答えを整数と余りで表示
- fdiv:割り算の答えは浮動小数点数
- /:整数同士の割り算の答えは整数、それ以外は浮動小数点数
- quo:割り算の答えは分数

ちなみにメソッドは割られる数.div(割る数)という書き方になります。割る数は引数ですね🙂
実際にやってみました!

gist.github.com
結果は以下のとおりです。

f:id:mistyrinth:20181128172241p:plain

2-4. 絶対値を取得

最後に、絶対値を取得するabsメソッドです。
数値.absで絶対値を取得します。負の値なら(-5).absです💡
これはややこしくないので、キャプチャは割愛しますね😂

3.文字列(String)クラス

3-1. 文字列の大小関係

文字列オブジェクトについてはこちらの記事で扱っていますので、ここではStringクラスについて詳しく見ていきます😎
数値と同じく、文字列にも大小関係があります!
なので==!=演算子は当然使えますが、>=<も使えます😳
どうやらアルファベットに対応していて、ABCDEF....XYZabcdef...xyzという順番で大きくなっていくみたいです。
ではひらがな、漢字は?というと…ワカリマセン🤪
文字のバイト数を比較しているようですが、詳しく載っているブログを見つけたので貼っておきます!

qiita.com

いろいろ試してみました。
gist.github.com
結果は以下のとおりになりました!Japan は America より大きい!!\(^o^)/
f:id:mistyrinth:20181128180328p:plain

3-2. 文字列の一部を取得、置き換え

今度は、文字列の一部を取得して、文字を置き換える方法です。
書き方は以下のとおりです。文字で説明するのわかりにくいですが…😖笑

文字列[取得したい文字の先頭位置, 取得したい文字の長さ]
    または
文字列[取得したい文字の先頭位置..取得したい文字の最後の位置]

ただし、先頭は0番目として数えます!あと、長さの単位はbyteです。これは注意ですね🖊
例えばHello[1,3]とすると、Helloの1番目のeから始まって3文字の長さであるellを取得します。
また、Hello[2..4]とすると、Helloの2番目から4番目の文字列lloを取得します。
他には、以下のような書き方もあります。こちらは数え方が少し変わっています。

文字列[取得したい文字が始まる位置...取得したい文字が終わる位置]

文字だけの説明だと全然わからないと思いますが😭頑張って説明してみます。
これは文字と文字の間を数えていく方法で、0番目(先頭)の文字の左隣が0、0番目と1番目の文字の間が1、という数え方です。
例えばWelcome[2...4]なら、引数の2は e と l の間を指し、4は c と o の間を指しています。
つまり、lcを取得します。

試しにやってみます。
gist.github.com
結果は以下のとおりです✨
f:id:mistyrinth:20181128212530p:plain

3-3. 文字列を挿入、検索

文字列の中に他の文字列を挿入するには、Stringクラスで用意されているinsertメソッドを使います。

insert(挿入する位置, 文字列)

挿入する位置は、先程と同様に先頭の文字が0番目です。

文字列の中から指定の文字列を検索するには、Stringクラスで用意されているindexメソッドを使います。

index(文字列, 検索開始位置)

このうち、検索開始位置は省略できます👌
indexメソッドは、文字列の左端から右端に向かって検索を行います。
また、右端から左端に向かって検索するときは、rindexメソッドを同じように使います。
いずれのメソッドも、見つかった場合は対象の文字列の左端の位置を返し、見つからなかったらnilを返します👏
ちなみに、対象の文字列が含まれているかどうかの確認だけならinclude?メソッドを使います。

include?(文字列)

引数の文字列が含まれていればtrue、含まれていなければfalseを返します。
実際にやってみます!

gist.github.com
結果は以下のとおりです。
f:id:mistyrinth:20181128220718p:plain
なんとなくわかってきました〜!

3-4. 文字列を削除、分割

文字列の中に含まれている文字列を削除したい場合は、Stringクラスで用意されているdeleteメソッドを使います。

delete(文字列1, 文字列2, ... )

引数には削除したい文字列をカンマで繋げて、複数の文字列を削除できます。
deleteメソッドは、削除した後の文字列を繋げて新しい文字列として保存しますが、delete!にすると削除した後に上書き保存します。

また、文字列を分割するには、Stringクラスで用意されているsplitメソッドを使います。

split(分割パターン, 分割数)

分割バターンは区切り文字を指定したり、正規表現を使うことができます💪分割数は省略可能です。
分割された文字列は、新しく作られる配列の各要素となります。

削除と分割を実際に試してみました〜!

gist.github.com
結果は以下のとおりです。
f:id:mistyrinth:20181128223925p:plain

引き続き削除メソッドを2つ紹介しますが、サンプルプログラムでは非常にわかりにくいため、文章だけで説明になってしまいますがご了承ください😖😖
ひとつは、既存のファイルから文字列を読み込んだ場合などに、文末の改行文字\nなどをまとめて取り除きたい場面があります。
文字列の最後にある改行文字を取り除くためには、Stringクラスで用意されているchompメソッドを使います。
もうひとつは、既存のファイルから文字列を読み込んだ場合などに、先頭や末尾の空白をまとめて取り除きたい場面があります。
文字列の先頭や末尾にある空白文字(タブなども)を削除するには、Stringクラスで用意されているstripメソッドを使います。

本日は以上です✨