Fungsi statis
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 10 dari 65.
Sebuah static func menjadi bagian dari class, seperti variabel statis. Kamu memanggilnya melalui nama class, tanpa object, seperti yang kamu lakukan dalam pelajaran tentang file: Greeter.greet("Ada"). Sebuah class dapat menggabungkan fungsi statis dengan method biasa:
# 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) # 1Fungsi statis berjalan tanpa object, jadi tidak dapat menggunakan variabel instance atau self: score di dalam is_passing() adalah error yang dilaporkan sebelum program dijalankan. Fungsi ini dapat menggunakan parameter, konstanta, variabel statis, dan fungsi statis lainnya.
from_line() menunjukkan penggunaan umum: fungsi statis yang membuat dan mengembalikan sebuah object, dalam hal ini dari sebaris teks. Ini adalah cara kedua untuk membuat Student, selain Student.new().
Kamu juga dapat memanggil fungsi statis pada object, seperti ada.is_passing(50), tetapi nama class memperjelas bahwa tidak ada object yang terlibat.
Tantangan
MudahTulis kode penilaian dalam dua class.
Grader di grader.gd hanya memiliki fungsi statis:
letter(points)mengembalikan"A"untuk nilai 90 atau lebih,"B"untuk 80 atau lebih,"C"untuk 70 atau lebih,"D"untuk 60 atau lebih, dan"F"untuk nilai di bawah ituis_passing(points)mengembalikantrueuntuk nilai 60 atau lebih
Student di student.gd sudah memiliki property dan konstruktor. Lengkapi:
- fungsi statis
from_line(line), yang memisahkan baris sepertiAda 91pada spasi dan mengembalikanStudentbaru dengan nama dan nilai tersebut - method
report(), yang mengembalikanNAME: SCORE (LETTER), passedatauNAME: SCORE (LETTER), failed, dengan menggunakan kedua fungsiGrader
Kode yang disediakan membaca jumlah siswa berikutnya, membuat setiap siswa dengan Student.from_line(), mencetak laporannya, lalu menghitung jumlah siswa yang lulus. Untuk Ada 91, Bo 42 dan Cy 75, kode mencetak:
Ada: 91 (A), passed
Bo: 42 (F), failed
Cy: 75 (C), passed
Passed: 2 of 3Kodemu ditulis di grader.gd dan student.gd. main.gd berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan apa adanya
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])
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online