Métodos
Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 5 de 65.
Uma função declarada dentro de uma classe é um método: algo que os objetos da classe podem fazer. Como qualquer função, um método pode receber parâmetros e retornar um valor, além de ler e alterar as variáveis do objeto:
# 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 pointsChame um método em um objeto usando um ponto e passe os argumentos entre parênteses:
var board := ScoreBoard.new()
board.greet() # Placar pronto
board.add(5)
print(board.doubled()) # 10
print(board.add_bonus()) # 15Dentro da classe, um método chama outro método do mesmo objeto pelo nome: add(10) em add_bonus() significa self.add(10).
Um método declarado com -> void não retorna nada, e um declarado com -> int deve retornar um int. Cada chamada funciona no próprio objeto: board.add(5) altera board.points e nenhum outro placar.
A chamada deve corresponder à declaração: board.add() sem um argumento é um erro relatado antes de o programa ser executado.
Desafio
FácilComplete os métodos da classe BankAccount em bank_account.gd. A conta mantém seu dinheiro na variável balance, que começa em 0.
deposit(amount)adicionaamountao saldowithdraw(amount)subtraiamounte retornatrue. Quandoamounté maior que o saldo, não altera nada e retornafalseget_balance()retorna o saldo
O código fornecido lê quantos comandos vêm a seguir e, então, um comando por linha: deposit AMOUNT ou withdraw AMOUNT. Ele imprime uma linha para cada comando e o saldo final. Para deposit 50 e withdraw 80, ele imprime:
Deposited 50
Not enough money for 80
Current balance: $50Seu código deve ficar em bank_account.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 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())
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
1Fundamentos da POO
Arquivos externosIntrodução à POOClasses vs. objetosA palavra-chave selfMétodosPropriedadesConstrutor (_init)Revisão - Calculadora simples4Polimorfismo
Revisitando a Sobrescrita de MétodosDuck TypingClasses e Métodos AbstratosDesign de InterfacesRevisão - Calculadora de Formas7Sinais
O que é um sinal?Declarando e emitindoConectando-se a sinaisSinais com argumentosRevisão - Sistema de saúde10Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite2Propriedades de Classe
Variáveis de Instância vs. EstáticasFunções EstáticasMétodos Setters de PropriedadeMétodos Getters de PropriedadePrivado por ConvençãoRecapitulando: Gerenciador de Conta Bancária5Encapsulamento
Membros públicos e privadosValidação com settersOcultação de informaçõesPropriedades somente para leituraRevisão - Sistema de registros de alunos8Conceitos Avançados de POO
Composição vs. HerançaClasses InternasNós como ComponentesRefCounted vs. NodeEnums em Classes3Herança
Herança básicaA palavra-chave superSobrescrita de métodosCadeias de herançaVerificações de tipo com isRevisão - Hierarquia de funcionários6Métodos especiais
Introdução aos métodos virtuaisO método _to_stringIteradores personalizadosRevisão - Lista personalizada9Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão StrategyPratique por conta própria: Compilador de GDScript online