静的関数
CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 10/65。
static func は静的変数と同様に、クラスに属します。ファイルについてのレッスンで行ったように、オブジェクトを使わず、クラス名を通して呼び出します。例: Greeter.greet("Ada")。クラスでは、静的関数と通常のメソッドを組み合わせることができます。
# student.gd
class_name Student
extends RefCounted
static var count: int = 0
var student_name: String
var score: int
func _init(new_name: String, new_score: int) -> void:
student_name = new_name
score = new_score
count += 1
static func is_passing(points: int) -> bool:
return points >= 60
static func from_line(line: String) -> Student:
var parts := line.split(" ")
return Student.new(parts[0], int(parts[1]))print(Student.is_passing(72)) # true
var ada := Student.from_line("Ada 91")
print(ada.score) # 91
print(Student.count) # 1静的関数はオブジェクトなしで実行されるため、インスタンス変数や self は使用できません。is_passing() 内の score は、プログラムの実行前に報告されるエラーです。静的関数は、引数、定数、静的変数、その他の静的関数を使用できます。
from_line()は一般的な使い方を示しています。テキストの1行からオブジェクトを構築して返す静的関数です。これは、Student.new()に加えて、Studentを作成する2つ目の方法です。
ada.is_passing(50)のようにオブジェクトに対して静的関数を呼び出すこともできますが、クラス名を使うことで、オブジェクトが関与していないことが明確になります。
チャレンジ
簡単採点コードを2つのクラスに記述してください。
grader.gdのGraderには、静的関数のみを定義します。
letter(points)は、90以上なら"A"、80以上なら"B"、70以上なら"C"、60以上なら"D"、それ未満なら"F"を返しますis_passing(points)は、60以上ならtrueを返します
student.gdのStudentには、プロパティとコンストラクターがすでに定義されています。次を完成させてください。
- 静的関数
from_line(line)。Ada 91のような行を空白で分割し、その名前と点数を持つ新しいStudentを返します - メソッド
report()。2つのGrader関数を使用して、NAME: SCORE (LETTER), passedまたはNAME: SCORE (LETTER), failedを返します
用意されたコードは、続く生徒の人数を読み取り、それぞれをStudent.from_line()で作成してレポートを出力し、最後に合格した生徒の人数を数えます。Ada 91、Bo 42、Cy 75の場合、次のように出力します。
Ada: 91 (A), passed
Bo: 42 (F), failed
Cy: 75 (C), passed
Passed: 2 of 3コードはgrader.gdとstudent.gdに記述してください。main.gdには用意された入出力コードがあり、編集できません。
自分で試してみよう
extends Node
func _ready():
# 提供された入出力コード: そのままにしてください
var count := int(OS.read_string_from_stdin())
var passed := 0
for i in count:
var student := Student.from_line(OS.read_string_from_stdin())
print(student.report())
if Grader.is_passing(student.score):
passed += 1
print("Passed: %d of %d" % [passed, count])
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ