Menu
CoddyTech

Statik Fonksiyonlar

Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 10 / 65.

Bir static func, statik bir değişken gibi sınıfa aittir. Dosyalarla ilgili derste yaptığın gibi, nesne kullanmadan sınıf adı üzerinden çağırırsın: Greeter.greet("Ada"). Bir sınıf, statik işlevleri sıradan metotlarla birlikte kullanabilir:

# 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

Statik bir fonksiyon nesne olmadan çalışır, bu nedenle örnek değişkenlerini veya self kullanamaz: is_passing() içindeki score, program çalışmadan önce bildirilen bir hatadır. Parametrelerini, sabitleri, statik değişkenleri ve diğer statik fonksiyonları kullanabilir.

from_line() yaygın bir kullanım örneğidir: burada bir metin satırından nesne oluşturan ve döndüren statik bir fonksiyon. Student.new()'in yanı sıra Student oluşturmanın ikinci bir yoludur.

Bir nesne üzerinde statik bir işlevi de çağırabilirsiniz; örneğin ada.is_passing(50), ancak sınıf adı hiçbir nesnenin söz konusu olmadığını açıkça belirtir.

challenge icon

Görev

Kolay

Notlandırma kodunu iki sınıfta yaz.

grader.gd içindeki Grader yalnızca statik fonksiyonlara sahiptir:

  • letter(points), 90 veya üzeri için "A", 80 veya üzeri için "B", 70 veya üzeri için "C", 60 veya üzeri için "D" ve daha düşük puanlar için "F" döndürür
  • is_passing(points), 60 veya üzeri için true döndürür

student.gd içindeki Student sınıfının özellikleri ve kurucusu zaten tanımlıdır. Şunları tamamla:

  • boşlukta Ada 91 gibi bir satırı bölen ve bu adı ve puanı içeren yeni bir Student döndüren statik from_line(line) fonksiyonunu
  • iki Grader fonksiyonunu kullanarak NAME: SCORE (LETTER), passed veya NAME: SCORE (LETTER), failed döndüren report() metodunu

Sağlanan kod, kaç öğrencinin geleceğini okur, her birini Student.from_line() ile oluşturur, raporunu yazdırır ve son olarak geçen öğrencileri sayar. Ada 91, Bo 42 ve Cy 75 için şu çıktıyı verir:

Ada: 91 (A), passed
Bo: 42 (F), failed
Cy: 75 (C), passed
Passed: 2 of 3

Kodunu grader.gd ve student.gd dosyalarına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

extends Node

func _ready():
	# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
	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])
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online GDScript derleyicisi