こんにちは、すぐるです!
sugulogをお読みいただきありがとうございます!!
このブログは、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準に書いています。
少しでもお役に立てれば幸いです。
今回は、自分自身でメソッドを作ろうということで
-
クラスとインスタンス
の前編について簡単に解説します!!
その為このブログを読むことで、自分自身でメソッドを作る方法を理解できるのはもちろん、それに付属する様々な概要についても理解が深まります。
是非最後までご愛読ください。
今回は、
-
メソッドの定義
-
戻り値
-
スコープ
-
引数
-
クラス
の順に解説していきます!
それでは早速、メソッドの定義からみていきましょう!!
・メソッドの定義
Rubyで予め用意されたputs、to_i、lengthなどのメソッド以外に、自分でも定義することができる。
では実際に、どのように定義するのかみていきましょう!
今回は、100円の食品を買ったときの税金を計算してくれるメソッドを定義してみました。
またメソッド名は自由に決められますが、どのような処理が行われるかわかるメソッド名にしましょう。
そしてここで、1つだけ注意点があります。
メソッドの定義部分は、そのメソッドが実行されるまで読み込まれないということです。
なぜ読み込まれないのかというと戻り値という概念があるからです。
それでは次に、その戻り値についてみていきましょう!!
因みに処理を実行する際は、メソッド名を記述すれば実行されます。
(上記の場合だとfood_taxと記述すれば実行されます。)
・戻り値(返り値)
メソッドから呼び出した場所に渡される値のこと。メソッド処理後の最終的な値のこと。
実は、予め用意されているメソッドを実行した際に返される値も全て戻り値です。
本来メソッドは、定義され実行され戻り値を返すを基本としています。
そのため先程のコードを実行すると、以下のような動きになります。
まとめると、def~endで定義されるメソッドは定義しているだけ実行する必要があり、実行される際は上記のような動きで実行されるということです。
そして予め用意されているメソッドは、定義部分が予め組み込まれているため目には見えないですが、同じ動きで実行されています。
つまり実行の仕方は同じで、定義部分が目に見えるか見えないかの違いってことですね!!
・スコープ
定義した変数が使える範囲のこと。
メソッドの外で定義されている変数はメソッドの中では使えず、メソッドの中で定義された変数はメソッドの外では使えないという概念があります。
そのためコンソール上で入力された食品の税を計算したくても、以下のように外で定義した変数は中では使えないためエラーが出てしまいます。
だったらpriceの変数定義自体をメソッドに入れればいいと思うかもしれませんが、それが使えるのは今回のように1つの箇所でしか使わない場合のみです。
メソッドの中で定義された変数はメソッドの外では使えないというスコープもあるので、2箇所以上で変数を使用する場合、また同じような記述をしコンソールからまた同じ値を入力し直してもらう必要があったりとかなり不便になってしまいます。
ではどのようにすればいいのでしょうか。
そこで次に、引数について学んでいきましょう!!
・引数
メソッドなどに渡すことのできる値のこと。
この引数を使うことにより、スコープ外の変数の値をメソッド内で扱うことができます。
この引数を使うと先程のエラーが出たコードは以下のように書き換えられます!
これで100円の食品以外に、入力された全ての税計算が行えるようになりました!
また仮引数とは、実引数からもらった値をメソッド内で使うための変数みたいなものです。
そして実引数とは、仮引数に渡す値のことです。
ここで注目して欲しいのは、実引数がpriceで値を送ったからと言って、仮引数はpriceで受ける必要がないことです。
ただもし実引数で2つ以上の値を渡す時、仮引数では2つ以上の値を受けるための記述をしなければいけません。
つまり、実引数の値の数と仮引数の値の数は必ず一致している必要があるということです!!
またその際、実引数の1つ目の値(第一引数)は仮引数の1つ目の値(第一引数)に渡され、実引数の2つ目の値(第二引数)は仮引数の2つ目の値(第二引数)に渡されるように、それぞれ該当する引数に渡されます。
・クラス
共通のルールを持った上で個別のデータを管理することができる設計図みたいなもの。
クラスを使うことで開発・管理・保守がし易くなるという利点があります。
イメージとしては、一般的なカレーのレシピを想像してください。
このレシピを見ることでどんなカレーが作れるかわかるように、クラスではどんな処理を行うための設計図なのか指定するみたいな感じです!
今はまだそんなものなのかで大丈夫です。
書き方としてはclassの横にクラス名を記述し、class~endの間にメソッドを定義していく流れになります。
ただ注意点としてclass名は大文字から始めることです!
ここだけはおさえておきましょう!!
以上、今回のブログでした。
自分自身でメソッドを作る方法を理解できるのはもちろん、それに付属する様々な概要についても理解が深まりましたか??
次回は後編についてブログを書くので、そちらも合わせてお読みください(≧∀≦)/
最後に!!
今後も、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準にブログを書いていきます。
少しでも気になった方はお試しでもいいので1度、読者登録お願いします!
またTwitterでもプログラミングに関することを中心に情報を発信してます。
宜しければそちらのフォローもお願いします。
最後までご愛読いただきありがとうございました!!