職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

引数を付けたメソッド呼び出し

2021年08月31日 | Ruby3.0.1
引数を付けたメソッド呼び出し

【開発環境】
OS:Win10(64ビット)
Ruby 3.0.1
VSCodeバージョン: 1.57.1

呼び出し側ではメソッドに渡したいオブジェクトを引数として記述してメソッドを呼び出します。
・書式
メソッド名(引数1, 引数2, ...)

・メソッド側
def メソッド名(変数1, 変数2, ...)
実行する処理
実行する処理
end
※メソッドを呼び出す側で指定した引数を「実引数」、メソッド定義側で記述した引数を「仮引数」と呼ぶこともあります。

例文
def printHello(msg, name)
print(msg + "," + name + "¥n")
end

printHello("Hello", "Yamada")
上記では引数として「Hello」と「Yamada」と言う文字列オブジェクトを2つ指定しています。メソッドでは引数として「msg」と「name」の2つの変数が指定されていますので、「Hello」が変数「msg」に代入され、「Yamada」が変数「name」に代入されます。

【メソッド定義での変数の扱い】
変数にオブジェクトが代入された時、
変数にはオブジェクトのコピーが格納されるのではなく、変数は代入されたオブジェクトを指し示すようになるだけでした。

メソッドを呼び出す時も同じであり、メソッドに渡されてきたオブジェクトは引数に指定された変数にコピーが格納されるのではなく、変数は引数として渡されてきたオブジェクトを指し示すことになります。

例文
def addString(str)
str << ",Japan"
end

address = "Tokyo"
print(address + "¥n")

addString(address)
print(address + "¥n")

上記ではメソッド内で引数として渡されてきた文字列オブジェクトに別の文字を追加しています。その結果、メソッド呼び出し前と呼び出し後では、変数「address」が指し示している文字列オブジェクトが書き換えられているため、メソッド呼び出しの前と後では別の文字列を出力します。


サンプルプログラム「test3-1.rb」
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

メソッドの定義と呼び出し

2021年08月30日 | Ruby3.0.1
メソッドの定義と呼び出し


【開発環境】
OS:Win10(64ビット)
Ruby 3.0.1
VSCodeバージョン: 1.57.1

【メソッドの定義】
・書式
def メソッド名(引数1, 引数2, ...)
実行する処理
実行する処理
end


メソッド名を指定する場合は次の規則に従って下さい。
1) 1文字目は英文字かアンダーバー(_)
2) 2文字目以降は英数文字、アンダーバー

変数名などと異なり大文字の英文字で開始することも可能です。ただし大文字で開始するのはお勧めはできません。

例文
def printHello
print("Hello¥n")
end

【メソッドの呼び出し】
定義されたメソッドを呼び出すと、処理がメソッド内に移りメソッド内に記述された処理が実行されます。

・書式
オブジェクト.メソッド名(引数1, 引数2, ...)

メソッドはクラス内で定義され、そのクラスから作成されるオブジェクト(レシーバーと呼ばれます)に対して行わせたい処理を記述するものです。その為、メソッドを呼び出す時には対象となるオブジェクトと実行させるメソッド名を指定して呼び出します。

例文
def printHello
print("Hello¥n")
end

printHello

サンプルプログラム「test2-1.rb」


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyにおけるトップレベル

2021年08月29日 | Ruby3.0.1
Rubyにおけるトップレベル



【トップレベルとは】
オブジェクト指向のプログラミングではクラスを定義し、そのクラスからオブジェクトを作成するということから開始します。ところが今までのサンプルでは次のように実行するプログラムを単に記述していました。

・記述例
print("Hello¥n")

このように特定のクラス定義の中に記述されたのではなく、クラス定義の外側の部分はトップレベルと呼ばれています。トップレベルにはクラスの定義などを記述できますし、プログラムが実行されるとトップレベルに記述されたプログラムが順に実行されて行きます。

【selfとmain】
Rubyでは「self」と呼ばれる式が用意されています。「self」はメソッド内で実行されると、そのメソッドを実行しているオブジェクトを参照することが出来ます。

ではトップレベルで「self」を実行するとどうなるのでしょうか。トップレベルは厳密にはメソッドではないのですが、「self」を実行すると「main」と言うオブジェクトを返してくれます。
例文
print(self.to_s)

「main」オブジェクト→オブジェクトに対して「class」メソッドを実行するとそのオブジェクトのクラスを返します。つまり、「Object」クラス
print(self.to_s)
print(self.class.to_s)

以上より、
Rubyではプログラムが実行されると「Object」クラスのオブジェクトである「main」を作成し、その「main」オブジェクトの中のとあるメソッド内に記述されたプログラムを実行しているようにも見えます。

サンプルプログラム「test1-1.rb」



コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ハッシュに含まれるキーや値を配列として取得する方法

2021年08月27日 | Ruby3.0.1
ハッシュに含まれるキーや値を配列として取得する方法


【開発環境】
OS:Win10(64ビット)
Ruby 3.0.1
VSCodeバージョン: 1.57.1

作成されたハッシュオブジェクトに含まれるキーや値だけを取り出すことが出来。更に、取り出された複数のキーや値を配列として扱える。

【キーの一覧を配列として取得:keys】
・書式
オブジェクト.keys

・例文
hash = {"Lemon" => 100, "Orange" => 150}
array = hash.keys

【値の一覧を配列として取得】
・書式
オブジェクト.values

・例文
hash = {"Lemon" => 100, "Orange" => 150}
array = hash.values

【キーと値のペアの一覧を配列として取得】
ハッシュに含まれるキーと値のペアを1つの配列として作成し、その配列を要素として持つ配列として取得するには「to_a」メソッドを使う。

・書式
オブジェクト.to_a

取得される配列
[[key1, values1], [key2, value2], ...]

サンプルプログラム「test8-1.rb」



コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ハッシュに対する繰り返し

2021年08月26日 | Ruby3.0.1
ハッシュに対する繰り返し

ハッシュオブジェクトは範囲オブジェクトや配列オブジェクトと同じく複数の要素を持つオブジェクトです。
ここではハッシュオブジェクトに対して繰り返し処理を行う方法を確認していきます。「each」メソッド、「each_key」メソッド、「each_value」メソッドがあります。

【開発環境】
OS:Win10(64ビット)
Ruby 3.0.1
VSCodeバージョン: 1.57.1

【eachメソッド】
ハッシュオブジェクトに対して「each」メソッドを実行すると、ハッシュに含まれる要素毎に「キー」と「値」を順にブロックに渡して繰り返し処理が行われる。

・書式
オブジェクト.each{|key, value|
実行する処理1
実行する処理2
}

例文
hash = {"Lemon" => 100, "Orange" => 150}

hash.each{|key, value|
print(key + "=>", value)
}

【each_keyメソッド】
要素の中の「キー」だけをブロック内に渡して繰り返し処理を行います
・書式
オブジェクト.each_key{|key|
実行する処理1
実行する処理2
}
例文
hash = {"Lemon" => 100, "Orange" => 150}

hash.each_key{|key|
print("key = " + key)
}

【each_valueメソッド】
要素の中の「値」だけをブロック内に渡して繰り返し処理を行います

・書式
オブジェクト.each_value{|value|
実行する処理1
実行する処理2
}
例文
hash = {"Lemon" => 100, "Orange" => 150}

hash.each_value{|value|
print("value = ", value)
}

サンプルプログラム「test7-1.rb」

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする