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) # 1Statik 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.
Görev
KolayNotlandı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üris_passing(points), 60 veya üzeri içintruedö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 91gibi bir satırı bölen ve bu adı ve puanı içeren yeni birStudentdöndüren statikfrom_line(line)fonksiyonunu - iki
Graderfonksiyonunu kullanarakNAME: SCORE (LETTER), passedveyaNAME: SCORE (LETTER), faileddöndürenreport()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 3Kodunu 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])
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
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi