Menu
CoddyTech

Classes vs. objetos

Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 3 de 65.

Uma classe e seus objetos contêm coisas diferentes. Uma const em uma classe pertence à própria classe: há um único valor, e você o lê por meio do nome da classe sem criar um objeto.

# dog.gd
class_name Dog
extends RefCounted

const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"
print(Dog.SPECIES) # Canis familiaris

As linhas var descrevem o que cada objeto contém. Cada objeto criado com new() recebe sua própria cópia dessas variáveis, começando com seus valores padrão:

var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # Unnamed

Alterar dog1 deixa dog2 como estava. Um objeto também pode ler a constante: dog1.SPECIES tem o mesmo valor que Dog.SPECIES.

Um objeto tem apenas as variáveis declaradas por sua classe. dog1.color = "brown" interrompe o programa com um erro, porque Dog não tem uma variável color. Todas as variáveis de que um objeto precisa vão para a classe.

challenge icon

Desafio

Fácil

Complete a classe Student em student.gd:

  • uma constante SCHOOL com o valor "Godot High School", compartilhada por toda a classe
  • uma variável String chamada student_name
  • uma variável String chamada grade que começa como "N/A"

O código fornecido lê quantos estudantes vêm a seguir e, depois, uma linha por estudante: um nome, opcionalmente seguido por um espaço e uma nota. Ele cria um Student para cada linha, define seu nome e define sua nota somente quando a linha contém uma. Em seguida, imprime Student.SCHOOL e cada estudante. Para as linhas Alice A e Bob, imprime:

School: Godot High School
Alice has grade A
Bob has grade N/A

Seu código deve ficar em student.gd. main.gd contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

extends Node

func _ready():
	# Código de entrada/saída fornecido: mantenha-o como está
	var count := int(OS.read_string_from_stdin())
	var students: Array[Student] = []
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ", false)
		var student := Student.new()
		student.student_name = parts[0]
		if parts.size() > 1:
			student.grade = parts[1]
		students.append(student)
	print("School: %s" % Student.SCHOOL)
	for student in students:
		print("%s has grade %s" % [student.student_name, student.grade])
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação orientada a objetos

Pratique por conta própria: Compilador de GDScript online