カテゴリー
Ruby

クラスについて知ろう

この章ではクラスについて説明します。
今までのプログラムでは変数と関数を扱ってきましたが、クラスという機能を使うことで多くの変数と関数を1つの機能体として働かせてデータを処理することができます。
クラスとは物を作る設計図に例えられます。
設計図は車や家や鉛筆をつくる場合に必要ですが、この設計図に当たるものがクラスです。
ではクラスについて詳細に説明します。
車や家や鉛筆の中には色々な部品が含まれていますが、それらの部品には「状態」や「ふるまい」があります。
例えば、鉛筆であれば「状態」は鉛筆の形、芯、線の濃さなどで、「ふるまい」は線を引く、削るなどの動作です。
その「状態」や「ふるまい」をクラスという設計図に書いていきます。
「状態」を変数で書き、「ふるまい」をメソッドで書くことになります。
その「状態」や「ふるまい」に指示を出すのはオブジェクトです。
例えば鉛筆の「線を消す」など具体的な指示をオブジェクトという司令塔から出します。
オブジェクトの詳細はこの後に説明します。
ではクラスの基本形から説明します。9 〇クラス名は大文字で付けることが慣習になっていますが、自由に付けていただいて結構です。
〇クラスの中に変数やメソッドを書いていきます。
メソッドは関数の別名だと思ってください。9 〇この引数はクラスの中で使われるデータです。
〇引数は必要な場合には記述しますが、省略もできます。
ではクラスの例を見てみましょう。99 この例のクラスにはBankと言う名前が付いています。
そして、このBankクラスを使うためにはオブジェクトを作成しなくてはいけません。
クラスはただの設計図なので、これを動かすのがオブジェクトです。
それが9の箇所です。
オブジェクトを作った後は、そのオブジェクト変数を使って、クラスの中の変数やメソッドにアクセスすることができるようになります。9 「クラス名(引数)」という形式で引数が 書かれていますが、この引数はオブジェクトを作成した時に実行するinitメソッドに渡されます。
このinitメソッドの中で設定した変数にオブジェクトで設定したデータを入れます。9 initメソッドの構文は次の通りです。9 〇 initメソッドの第一引数は引数があっても無くてもselfと書いてください。
selfはオブジェクト自身を意味します。
〇注意点はinitの前後の下線は2つ連続で繋がっています。
この例では下線が1本に見えますがテキストエディタの表記のせいです。
〇 initメソッドはPythonで機能が与えられているメソッドですが、nyuukinメソッドやshukkinメソッドは自分で作成したメソッドです。
ではプログラムの説明をします。
banks=Bank(1200000)のようにオブジェクトを作成すると同時に引数である1200000がinitメソッドの引数であるaにセットされ、self.zandakaに代入されます。
initメソッドやnyuukinメソッドなどのメソッドの中の第一引数には必ずselfを設定します。
また、メソッドの中にクラス内で設定した変数がある場合はその変数にも9と言う形式でselfを付けます。
この例では9の箇所です。9 「self.zandaka」のようにselfに関連づけられている変数をインスタンス変数と言います。
次はメソッドにデータを入れる方法について説明します。9 「オブジェクト.メソッド(引数)」と いう形式でクラスの中の以下のnyuukinメソッドを呼び出して、9に15000を足す動作を行っています。9 このようにオブジェクトから呼ばれるメソッドをインスタンスメソッドと言います。
次に以下の説明をします。9 クラスの中のshukkinメソッドを呼び出して、zandakaからkの値である10000を引く動作を行っています。9 そして最後に9 の箇所で、以下のshowメソッドを実行しています。9 showメソッドはzandakaの値をreturnで呼び出し元に返すだけのメソッドです。
結果は以下の通りです。9 先ほどの例ではzandakaという変数が初めから定義されていますが、実はこれらの変数は初めからクラスの中で定義しなくても、後からでも付け加えることができるのです。
例えば「ginkou」という変数を付け加えようとする場合には9と言う形式で付け加えることができます。
例えば以下のように書きます。9 では例をみてみましょう。999 このginkou変数はshowメソッドで使われているのが分かります。
次の例に進みます。
インスタンス変数は前の例の9の代わりに以下のようにクラスの中に初めから設定しておくことも出来ますので次の例をみてください。999 この例のようにクラスの中にインスタンス変数を初めから設定することができます。
クラスの中で変数を設定する時には変数の前にオブジェクトを付ける必要はありません。9 次の箇所の説明をします。9 このようにオブジェクトからクラスのインスタンス変数の値を取得することもできます。
クラスの中の変数の値を取得するには9という形式で書きます。9 これまでの例ではオブジェクトは1つだけでしたが、以下のように複数のオブジェクトを作成することができます。
以下の例では複数のオブジェクトごとにzandaka変数に値を入れていますが、これらのオブジェクト間で値の共有はありません。
つまり、新しくオブジェクトを作ったら、前のオブジェクトで使われていた変数の値は使われることはありません。999999

カテゴリー
Ruby

FileクラスとDirクラスについて知ろう

この章ではFileクラスについて説明します。
Fileクラスはファイル名などを変更するなどの機能を持つクラスです。
FileクラスはIOクラスの子クラスなので、IOクラスのメソッドなどを使用することが出来ます。
では初めにファイル名を変更するメソッドについて説明します
例をみてみましょう。9 ファイル名を変更する時の基本構文は9です。
この例では「t.dat」から「t2.dat」に名前を変更しています。
また、renameメソッドの使い方としてはファイルを他のディレクトリに移動することが出来ます。9
次はファイルを削除するdeleteメソッドについて説明します。
では例をみてみましょう。9 以下の構文でファイルを削除することができます。9

次はファイルの内容をコピーするモジュールであるFileUtilsのcpについて説明します。
では例をみてみましょう。9 FileUtils.cp()を使用するには9を先頭に記述します。
FileUtilsはファイルを操作するためのモジュールです。
この例は「g.dat」のファイルの中身が「t.dat」にコピーされます。9
次はファイルの最終更新時間などを取得する方法について説明します。
これらを取得するためにはstatメソッドが必要です。9 では例をみてみましょう。99
ここからはDirクラスについて説明します。
このクラスはディレクトリを様々操作するクラスです。
現在のカレントディレクトリ(現在作業している場所)の情報は9 で取得できます。
また、カレントディレクトリを変更するには9と言う形式で取得できます。
では例をみてみましょう。99
次はディレクトリのデータを取得する方法について説明します。
初めに9で開いてから、readメソッドでディレクトリのデータを取得し、closeメソッドで閉じます。
では例をみてみましょう。9 readメソッドではカレントディレクトリや親ディレクトリのデータを取得することが出来ます。9
次はディレクトリの作成方法について説明します。
基本構文は以下の通りです。9 では例をみてみましょう。9
この例では9のようにカレントディレクトリの下にwork12というディレクトリを作成します。
次はディレクトリの削除方法について説明します。
基本構文は以下の通りです。9 では例をみてみましょう。9
これでwork145というディレクトリが削除できました。

カテゴリー
Ruby

IOクラスについて知ろう

この章ではIO クラスとファイルの入出力について説明します。
ファイルの入出力の基本はファイルを開いて、ファイルに書き込んだり、ファイルから読み込んだりして、最後にファイルを閉じます。
ファイルの入出力にはIO クラスのオブジェクト(IO オブジェクト)を使用します。
ではIO クラスを使用して、ファイルを操作する方法について説明します。9 ファイルを開いたり閉じたりする方法は2つあります。99 構文の中のアクセスモードとは「ファイルを読み込み用で開くのか」、「書き込み用で開くのか」、「読み書き両方で開くのか」を文字列で指定したものです。99999 9「ファイル操作の手順の2」のファイルに書き込んだり、ファイルから読み込んだりするには次の表のメソッドを使用します。
以下のメソッドを使って、入力したり、出力したりします。9999
では次の例で「test.dat」からデータを読み込んでみましょう。99 初めにファイルを開きますが、この例では先ほどの基本構文 2でファイルを開いています。
アクセスモードは読み込み専用の9を使用しています。
「オブジェクト.gets 」と言う形式でファイルからデータを読み込むことができます。
getsメソッドはファイルの中の1行分を読み込むことが出来ますので、「abcde」だけを読み込み、ファイルの終わり(EOF)になるとnilを返します。
最後に9という形式でファイルを閉じます。
基本構文2でファイルを開いた場合にはcloseメソッドは省略できます。
先ほどの例では1行しか取り出さないので、すべての要素を取り出したい場合はwhileを使用します。
次の例のようにwhileを使うと「abcde」「efgh」のすべてが取り出せます。
「a.gets」で取り出されたデータがbに入り、それをprintで出力しています。9
次の例をみてみましょう。99 readlineメソッドもgetsと同じでファイルの中の1行分だけ読み込むことが出来ます。
基本構文は9です。
次の例をみてみましょう。99 9と言う形式で、ファイルのすべての行を配列(この例ではb)に格納してくれます。
それを eachメソッド で繰り返し取り出しています。
結果は以下の通りです。9
次の例をみてみましょう。
9
「IOオブジェクト.getc 」という形式でファイルから1文字ずつ読み込みます。
このメソッドはファイルの終わり(EOF)になるとnilを返します。9
次の例をみてみましょう。9 基本構文は9です。
ファイルの初めから終わりまでを読み込んで出力します。
ファイルの終端に達するとnil を返します。9
次は9という構文でサイズを入力し、そのサイズ分だけファイルからデータを取り出します。9 この例では2バイト分だけ読み込んでいるので、結果は「ab」です。

次の例をみてみましょう。99 と言う基本構文でファイルの中身をすべて読み込むことが出来ます。9
次はファイルに書き込むメソッドについて説明します。
では例をみてみましょう。9 =>9と言う形式でファイルに改行を入れて書き込むことが出来ます。
これでt.datに「abcdef」「aiueo」が改行を入れて書き込まれます。
次の例をみてみましょう。9
9と言う形式でファイルに改行を入れないで書き込むことが出来ます。
結果はte.datに「abcdefaiueo」のように改行を入れないで書き込まれました。
次の例をみてみましょう。9 9と言う形式でファイルに改行を入れないで書き込むことが出来ます。
結果はt.datに「abcdefaiueo」のように改行を入れないで書き込まれました。
writeメソッドを使って、改行を入れて書き込みたい場合には以下の通り、9を入れます。9

次の例をみてみましょう。9 9と言う形式でファイルに書き込むことが出来ます。
結果はte.datに「abcdefaiueo」のように改行を入れないで書き込まれました。
次はファイルポインタについて説明します。
ファイルのデータを読み書きするには「ここまで読んだから次はここから読む」もしくは「ここまで書いたから次はここから書く」のように位置を覚えておかなくてはいけませんが、プログラマ自身が覚えている必要はなく、ファイルポインタと言う位置情報にこのデータが記録されています。
次の例をみてみましょう。9 「IOオブジェクト.pos」と言う形式で、現在のファイル位置を得ることが出来ます。
2バイト読み込んだので、現在のファイルの位置は2の箇所にあります。
例の実行結果は「ab」と「2」を出力します。
またposは現在の位置を知るだけでは無くて、任意の位置に移動することが出来ますので次の例で説明します。99 移動したい場合は9と記述します。
「i.pos=5」は5バイトだけ移動します。
5バイトで出力すると「fgh」を出力します。
「i.pos=0」は先頭まで移動します。先頭まで移動したので「abcdefgh」を出力します。
次はファイルポインタを移動するseekメソッドについて説明します
では例をみてみましょう。99 9で、ファイルポインタを自由に移動させることができます。
第 2引数のwhenceには以下の3種類から選択して、ファイルポインタの動きを決めることが出来ます。9 では例の説明をします。
「i.read(2)」で2のサイズだけ動いていて、その後に9でさらに5のサイズだけ移動しているので9で現在の位置を見ると7になります。
7進んだ位置で出力すると「h」を出力します。
9のように9に変更したとしますと、これは絶対位置なので9で現在の位置を見ると5になります。9
次はrewindメソッドについて説明します。
rewindメソッドはファイルポインタを先頭に戻します。
では例をみてみましょう。999と言う形式でファイルポインタを先頭に戻します。
puts i.posで出力すると0が出力されます。9

カテゴリー
Ruby

DateTimeクラスについて知ろう

次はDateTimeクラスについて説明します。
DateTimeクラスは日付と時刻を扱うクラスで、Dateクラスの子クラスと言う位置づけです。
DateTimeクラスを使用するには9を冒頭に記述してください。
現在の日時をDateTimeオブジェクトで表すには9と書きます。
では例をみてみましょう。9 結果は9です。
次はローカル時間とUTC時刻の時差を求めるoffsetメソッドについて説明します。
基本構文は以下の通りです。9
では例をみてみましょう。9 9次はUTCの時刻を取得するnew_offsetメソッドについて説明します。
基本構文は以下の通りです。9 では例をみてみましょう。99
次はDateTimeクラスで個別の現在時刻や日付を取得する方法について説明します。
では例をみてみましょう。99 では説明をしていきます。9

9

9

9

9

9

9

9

9

9

9

カテゴリー
Ruby

Dateクラスについて知ろう

次はDateクラスについて説明します。
Timeクラスは時刻を扱うクラスでしたが、Dateクラスは日付を扱うクラスです。
Dateクラスを使うには9を冒頭に記述してください。9
では例をみてみましょう。99 その月の月末の数値を得たい場合は以下のように9に指定してください。9 結果は9です。
末日の1日前の日付を得るには9に指定してください。9 つまり、マイナス指定をすると後ろから遡って、日付を指定できます。
次は今日の日付を求めるtodayメソッドについて説明します。
では例をみてみましょう。9 9結果は例えば今日の日付の9が出力されます。

次はDateオブジェクトの足し算と引き算について説明します。
では例をみてみましょう。9 Dateオブジェクトに9を使って、日付を進めたり戻したりできます。
「+」は日を進め、「-」は日を戻します。9
では次の例をみてみましょう。
「-」「+」は日単位の計算でしたが、月単位での加算と減算を行うには9を使います。9 「<<」演算子は月を戻します。
「>>」演算子は月を進めます。9 次は文字列で書かれた時刻の情報を9などの数値表示に変換するparseメソッドについて説明します。
では例をみてみましょう。99 9このメソッドは文字列の時刻を数値表記に変換します。
Dateオブジェクトに変換するparseメソッドは日付の部分だけの変換で、時刻に関する部分は無視されます。9

次は日付を指定したフォーマット通りの文字列にする方法について説明します。9 フォーマット文字列は「Timeクラスについて知ろう」で説明したものと同じです。
では例をみてみましょう。9 結果は9です。
時刻の部分は9のように記述してもすべて0表示になりますので注意してください。

カテゴリー
Ruby

Timeクラスについて知ろう

この章ではTimeクラスについて説明します。
Timeクラスは文字通り、時刻を表現するクラスです。9 では例をみてみましょう。9 このTimeクラスのオブジェクトのtimeには現在の時刻が格納されていますので、9のように現在の時刻が出力されます。
上の例は以下のように書いても同じ結果を得られます。9
次は個別に年,日などを取得する方法について説明します。999 999999本日の曜日を文字で得たい場合には曜日の配列を作成して、その配列の添え字に9の結果を入れます。
999

次は時刻に対しての計算方法について説明します。
タイムオブジェクトは足し算や引き算などを行うことが出来ます。
では例をみてみましょう。9 =>現在の日時から5時間分を引いた例です(足す場合には「+」を使用します)。
タイムオブジェクトから指定した秒数を「-」で引きます。
9は5時間になります。
結果は以下の通りです。9
次は時刻をフォーマット通りの文字列にする方法について説明します。
基本構文は以下の通りです。99 999では例をみてみましょう。9 => strftimeのカッコの中はダブルクォートかシングルクォートで全体を囲んで、例のように日本語とフォーマット文字列を混ぜ込んで書きます。
フォーマット文字列の間はカンマで区切る必要はありません。
結果は以下の通りです。9
次はタイムオブジェクトをto_sメソッドで出力する方法について説明します。
では例をみてみましょう。9 9=> puts timeは9を使って9と書くこともできます。
結果はどちらも現在の時間の9です。
結果は次の通りです。9
次はタイムオブジェクトを9で表示させた例を説明します。
タイムオブジェクトは1970年1月1日午前0時から何秒経ったかの情報を持っているので、それを表示するのが9です。
これらの違いを例で説明します。
では例をみてみましょう。9 to_fは1970年1月1日午前0時からの経過秒を浮動小数点数で表しています。
to_iやtv_secは1970年1月1日午前0時からの経過秒を整数で表しています。9
次は経過秒からタイムオブジェクトを作成するatメソッドについて説明します。
では例をみてみましょう。99 この結果はローカルタイム(現地の時刻)で出力していますが、これを世界協定時(UTC)に変更することも出来ますので、次の例を見てみましょう。
世界協定時とは世界で標準に使われている時刻です。9 このようにタイムオブジェクトに「UTC」を付けることで、世界協定時を取得できます。
結果はローカルタイムが9です。
世界協定時が9です。ですので、9時間の時差があります。

次は文字列で書かれた時刻の情報を9のような形式に変換するparseメソッドについて説明します。
このparseメソッドを使用するには冒頭に9を挿入することが必要です。
では例をみてみましょう。9 9のような時刻文字列を以下のような表示に変換します。
英字やH12のような文字列も使用できます。9

カテゴリー
Ruby

Hashクラスについて知ろう

この章ではHash(ハッシュ)クラスについて説明します。
Hash(ハッシュ)クラスにはハッシュに対して様々な操作をすることが出来るメソッドなどが多数あります。
初めにハッシュが指定したキーを持っているかどうかを調べるkey?メソッドについて説明します。
では例をみてみましょう。9 9もし、そのキーが存在しているならばtrue、存在していないのならばfalseを返します。
結果は「そのキーは存在します」です。

次にkey?メソッドと同じ働きをするhas_key?メソッドについて説明します。
では例をみてみましょう。9 9もし、そのキーが存在しているならばtrue、存在していないのならばfalseを返します。
結果は「そのキーは存在します」です。
次にkey?メソッドと同じ働きをするinclude?メソッドについて説明します。
では例をみてみましょう。99 もし、そのキーが存在しているならばtrue、存在していないのならばfalseを返します。
結果は「そのキーは存在します」です。

次にkey?メソッドと同じ働きをするmember?メソッドについて次に説明します。
では例をみてみましょう。99 もし、そのキーが存在しているならばtrue、存在していないのならばfalseを返します。
結果は「そのキーは存在します」です。
次にハッシュが指定した値を持っているかどうかを調べるvalue?メソッドについて説明します。
では例をみてみましょう。99 もし、その値が存在しているならばtrue、存在していないのならばfalseを返します。
結果は「その値は存在します」です。

次にvalue?メソッドと同じ働きをするhas_value?メソッドについて説明します。
使い方はvalue?メソッドと同じです。
では例をみてみましょう。99 もし、その値が存在しているならばtrue、存在していないのならばfalseを返します。
結果は「その値は存在します」です。

次にハッシュに要素が存在するかどうかを確認するempty?メソッドについて説明します。
では例をみてみましょう。99 もし、ハッシュに要素が存在しているならばfalse、存在していないのならばtrueを返します。
結果は「要素があります」です。

次にハッシュのキーを探し出して、そのキーと値を削除するdeleteメソッドについて説明します。
では例をみてみましょう。
999 指定したハッシュのキーとその値を削除します。
この例ではdeleteメソッドで9を削除したので、key?メソッドで調べても存在しません。

次にハッシュのすべての要素を削除するclearメソッドについて説明します。
では例をみてみましょう。99 ハッシュのすべての要素を削除します。
結果は「{}」です。つまりカラです。
次にハッシュの中から指定したキーと同じ要素を探し出して、見つかったのならばその要素の配列を作成するassocメソッドについて説明します。
基本構文は以下の通りです。9 では例をみてみましょう。9 9

次にハッシュの要素を他の要素に置き替えるreplaceメソッドについて説明します。
では例をみてみましょう。99 元のハッシュの要素を新たなハッシュの要素に置き替えます。
結果は9です。

カテゴリー
Ruby

stringクラスについて知ろう

この章ではstring(文字列)クラスについて説明します。
今まではダブルクォートやシングルクォートを付けた文字列を扱ってきましたが、これらはstringクラスのオブジェクトです。
「”犬 “」という文字列は9と書いても同じ意味になります。
ここからはstringクラスに関する便利な機能について説明します。
初めに文字列のサイズを取得する方法について説明します。
例をみてみましょう。9 「文字列.length」と言う形式で日本語や半角英数字や全角英数字などのサイズ(文字数)を取得できます。
この例の結果は上から「5」と「8」です。
バイト数を取得したい場合は9と言う形式で取得します。
では例をみてみましょう。99
次はsplitメソッドについて説明します。
では例をみてみましょう。99 文字列を特定の文字で分割して配列にします。
区切り指定文字は配列には入りません。
この例は文字列を9で区切って、それを配列にします。
結果は9という配列を出力します。
次の例をみてみましょう。9 文字列の中身を1文字ずつ配列で取り出したい場合は9と、記述します。
結果は9です。
次の例をみてみましょう。9 第二引数(先頭から2つ目の引数)は文字列を何個の要素に分割したいかを記述します。
変数aの文字列は9という文字列で一部構成されていますが、これはカラ文字を意味しています。
カラ文字も含めて分割したい場合は第2引数をマイナス指定します。

9でもマイナスであれば何でもいいです。
この例の結果は9です。
このカラ文字を分割時に削除したい場合はsplitメソッドの第 2引数に0を指定してください。
もしくは9と、0を付けなくてもいいです。
結果は9です。
次の例をみてみましょう。9 文字列を2つの要素を持つ配列にしたいのであれば第2引数には2を指定します。
結果は9です。
「”猫”」と9の2つに分割されています。9 次は文字列から要素を取り出したり、文字列の要素に新たな要素をセットする方法について説明します。
では例をみてみましょう。9 9と言う形式で指定するとそれに応じた文字列が取得できます。
添え字は一番前が0で次が9と数えます。
これは配列の添え字と考え方は一緒です。
この例の結果は「s」です。
その他の例をみてみましょう。9 日本語でも同じく使用できます。
結果は「あ」です。9 第 2引数を指定すると取り出す個数を指定できます。この例の場合は0番目の添え字から3個取り出すと言う意味になりますので、結果は「str」です。
次は添え字を使って、文字列の一部の中身を変えます。9 添え字で指定した位置に文字を上書きしたい場合には9と言う形式で指定します。
結果は「stoing」です。
次は「ここからここまで」という指定方法で要素を上書きする方法について説明します。9 「a[2..5]」は文字列の2番目から5番目まで要素を9で置き替えるので、答えは「star」になります。

次は文字列同士をつなげる方法について説明します。
では例をみてみましょう。9 文字列同士をつなげて新しい文字列を作成するには「+」を使用します。
結果は「string123」です。
他の方法でも文字列同士をつなげることは出来ますので例をみてみましょう。99 文字列同士をつなげる方法は2つあり、1つ目は92つ目は9を使います。
これらを使った場合は元の文字列自体の値が変わります。

次は文字列同士を比較する方法について説明します。
では例をみてみましょう。9 文字列同士が一致しているかどうかを調べるには9を使います。
一致していればtrue、一致していなければfalseになります。
次の例をみてみましょう。9 文字列同士が一致していないかを調べるには9を使います。
一致していなければtrue、一致していればfalseになります。

次の例は文字列を繰り返す演算子について説明します。9 「文字列*繰り返す回数」という構文で文字列を繰り返すことが出来ます。
この例では9と言う文字列を3回繰り返しています。
結果は9です。

次は文字列の中の文字が何番目にあるのかを調べる方法について説明します。99 指定の文字列の中で検索したい文字が何番目にあるのかを調べ、その位置を数値で返します。
indexメソッドは前から検索を始めて、rindexメソッドは後ろから検索を始めます。
しかし、何番目にあるのかを数えるのはindexでもrindexでも前からです。
a.index(“n”)は前から検索をするので、結果は4です。0から数えて4番目にあると言う意味です。
a.rindex(“n”)は後ろから検索するので、結果は16です。
ここで注意して欲しいのは後ろから指定文字を検索をするのですが、結果である指定文字の位置の特定は前から数えると言うことです。
では次に進みます。
文字列の中の何番目にあるかでは無くて、ただその文字が存在するかどうかを調べるには9を使います。9 文字列の中に検索文字が存在するかどうかを調べます。
含まれるときはtrue、含まれないときにはfalseを返します。
では例をみてみましょう。9 結果は「yes」です。
次は文字列の一部分を削除するslice!メソッドについて説明します。
では例をみてみましょう。99 結果はbを削除したので「acd」です。
次の例をみてみましょう。99 結果はb,c,dを削除したので「aefg」です。
次の例をみてみましょう。99 結果はb,c,dを削除したので「aefg」です。

次はユーザーに何かを入力してもらう時に使うgetsメソッドについて説明します。
では例をみてみましょう。9 まず初めに「年齢は?」と入力するように促します。
そして、「65」と、入力すると、その入力した結果がageに代入され、結果が出力されます。9 このようにユーザーに入力させるためのメソッドがgetsメソッドです。
ここで気を付けてほしいことは入力値が入っているage変数には改行も一緒に入っていますので9と出力しても、以下のように9だけが改行されてしまいます。9 そこでこの改行を消す機能がRubyには用意されていますので、次の例を見てみましょう。99 chompメソッドは、文字列の最後の改行文字を取り除いた新たな文字列を作成します。
この例ではユーザーが入力した文字列の改行を取り除きます。
結果は以下の通り、改行が取り除かれているのが分かります。9 その他にchomp!メソッドもありますが、これは元の文字列自体から改行を取り除いたものを作成します。9 では例をみてみましょう。9 結果は「abcd」です。

次はchompメソッドと同じようなメソッドのchopメソッドやchop!メソッドについて説明します。
chopメソッドは文字列の末尾が改行でも普通の文字でも関係なく、末尾を削除した新しい文字列を作成します。
chop!メソッドはchopメソッドと機能が同じですが、新しい文字列を作成するのではなく、元の文字列自体から末尾の文字を取り除いたものを作成します。9 では例をみてみましょう。9 結果はdが取り除かれているので「abcです」が出力されます。
chopメソッドの例をみてみましょう。9 ユーザーに入力してもらう場合はgets.chopと、記述します。
結果は以下の通りです。9
次はeach_lineメソッドについて説明します。このメソッドは繰り返し構文の一種ですが、文字列を指定文字で分割して、一行ずつ取り出してくれます。
では例をみてみましょう。99 引数を記述するとその文字列が改行文字になります。
引数を省略するとデフォルトでは9が改行文字になります。9 改行文字を取り除いて文字列を出力したい場合は以下のようにchompを付けます。9 結果は「123」です。
次はeach_byteメソッドについて説明します。
では例をみてみましょう。99 each_byteメソッドは文字列の中の一文字一文字のバイトコードを取り出して、変数に入れて出力するメソッドです。
結果は「8297」です。
R の文字コードが82で、aの文字コードが97なので、8297が出力されます。

次はeach_charメソッドについて説明します。
では例をみてみましょう。99 このメソッドは文字列の一文字一文字に対して繰り返し操作を加えるメソッドです。
結果は「1+2+3+4+」ですが、このように文字と文字の間に何か他の要素を入れたりすることが出来ます。
変数の値を他の文字と結びつけるには9と書きます。
次は文字列の中から特定の要素を削除するdeleteメソッドとdelete!メソッドについて説明します。
では例をみてみましょう。99 deleteメソッドは文字列の中から特定の要素を削除した新しい文字列を作成します。
delete!メソッドは新しい文字列を作成するのではなく、元の文字列から特定の要素を削除した文字列を作成します。
結果は「いうえお」です。
次の例をみてみましょう。9 結果は「いうえお」です。
次は文字列を浮動小数点数(Floatオブジェクト)に変換するto_fメソッドについて説明します。
では例をみてみましょう。9 文字列を浮動小数点数に変換しますが、3.789@の中の「@」のように浮動小数点数とは関係ない要素は削除されます。
9のようにすべて浮動小数点数とは関係ない要素の場合は「0.0」が出力されます。
結果は以下の通りです。9

文字列を10進数の整数に変換するto_iメソッドについて説明します。
では例をみてみましょう。99 文字列を10進数の整数に変換しますが、小数点以下は削除されます。
3.789@の中の「@」のように整数とは関係ない要素は削除されます。
9のようにすべて整数とは関係ない要素の場合は0が出力されます
結果は以下の通りです。9
次はreverse!メソッドとreverseメソッドについて説明します。
では例をみてみましょう。99 これは文字列を逆順に並べるメソッドです。
reverseメソッドは文字列を逆順に並べた新しい文字列を作成します
reverse!メソッドは元の文字列の順序を逆順にしたものを作成します。
結果は「おえういあ」です
次の例をみてみましょう。9 結果は「おえういあ」です。
次は文字列を他の文字列に変更するreplaceメソッドについて説明します。
では例をみてみましょう。9 9このメソッドは文字列を別の文字列に変更します。
この例では「あいうえお」を「かきくけこ」に書き替えます。
結果は「かきくけこ」です。

次は小文字を大文字に変換するupcase!メソッドとupcaseメソッドについて説明します。
では例をみてみましょう。99 upcaseメソッドは小文字を大文字に変換した新しい文字列を作成します。
upcase!メソッドは元の文字列を小文字から大文字に変換した文字列を作成します。
結果は「ABCD」です。
次の例を例をみてみましょう。9 結果は「ABCD」です。
次は大文字を小文字に変換するdowncase!メソッドとdowncaseメソッドについて説明します。
では例をみてみましょう。99 downcaseメソッドは大文字を小文字に変換した新しい文字列を作成します。
downcase!メソッドは新しい文字列を作成するのではなく、元の文字列を大文字を小文字に変換した文字列を出力します。
結果は「abcd」です。
次の例をみてみましょう。9 結果は「abcd」です。
次は文字列がカラかどうかを調べるempty?メソッドについて説明します。
では例をみてみましょう。9 9文字列がカラであるならばtrue,文字列に何か入っていればfalseです。
結果は「カラです」が出力されます。
次は文字列の中の特定の文字の要素数を調べるcountメソッドについて説明します。
では例をみてみましょう。9 99は文字列の中にaが何個あるかを調べ、9は文字列の中にabが何個あるかを調べ,9は文字列の中にaからzまでのアルファベットが何個あるかを調べています。9 先頭の小文字を大文字して、残りの文字列は小文字にするcapitalize!メソッドとcapitalizeメソッドについて説明します。
では例をみてみましょう。9 9capitalizeメソッドは先頭の文字を大文字して、残りの文字列は小文字にする新しい文字列を作成します。
capitalize!メソッドは新しい文字列を作成するのではなく、元の文字列の先頭の文字を大文字して、残りの文字列は小文字にする文字列を作成します。
結果は「Abcd」です。
次の例をみてみましょう。9 結果は「Abcd 」です。
次は文字列の最初の文字を取り除くchrメソッドについて説明します。
では例をみてみましょう。9 9取り除かれた文字列の最初の文字が返されます。
結果は文字列の最初の文字「A」が出力されます。
次は文字列をカラ文字にするclearメソッドについて説明します。
では例をみてみましょう。9 9結果は文字列をカラにするので9です。
つまりカラ文字です。

カテゴリー
Ruby

Arrayクラスについて知ろう

この章では配列の順番を変えたりするArrayクラスのメソッドなどについて説明します。これらのメソッドはArrayクラスにあらかじめ備わっている機能です。
初めにsliceメソッドについて説明します。9 a番目の添え字の要素からbの数だけ要素を取り出した新たな配列を作ります。9 この例の場合は犬から数えて3個取り出しています。
結果は9です。
sliceのもう一つの使い方を説明します。99 この構文は引数が1つですが、aの添え字に相当する要素を取り出して、その要素を返してくれます。
結果は「犬」です。
また9と同じ意味を、atメソッドを使って作ることが出来ます。99

次はsliceの引数に範囲演算子を使った例です。99 0番目の要素から3番目の要素までを切り取って新たな配列を返してくれます。9 次は連続していない配列の要素を切り取って、新たな配列にする方法です。
sliceは連続した要素しか切り取ることが出来ませんでした。
連続していない配列の要素を切り取るには9を使います。
9この構文では添え字に相当する要素を取得できます。
では例をみてみましょう。9 このように任意の添え字を指定するとその添え字に相当するデータを配列として取得できます。
結果は9です。

次は配列同士を足したり引いたりする演算を説明します。
では例をみてみましょう。99 num1とnum2と言う2つの配列がありますが、これに対して演算を行います。9 =>配列同士を足すと2つの配列の要素を重複した要素も一緒に足し合わせて、配列を作ります。
結果は9です。9 =>配列同士を足し合わせますが重複した要素は1つの要素とする配列をつくります。
結果は9です。
9=> num1からnum2にある要素を取り除いた配列を作ります。
num2の6,7,8はnum1には存在しないので無視されます。
結果は9です。

次は配列の先頭や末尾に新たな要素を付け加えたり、取り除いたりするメソッドについて説明します。
初めにunshiftメソッドについて説明します。99 この例ではサイを配列の先頭に付け加えていますので、
結果は以下の通りです。9 次はshiftメソッドについて説明します。99 この例では先頭の要素である猫を取り除いているので結果は9です。

次はpushメソッドについて説明します。99 この例ではサイを配列の末尾に付け加えていますので、結果は9です。
次はpopメソッドについて説明します。99 この例では末尾の要素であるネズミを取り除いているので、結果は9です。

次はfirstメソッドについて説明します。99 この例では猫を返しますので、結果は「猫」です。

次はlastメソッドについて説明します。99 この例ではネズミを返しますので、結果は「ネズミ」です。
次はconcatメソッドについて説明します。99 配列animalの末尾に別の配列9を結びつけますので、結果は以下の通りです。9 次はcompactメソッドとcompact!メソッドについて説明します。
違いは「!」が付いているか、付いていないかです。9 compactメソッドはnilを取り除いた新しい配列を作ります。
compact!メソッドもnilを取り除きますが、新しい配列を作るのではなく、元の配列自体を操作します。
では例をみてみましょう。9 結果は9ですが、元の配列も変わっているのが分かります。
次の例をみてみましょう。9 新しい配列を作るので、新たな配列aを作って、それにnilを取り除いた配列を代入しています。
結果は9です。
試しに9で出力すると元の配列9が変わらずに出力されます。
次はdeleteメソッドについて説明します。
では例をみてみましょう。99 猫を削除したので、結果は9です。

次はdelete_atメソッドについて説明します。
では例をみてみましょう。99 deleteは引数に要素そのものを指定するのに対して、9は添え字を指定します。
結果は9です。

次はdelete_ifメソッドについて説明します。
では例をみてみましょう。99 delete_ifメソッドは条件に合致した要素だけを削除します。
配列のそれぞれの要素が変数にセットされ、ブロック内の条件に合致した要素だけを削除します。
この例では7を超えている要素を削除しますので、8、9が削除されます。
結果は9です。

次はreject!メソッドについて説明します。
では例をみてみましょう。99 delete_ifメソッドと同じ働きをするreject!メソッドを説明します。
reject!メソッドは条件に合致した要素だけを削除します。
条件に合致した要素を新しい配列に入れるのではなく、元の配列に対して操作を行います。
結果は9です。

次はrejectメソッドについて説明します。
では例をみてみましょう。99 rejectメソッドは条件に合致した要素だけを削除します。
条件に合致した要素を新しい配列に入れます。
reject!メソッドは元の配列に対する操作でしたね。
結果は9です。

次はuniq!メソッドとuniqメソッドについて説明します。
uniq!メソッドは配列の要素の中で同じ要素があった場合には1つにまとめます。
また、このメソッドは新しい配列を作るのではなく、元の配列に対して操作を行います。
uniqメソッドは配列の要素の中で同じ要素があった場合は1つにまとめます。
また、このメソッドは新しい配列を作ります。9 では例をみてみましょう。9 結果は4つある1が1つになったので、9です。
次の例をみてみましょう。9 このメソッドは新しい配列を作りますので、配列aという新しい配列に結果を代入してから、出力しています。

次はcollec!メソッドについて説明します。
では例をみてみましょう。99 collec!メソッドは要素の数だけブロックの中を実行し、そのブロックで処理した結果を返します。
また、このメソッドは新しい配列を作るのではなく、元の配列に対して操作を行います。
この例では配列の要素に100を足したものを元の配列に入れています。
結果は9です。
これはmap!メソッドを使って、9と書き替えても同じ意味になります。9

次はcollectメソッドについて説明します。
では例をみてみましょう。99 collectメソッドは要素の数だけブロックの中を実行し、そのブロックで処理した結果を新たな配列として作成します
結果は9です。
次はfillメソッドについて説明します。
では例をみてみましょう。99 fillメソッドは配列の要素を指定した要素で置き替えます。
このメソッドは新たな配列を作成するのではなく元の配列に対して操作を行います。
結果は9です。
fillメソッドの別の例をみてみましょう。99 添え字を指定すると添え字以降の要素が指定した要素で置き換わります。
結果は9です。
fillメソッドの別の例をみてみましょう。99 添え字と個数を指定すると添え字から指定した個数だけ、指定した要素で置き替わります。
結果は9です。
さらにfillメソッドの別の例をみてみましょう。99 範囲演算子で「ここからここまで」と指定する方法です。
この例では3から6までの添え字の範囲を猫に変えています。
結果は9です。

次はreverse!メソッドについて説明します。
では例をみてみましょう。99 reverse!メソッドは配列の順序を逆にした配列を作成します。
この動作は新たな配列に対してではなく、元の配列に対して行われます。
結果は9です。
次はreverseメソッドについて説明します。
では例をみてみましょう。99 reverseメソッドは配列の順序を逆にした配列を作成します。
この動作は元の配列に対してではなく、新たな配列に対して行われます。
結果は9です。
次はsort!メソッドについて説明します。
では例をみてみましょう。99 sort!メソッドは配列の要素を小さい順に並び変えます。
この動作は新たな配列に対してではなく、元の配列に対して行われます。
結果は9です。

次はsortメソッドについて説明します。
では例をみてみましょう。99 sortメソッドもsort!メソッドと同じ機能なので、配列の要素を小さい順に並び変えます。この動作は元の配列に対してではなく、新たな配列に対して行われます。
結果は9です。
次の例をみてみましょう。99 このsortメソッドは「ブロックでソートする機能」です(ブロックとは{ }の中です)。
この動作は元の配列に対してではなく、新たな配列に対して行われます。
この例のブロック内は9となっていますが、これは大きい順になります。
結果は9です。
次の例をみてみましょう。99 このsort!メソッドは「ブロックでソートする機能」です。
この動作は新たな配列に対してではなく、元の配列に対して行われます。9 次は配列に文字列を追加する方法について説明します。
基本構文は以下の通りです。9 これは配列に文字列を付け加えて新たな配列を作成するのではなく、元の配列自体を変更します。9 結果は9です。

カテゴリー
Ruby

Numericクラスについて知ろう

この章ではNumericクラスについて説明します。
今まではクラスの作り方を説明してきましたが、Rubyにはあらかじめ定義されたクラスが存在します。
例えばNumericクラス、Stringクラス、Arrayクラス、Hashクラス、Timeクラス、Dateクラスなどがありますが、これらを一つずつ説明していきます。
初めにNumericクラスから説明します。
Numericクラスは以下のクラスに分類できます。9 NumericクラスはIntegerクラス、Floatクラス, Complexクラス, Rationalクラスに分かれ、IntegerクラスはさらにFixnumクラス、Bignumクラスに分かれます。
Numericクラスは今までたくさん使ってきました。
例えば「123」はFixnumクラスのオブジェクトで、「3.4」はFloatクラスのオブジェクトになります。
BignumクラスはFixnumクラスでは収まりきらないほど大きい数の時には自動的にBignumクラスに変換されます。
Rationalは分数の計算などに使われます。
使い方は9と言う形式で書きます。
下の例では分数同士の計算を行っています。
Ruby1.8(バージョン)を使っている場合は9という記述が必要になります(この本ではこの記述は必要ありません)。
では例をみてみましょう。99 この例は9の計算なので、結果は9です。
では次のcomplexクラスの例をみてみましょう。99 複素数の説明はここではしませんが、引数には実数と虚数を指定します。
結果は「2+4i」です。
次はdivmodメソッドについて説明します。これはNumericクラスのメソッドです。
例をみてみましょう。99 意味は「a/b」で計算した答えと余りを配列にしてくれます。
配列の0番目に答えが入り、1番目に余りが入ります。
余りはbの符号と同じ形式で表示されますので、bがマイナス表示ならばマイナスで表示されます。
結果は9です。
次はmoduloメソッドについて説明します。
これはNumericクラスのメソッドです。99 結果は「3」です。
次はremainderメソッドについて説明します。
これはNumericクラスのメソッドです。99 意味は「a%b」で計算した結果と同じです。
答えはaの符号と同じ形式で出力されます。
結果は上が「3」で下が「-3」になります。
次は四捨五入する方法や整数を浮動小数点数に変換する方法について説明します。
初めに整数値から浮動小数点数に変換する「to_fメソッド」について説明します。
このメソッドはIntegerクラスのメソッドです。99 答えは小数点形式の「31.0」になります。
次は四捨五入するroundメソッドについて説明します。
このメソッドは小数点以下を四捨五入します。99 答えは上が「12」で下が「13」です。
次は元の数値を大きい方、小さい方に揃えるメソッドについて説明します。99 ceilは数値を元の数値より大きい整数に揃えます。9 floorは数値を元の数値より小さい整数に揃えます。9 例の結果は上が「2」で下が「1」です
次は乱数を発生させるrandメソッドについて説明します。99 引数を入れなくても大丈夫ですが、その場合は1未満のランダムな浮動小数点数を返します。
引数を与えた場合は0からその数値以内の乱数を返します。
答えはその時々で違う数値が出力されますが、例えば以下のように出力されます。9 では他の例を紹介します。
rand(7)であれば0から6までの乱数値を生成します。
rand(6)+1であれば1から6までの乱数値を生成します。
乱数を発生させるRandomモジュールのrandを使うことでも乱数を発生させることが出来ます。
モジュールの作成方法については説明しましたが、RandomモジュールはRubyで機能が定義されているモジュールです。9 9引数を付けない時は0から1未満の数値が得られます。
引数を与えた場合は0から指定数値以内の乱数を得られます。
例えば引数が12であれば0から11までです。
次はMathモジュールについて説明します。
Mathモジュールは三角関数などの数学関係の演算が簡単に出来るメソッドを提供しています。999 では例をみてみましょう。9 メソッドを実行するには9と書きます
定数を実行するには9という形式で書きます。
結果は以下の通りです。9