メソッド
CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 5/65。
クラス内で宣言された関数はメソッドです。つまり、そのクラスのオブジェクトができることです。ほかの関数と同様に、メソッドはパラメーターを受け取り、値を返すことができます。また、オブジェクトの変数を読み取ったり変更したりできます。
# score_board.gd
class_name ScoreBoard
extends RefCounted
var points: int = 0
func greet() -> void:
print("Scoreboard ready")
func add(amount: int) -> void:
points += amount
func doubled() -> int:
return points * 2
func add_bonus() -> int:
add(10)
return pointsドットを使ってオブジェクトのメソッドを呼び出し、括弧内に引数を渡します。
var board := ScoreBoard.new()
board.greet() # スコアボードの準備完了
board.add(5)
print(board.doubled()) # 10
print(board.add_bonus()) # 15クラス内では、メソッドはその名前を使って同じオブジェクトの別のメソッドを呼び出します。add_bonus()内のadd(10)は、self.add(10)を意味します。
-> voidで宣言されたメソッドは何も返さず、-> intで宣言されたメソッドはintを返す必要があります。それぞれの呼び出しは独立したオブジェクトに対して動作します。board.add(5)はboard.pointsを変更し、ほかのスコアボードは変更しません。
呼び出しは宣言と一致している必要があります。引数なしの board.add() は、プログラムの実行前に報告されるエラーです。
チャレンジ
簡単bank_account.gd 内のクラス BankAccount のメソッドを完成させてください。口座のお金は変数 balance に保持され、初期値は 0 です。
deposit(amount)は残高にamountを加算しますwithdraw(amount)はamountを差し引き、trueを返します。amountが残高を超える場合は、何も変更せずfalseを返しますget_balance()は残高を返します
提供されたコードは、後に続くコマンドの数を読み取ってから、1行につき1つのコマンドを読み取ります。コマンドは deposit AMOUNT または withdraw AMOUNT です。各コマンドに対して1行と、最終残高を出力します。deposit 50 と withdraw 80 に対して、次のように出力します。
Deposited 50
Not enough money for 80
Current balance: $50コードは bank_account.gd に記述してください。main.gd には提供された入出力コードがあり、編集できません。
自分で試してみよう
extends Node
func _ready():
# 提供された入出力コード:そのままにしてください
var account := BankAccount.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var amount := int(parts[1])
if parts[0] == "deposit":
account.deposit(amount)
print("Deposited %d" % amount)
elif account.withdraw(amount):
print("Withdrew %d" % amount)
else:
print("Not enough money for %d" % amount)
print("Current balance: $%d" % account.get_balance())
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ