Ruby入門 part10
Ruby入門いよいよラストスパートです!
標準ライブラリのセクションに入りました\(^o^)/
目次
1.標準ライブラリ
Rubyで最初から用意されているクラスやモジュールを標準ライブラリといいます。
項目は公式リファレンスマニュアルのライブラリに載っています😊
docs.ruby-lang.org
2.数値(Numeric)クラス
2-1. 整数(Integer)と浮動小数点数(Float)の変換
Numeric
クラスには、サブクラスとしてInteger
クラスとFloat
クラスがあります。
Numeric は数値、Integer は整数、Float は浮動小数点数でしたね👨🎓
整数と浮動小数点数といっても、数値を指すことには変わりないので、例えば10
と10.0
はお互いに変換することができます。
メソッド | 用途 |
---|---|
to_f | IntegerからFloatに変換 |
to_i | floatからIntegerに変換(小数点以下切り捨て) |
truncate | 同上 |
round | floatからIntegerに変換(四捨五入) |
ceil | floatからIntegerに変換(切り上げ) |
floor | floatからIntegerに変換(切り下げ) |
小数点以下の扱いにもいろいろなパターンがありますね〜🤨
それぞれ試して結果を見てみましょう!!
gist.github.com
結果は以下のとおりです。
ちょっとずつ結果が違うので、用途を考えて変換しなくちゃですね💪
2-2. 数値を文字列に変換
続いては、Integer
クラスで用意されているメソッドを2つ紹介です!
ひとつは数値を文字列に変換するto_s
メソッドです。s
はString
の頭文字ですね。
数値を文字列にするというのは、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
結果は以下のとおりです。
2-3. 割り算メソッド
次は、割り算についてのメソッドを紹介します。
四則演算についてはこちらの記事に書いたとおりです。
当時は注意点として、/
を使って割り算をすると、整数÷整数=整数になってしまうことを挙げました🙁
今回は、/
以外の方法で割り算をして、答えが浮動小数点数になるようにしてみます!
割り算をするためにNumeric
クラスに用意されているメソッドとして、div
メソッドとquo
メソッドがあります。
割り算に使われる数値が整数でも浮動小数点でも、div
メソッドは答えを整数で返します。
逆にquo
メソッドの答えは浮動小数点数になります。
割られる数と割る数のパターンに対する結果を以下にまとめました!
- div:割り算の答えは整数
- divmod:割り算の答えを整数と余りで表示
- fdiv:割り算の答えは浮動小数点数
- /:整数同士の割り算の答えは整数、それ以外は浮動小数点数
- quo:割り算の答えは分数
ちなみにメソッドは割られる数.div(割る数)
という書き方になります。割る数は引数ですね🙂
実際にやってみました!
gist.github.com
結果は以下のとおりです。
2-4. 絶対値を取得
最後に、絶対値を取得するabs
メソッドです。
数値.abs
で絶対値を取得します。負の値なら(-5).abs
です💡
これはややこしくないので、キャプチャは割愛しますね😂
3.文字列(String)クラス
3-1. 文字列の大小関係
文字列オブジェクトについてはこちらの記事で扱っていますので、ここではString
クラスについて詳しく見ていきます😎
数値と同じく、文字列にも大小関係があります!
なので==
や!=
の演算子は当然使えますが、>
や=<
も使えます😳
どうやらアルファベットに対応していて、ABCDEF....XYZabcdef...xyz
という順番で大きくなっていくみたいです。
ではひらがな、漢字は?というと…ワカリマセン🤪
文字のバイト数を比較しているようですが、詳しく載っているブログを見つけたので貼っておきます!
いろいろ試してみました。
gist.github.com
結果は以下のとおりになりました!Japan は America より大きい!!\(^o^)/
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
結果は以下のとおりです✨
3-3. 文字列を挿入、検索
文字列の中に他の文字列を挿入するには、String
クラスで用意されているinsert
メソッドを使います。
insert(挿入する位置, 文字列)
挿入する位置は、先程と同様に先頭の文字が0番目です。
文字列の中から指定の文字列を検索するには、String
クラスで用意されているindex
メソッドを使います。
index(文字列, 検索開始位置)
このうち、検索開始位置は省略できます👌
index
メソッドは、文字列の左端から右端に向かって検索を行います。
また、右端から左端に向かって検索するときは、rindex
メソッドを同じように使います。
いずれのメソッドも、見つかった場合は対象の文字列の左端の位置を返し、見つからなかったらnil
を返します👏
ちなみに、対象の文字列が含まれているかどうかの確認だけならinclude?
メソッドを使います。
include?(文字列)
引数の文字列が含まれていればtrue
、含まれていなければfalse
を返します。
実際にやってみます!
gist.github.com
結果は以下のとおりです。
なんとなくわかってきました〜!
3-4. 文字列を削除、分割
文字列の中に含まれている文字列を削除したい場合は、String
クラスで用意されているdelete
メソッドを使います。
delete(文字列1, 文字列2, ... )
引数には削除したい文字列をカンマで繋げて、複数の文字列を削除できます。
delete
メソッドは、削除した後の文字列を繋げて新しい文字列として保存しますが、delete!
にすると削除した後に上書き保存します。
また、文字列を分割するには、String
クラスで用意されているsplit
メソッドを使います。
split(分割パターン, 分割数)
分割バターンは区切り文字を指定したり、正規表現を使うことができます💪分割数は省略可能です。
分割された文字列は、新しく作られる配列の各要素となります。
削除と分割を実際に試してみました〜!
gist.github.com
結果は以下のとおりです。
引き続き削除メソッドを2つ紹介しますが、サンプルプログラムでは非常にわかりにくいため、文章だけで説明になってしまいますがご了承ください😖😖
ひとつは、既存のファイルから文字列を読み込んだ場合などに、文末の改行文字\n
などをまとめて取り除きたい場面があります。
文字列の最後にある改行文字を取り除くためには、String
クラスで用意されているchomp
メソッドを使います。
もうひとつは、既存のファイルから文字列を読み込んだ場合などに、先頭や末尾の空白をまとめて取り除きたい場面があります。
文字列の先頭や末尾にある空白文字(タブなども)を削除するには、String
クラスで用意されているstrip
メソッドを使います。
本日は以上です✨