Métodos Getters de Propriedade
Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 12 de 65.
Um bloco get:, o getter da propriedade, é executado toda vez que a propriedade é lida, e o que ele retorna é o valor que o leitor obtém. Use-o para um valor calculado a partir de outras propriedades:
# rectangle.gd
var width: int = 4
var height: int = 3
var area: int:
get:
return width * heightvar r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30r.area é lido como uma variável, sem parênteses, mas é calculado novamente a cada leitura, então sempre corresponde à largura e à altura atuais.
Uma propriedade pode ter ambos os blocos. Aqui, fahrenheit apenas converte: ao lê-la, ela converte de celsius, e ao atribuir um valor a ela, converte de volta e armazena o resultado em celsius:
# temperature.gd
var celsius: float = 0.0
var fahrenheit: float:
get:
return celsius * 9 / 5 + 32
set(value):
celsius = (value - 32) * 5 / 9t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0Uma propriedade com apenas get: é somente leitura por convenção. Atribuir um valor a ela não é um erro, mas o getter ignora o que foi atribuído: após r.area = 100, r.area ainda retorna 30.
Desafio
FácilComplete a classe Temperature em temperature.gd. Ela armazena um valor, celsius, e calcula as outras escalas a partir dele:
fahrenheit: o getter retornacelsius * 9 / 5 + 32, e o setter armazena(value - 32) * 5 / 9emcelsiuskelvin: uma propriedade somente para leitura cujo getter retornacelsius + 273.15
O código fornecido lê quantos comandos vêm a seguir e, então, um por linha: c VALUE define celsius e f VALUE define fahrenheit. Após cada comando, ele imprime as três propriedades com duas casas decimais. Para c 25, f 98.6 e c -40, ele imprime:
25.00 C | 77.00 F | 298.15 K
37.00 C | 98.60 F | 310.15 K
-40.00 C | -40.00 F | 233.15 KSeu código deve ficar em temperature.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 temp := Temperature.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "c":
temp.celsius = float(parts[1])
else:
temp.fahrenheit = float(parts[1])
print("%.2f C | %.2f F | %.2f K" % [temp.celsius, temp.fahrenheit, temp.kelvin])
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