Récapitulatif – Liste personnalisée
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 34 sur 65.
Défi
MoyenÉcrivez CustomList dans custom_list.gd, une classe qui encapsule un Array privé _items et fournit les fonctionnalités nécessaires à une liste au moyen de méthodes et de méthodes virtuelles :
_init(items = [])stocke une copie deitems, afin que les modifications ultérieures apportées à l’Array transmis ne soient pas répercutées dans la liste.append(item)ajoute un élément à la fin.pop_back()supprime et renvoie le dernier élément, ou renvoienullsi la liste est vide.get_at(index)renvoie l’élément, ounullsi l’index est en dehors de0àsize() - 1.set_at(index, value)remplace l’élément et renvoietrue, ou renvoiefalsesi l’index est en dehors de la liste.size(),has(item)etclear()fonctionnent comme les méthodes Array portant les mêmes noms.concat(other)remplace l’opérateur+: la méthode renvoie un nouveauCustomListcontenant les éléments de cette liste, suivis de ceux deother, sans modifier aucune des deux listes._to_string()renvoie les éléments tels qu’un Array les affiche, par exemple[3, 1, 4]._iter_init(),_iter_next()et_iter_get()permettent à une boucleforde parcourir les éléments.
Le code fourni lit les nombres de départ (une ligne, séparés par des espaces, éventuellement vide), crée la liste, ajoute 99 à l’Array qui lui a été transmis, puis affiche la liste. Ensuite, il lit le nombre de commandes et en exécute une par ligne : append N, pop, get I, set I N, has N, size, sum (une boucle for sur la liste), clear et concat N N .... Pour cette entrée :
3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2le programme affiche :
[3, 1, 4]
[3, 1, 4, 1]
Item 2: 4
No item at 9
[5, 1, 4, 1]
Has 4: true
Sum: 11
Popped 1
[5, 1, 4] + [9, 2] = [5, 1, 4, 9, 2]Votre code doit être écrit dans custom_list.gd. main.gd contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
extends Node
func _ready():
# Code d'entrée/sortie fourni : conservez-le tel quel
var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
var list := CustomList.new(numbers)
# La liste doit conserver sa propre copie
numbers.append(99)
print(list)
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ", false)
match parts[0]:
"append":
list.append(int(parts[1]))
print(list)
"pop":
var item = list.pop_back()
print("Empty" if item == null else "Popped %d" % item)
"get":
var item = list.get_at(int(parts[1]))
print(("No item at " + parts[1]) if item == null else "Item %s: %d" % [parts[1], item])
"set":
if list.set_at(int(parts[1]), int(parts[2])):
print(list)
else:
print("No item at " + parts[1])
"has":
print("Has %s: %s" % [parts[1], list.has(int(parts[1]))])
"size":
print("Size: %d" % list.size())
"sum":
var total := 0
for item in list:
total += item
print("Sum: %d" % total)
"clear":
list.clear()
print(list)
"concat":
var other := CustomList.new(to_numbers(parts.slice(1)))
print("%s + %s = %s" % [list, other, list.concat(other)])
func to_numbers(words: PackedStringArray) -> Array:
var result := []
for word in words:
result.append(int(word))
return result
Toutes les leçons de Programmation orientée objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne