Menu
CoddyTech

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) # 1

Fungsi 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.

challenge icon

Tantangan

Mudah

Tulis 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 itu
  • is_passing(points) mengembalikan true untuk nilai 60 atau lebih

Student di student.gd sudah memiliki property dan konstruktor. Lengkapi:

  • fungsi statis from_line(line), yang memisahkan baris seperti Ada 91 pada spasi dan mengembalikan Student baru dengan nama dan nilai tersebut
  • method report(), yang mengembalikan NAME: SCORE (LETTER), passed atau NAME: SCORE (LETTER), failed, dengan menggunakan kedua fungsi Grader

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 3

Kodemu 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])
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler GDScript online