職案人

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

クラスの中にモジュールをインクルードする

2021年12月28日 | Ruby3.0.1
クラスの中にモジュールをインクルードする


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

・今度はモジュールの2番目の使い方としてクラスの中にインクルードする方法を確認します。

例文
module SuuchiModule
def minValue(x, y)
if x < y
return x
else
return y
end
end
end

・クラスの中でモジュールを利用できるようにするにはクラスの中に次のように記述します。
include モジュール名

例文
class Test
include SuuchiModule

def dispValue(x, y)
min = minValue(x, y)
print("2つの値", x, "と", y, "の中で小さい値は", min, "です¥n")
end
end

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

モジュールを関数のように使う

2021年12月27日 | Ruby3.0.1
モジュールを関数のように使う


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

【モジュール使用法】
1)モジュールの使用方法は関数のようにモジュール内に定義されたメソッドを実行する。
2)クラスの中にインクルードする。

■メソッドを実行する例
module SuuchiModule
def minValue(x, y)
if x < y
return x
else
return y
end
end

def maxValue(x, y)
if x > y
return x
else
return y
end
end

モジュール内のメソッドをモジュール関数として実行できるように設定する。
設定方法→module_function :メソッド名

module_function :minValue
module_function :maxValue
end

メソッドの実行
print(SuuchiModule.minValue(10, 8), "¥n")
print(SuuchiModule.maxValue(10, 8), "¥n")

サンプル


【モジュールをインクルードする】
モジュールに含まれるメソッドは「モジュール名.メソッド名」のように実行します。ただ実行する回数が多い場合などは先にモジュールをインクルードしておくことで単に「メソッド名」の形で実行することも出来ます。

モジュールをインクルードするには
include モジュール名

module SuuchiModule
def minValue(x, y)
if x < y
return x
else
return y
end
end

def maxValue(x, y)
if x > y
return x
else
return y
end
end

module_function :minValue
module_function :maxValue
end

include SuuchiModule
print(minValue(10, 8), "¥n")
print(maxValue(10, 8), "¥n")

サンプル

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

モジュールの定義

2021年12月24日 | Ruby3.0.1
モジュールの定義


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

【モジュールとは】
モジュールはクラスと同じくメソッドを定義する事が出来ます。クラス変数に相当するものはモジュールにはありませんが定数は定義する事が出来ます。
 しかし、クラスと違い!オブジェクトを作成することが出来ない。

【モジュールの形式】
module モジュール名

end

【モジュールの利用法】
「モジュール名.メソッド名」の形式で関数のように実行するか、または他のクラスの中にインクルードして利用することが出来ます。

サンプルプログラム


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

アクセス制御をまとめて設定する

2021年12月22日 | Ruby3.0.1
アクセス制御をまとめて設定する


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

■アクセス制御を設定するには前のページで確認したとおり「public :メソッド名」又は「private :メソッド名」で個々のメソッド毎に設定していましたが、多くのメソッドを定義する場合はまとめてアクセス制御を設定することが可能です。

プログラム中に「public」とだけ記述すると、それ以降に定義されたメソッドは全て「public」なメソッドとなります。また同様に「private」とだけ記述すると、それ以降に定義されたメソッドは全て「private」なメソッドとなります。

例文
class Car
public
def accele(acceletime=1)
print("アクセルを踏みました¥n")
print("スピードは", calcSpeed(acceletime), "Kmです¥n")
end

def brake
print("ブレーキを踏みました¥n")
end

private
def calcSpeed(acceletime)
return acceletime * 10
end
end

car = Car.new
car.accele(10)

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

アクセス制御

2021年12月20日 | Ruby3.0.1
アクセス制御


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

クラス内に定義されたメソッドは、クラスから作成されたオブジェクトから実行することが可能となっています。
ただ場合によってはクラス内の他のメソッドから実行されるだけのメソッドを定義する場合もあります。

クラス内からしか実行されないメソッドは
オブジェクトから実行出来るようになっていると予想外の結果となることがありますので、オブジェクトからは実行出来ないようにアクセスを制限する事が可能です。

メソッドのアクセスを制限するには、メソッドのアクセス制御レベルをメソッド毎に設定します。
オブジェクトからインスタンスメソッドとして実行可能なメソッドは「public」、クラス内の他のメソッドからのみ実行可能実行可能なメソッドは「private」を指定します。

【アクセス制御の設定方法】
サンプル
class Car
def accele
print("アクセルを踏みました¥n")
end

def brake
print("ブレーキを踏みました¥n")
end
end
「Car」クラス内で定義された「accele」メソッドと「brake」メソッドはどちらも「Car」クラスのオブジェクトから実行可能としたいので「public」を指定します。

実は特に指定しない場合は「public」に設定されていますが明示的に指定してみます
class Car
def accele
print("アクセルを踏みました¥n")
end

public :accele

def brake
print("ブレーキを踏みました¥n")
end

public :brake
end

car = Car.new
car.accele(10)

メソッドを「public」に明示的に指定するには「public :メソッド名」と記述します。ここで指定したメソッドはアクセス制御が「public」に指定されます。

【「private」なメソッド】
class Car
def accele(acceletime=1)
print("アクセルを踏みました¥n")
print("スピードは", calcSpeed(acceletime), "Kmです¥n")
end

public :accele

def brake
print("ブレーキを踏みました¥n")
end

public :brake

def calcSpeed(acceletime)
return acceletime * 10
end

private :calcSpeed
end

car = Car.new
car.accele(10)

「calcSpeed」はアクセスを踏んだ秒数に応じて速度を計算するメソッドです。このメソッドはクラス内の「accele」メソッドからしか呼び出されません。

【initializeメソッドの扱い】
通常のメソッドは特に指定しない場合は「public」となりますが「initialize」メソッドだけは常に「private」メソッドとして定義されます。よって「initialize」メソッドをクラスのオブジェクトから実行することは出来ません。

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