Funções Estáticas
Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 10 de 65.
Uma static func pertence à classe, como uma variável estática. Você a chama pelo nome da classe, sem um objeto, como fez na lição sobre arquivos: Greeter.greet("Ada"). Uma classe pode combinar funções estáticas com métodos comuns:
# 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) # 1Uma função estática é executada sem um objeto, então não pode usar variáveis de instância nem self: score dentro de is_passing() é um erro relatado antes de o programa ser executado. Ela pode usar seus parâmetros, constantes, variáveis estáticas e outras funções estáticas.
from_line() mostra um uso comum: uma função estática que cria e retorna um objeto, neste caso, a partir de uma linha de texto. É uma segunda maneira de criar um Student, além de Student.new().
Você também pode chamar uma função estática em um objeto, como em ada.is_passing(50), mas o nome da classe deixa claro que nenhum objeto está envolvido.
Desafio
FácilEscreva o código de notas em duas classes.
Grader em grader.gd tem apenas funções estáticas:
letter(points)retorna"A"para 90 ou mais,"B"para 80 ou mais,"C"para 70 ou mais,"D"para 60 ou mais e"F"abaixo dissois_passing(points)retornatruepara 60 ou mais
Student em student.gd já tem suas propriedades e seu construtor. Complete:
- a função estática
from_line(line), que divide uma linha comoAda 91no espaço e retorna um novoStudentcom esse nome e essa pontuação - o método
report(), que retornaNAME: SCORE (LETTER), passedouNAME: SCORE (LETTER), failed, usando as duas funções deGrader
O código fornecido lê quantos estudantes vêm a seguir, cria cada um com Student.from_line(), imprime seu relatório e, por fim, conta os estudantes aprovados. Para Ada 91, Bo 42 e Cy 75, ele imprime:
Ada: 91 (A), passed
Bo: 42 (F), failed
Cy: 75 (C), passed
Passed: 2 of 3Seu código deve ficar em grader.gd e student.gd. main.gd contém o código de entrada/saída fornecido 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 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])
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