Menu
CoddyTech
flag Ar iconالعربيةdown icon

الأساليب

جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 5 من 65.

الدالة المُعلنة داخل صنف هي طريقة: شيء تستطيع كائنات الصنف القيام به. مثل أي دالة، يمكن للطريقة أن تأخذ معاملات وتُرجع قيمة، كما يمكنها قراءة متغيرات الكائن وتغييرها:

# score_board.gd
class_name ScoreBoard
extends RefCounted

var points: int = 0

func greet() -> void:
	print("Scoreboard ready")

func add(amount: int) -> void:
	points += amount

func doubled() -> int:
	return points * 2

func add_bonus() -> int:
	add(10)
	return points

استدعِ طريقة على كائن باستخدام نقطة، ومرّر الوسائط بين القوسين:

var board := ScoreBoard.new()
board.greet() # لوحة النتائج جاهزة
board.add(5)
print(board.doubled()) # 10
print(board.add_bonus()) # 15

داخل الصنف، تستدعي إحدى الطرق طريقةً أخرى في الكائن نفسه باسمها: تعني add(10) في add_bonus() ‏self.add(10).

الطريقة المُعرَّفة باستخدام -> void لا تُرجع شيئًا، والطريقة المُعرَّفة باستخدام -> int يجب أن تُرجع قيمة من النوع int. يعمل كل استدعاء على كائنه الخاص: يغيّر board.add(5) قيمة board.points ولا يغيّر أي لوحة نتائج أخرى.

يجب أن يتطابق الاستدعاء مع التصريح: يُعدّ board.add() من دون وسيطة خطأً يُبلَّغ عنه قبل تشغيل البرنامج.

challenge icon

التحدي

سهل

أكمل أساليب الصنف BankAccount في الملف bank_account.gd. يحتفظ الحساب بأمواله في المتغير balance، الذي تبدأ قيمته عند 0.

  • تضيف deposit(amount) القيمة amount إلى الرصيد
  • تطرح withdraw(amount) القيمة amount وتُرجع true. عندما تكون amount أكبر من الرصيد، لا تغيّر شيئًا وتُرجع false
  • تُرجع get_balance() الرصيد

يقرأ الكود المرفق عدد الأوامر التالية، ثم يقرأ أمرًا واحدًا في كل سطر: deposit AMOUNT أو withdraw AMOUNT. يطبع سطرًا لكل أمر، ثم يطبع الرصيد النهائي. عند إدخال deposit 50 وwithdraw 80، يطبع:

Deposited 50
Not enough money for 80
Current balance: $50

ضع الكود في bank_account.gd. يحتوي main.gd على كود الإدخال والإخراج المرفق، ولا يمكن تعديله.

جرّب بنفسك

extends Node

func _ready():
	# شيفرة الإدخال والإخراج المقدَّمة: أبقِها كما هي
	var account := BankAccount.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var amount := int(parts[1])
		if parts[0] == "deposit":
			account.deposit(amount)
			print("Deposited %d" % amount)
		elif account.withdraw(amount):
			print("Withdrew %d" % amount)
		else:
			print("Not enough money for %d" % amount)
	print("Current balance: $%d" % account.get_balance())
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجّه

تدرّب بنفسك: مترجم GDScript عبر الإنترنت