La tâche
Je suppose que tout le monde aime la génération automatique de code et gagner du temps pendant le travail. Vous devez créer beaucoup de classes et de membres pendant la journée et vous ne voulez pas créer tous ceux-ci getters
manuellement.
La tâche consiste à écrire un programme ou une fonction, qui génère getters
automatiquement pour tous les membres de la classe pour vous.
L'entrée
Dans notre langage, les objets sont très simples. Les noms des classes et des membres doivent commencer par un caractère de [a-zA-Z]
et ne peuvent contenir que les caractères [a-zA-Z0-9]
. Voici un exemple:
class Stack {
public overflow;
protected trace;
private errorReport;
}
Le résultat
Il s'agit d'une sortie valide basée sur l'exemple donné:
class Stack {
public overflow;
protected trace;
private errorReport;
public function getOverflow() {
return this->overflow;
}
public function getTrace() {
return this->trace;
}
public function getErrorReport() {
return this->errorReport;
}
}
The Getter
Les exigences d'une getter
méthode sont les suivantes:
- Le nom de la fonction doit commencer par
get
suivi du nom du membre avec une initiale en majuscule. - La fonction n'a pas de paramètres.
- Pour renvoyer une variable, utilisez
return this->memberName;
. getters
etsetters
( voir Les bonus ) doivent être groupés et doivent venir après toutes les déclarations de variables.
Exemple:
private value1;
private value2;
public function getValue1() { return this->value; }
public function setValue1(value) { this->value = value; }
public function getValue2() { return this->value; }
public function setValue2(value) { this->value = value; }
Les exigences
- Créez un programme ou une fonction.
- L'entrée peut provenir de STDIN, d'arguments de ligne de commande, d'arguments de fonction, d'un fichier, etc.
- Tout format de sortie est acceptable à partir d'une simple valeur
return
dans un fichier ou d'une écriture dans STDOUT. - Entrée et de sortie ne doivent pas être mis en forme avec des espaces blancs, les nouvelles lignes, onglets , etc. Ceci est une entrée valide:
class A{protected a;}
. - Vous pouvez supposer que l'entrée est valide et que votre programme peut également gérer une entrée inattendue.
Les bonus
Vous pouvez obtenir jusqu'à 10% de votre nombre d'octets d'origine en retirant 30% pour chaque fonctionnalité:
R: Votre programme peut traiter les variables nouvellement ajoutées et n'ajoute que les manquantes getters
( public function getB() { return this->b; }
dans ce cas):
class A {
public a;
public b;
public function getA() { return this->a; }
}
B: Votre programme génère également setters
:
class A {
public a;
public getA() { return this->a; }
public setA(a) { this->a = a; }
}
C: Votre programme peut gérer les membres statiques:
class A {
public static c;
public static function getC() { return this->c; }
}
C'est le golf de code - donc la réponse la plus courte en octets l'emporte. Les failles standard ne sont pas autorisées.
A
et les B
éléments qui ont des getters, mais pas de setters, devraient-ils avoir des setters dans la sortie?
this
un static
accesseur?