La tarea
Supongo que a todos les encanta la generación automática de código y ahorrar algo de tiempo durante el trabajo. Tienes que crear muchas clases y miembros durante el día y no quieres crear todos esosgetters manualmente.
La tarea es escribir un programa o función que genere gettersautomáticamente para todos los miembros de la clase.
La entrada
En nuestro lenguaje los objetos son muy simples. Los nombres de las clases y los miembros deben comenzar con un carácter de [a-zA-Z]y solo pueden contener los caracteres [a-zA-Z0-9]. Aquí hay un ejemplo:
class Stack {
public overflow;
protected trace;
private errorReport;
}
La salida
Este es un resultado válido basado en el ejemplo dado:
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;
}
}
El getter
Los requisitos para un gettermétodo son:
- El nombre de la función debe comenzar con
getseguido del nombre del miembro con una inicial en mayúscula. - La función no tiene parámetros.
- Para devolver un uso variable
return this->memberName;. gettersysetters( ver Los bonos ) deben estar agrupados y deben aparecer después de todas las declaraciones de variables.
Ejemplo:
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; }
Los requisitos
- Crea un programa o una función.
- La entrada puede provenir de STDIN, argumentos de línea de comando, argumentos de función, un archivo, etc.
- Cualquier formato de salida es aceptable desde un
returnvalor simple a un archivo o escribiendo a STDOUT. - Entradas y salida no necesitan ser formateado con espacios en blanco, saltos de línea, pestañas, etc. Esta es una entrada válida:
class A{protected a;}. - Puede suponer que la entrada es válida y su programa también puede manejar entradas inesperadas inesperadas.
Los bonos
Puede obtener hasta el 10% de su recuento de bytes original retirando el 30% de cada función:
R: Su programa puede abordar las variables recientemente agregadas y getterssolo las que faltan ( public function getB() { return this->b; }en este caso):
class A {
public a;
public b;
public function getA() { return this->a; }
}
B: Tu programa también genera setters:
class A {
public a;
public getA() { return this->a; }
public setA(a) { this->a = a; }
}
C: su programa puede manejar miembros estáticos:
class A {
public static c;
public static function getC() { return this->c; }
}
Este es el código de golf, por lo que la respuesta más corta en bytes gana. Las lagunas estándar no están permitidas.
fuente

AyBdeberían artículos que tienen captadores, pero no fijadores, tienen setters en la salida?thisen unstaticdescriptor de acceso?Respuestas:
Perl, 161 - 90% = 16.1 bytes
fuente
Pyth,
198 bytes - 90% = 19.8 bytes187 - 90% = 18.7 bytes183 bytes - 90% = 18.3 bytesDebe ... vencer ... Perl ...
Versión de 187 bytes / 18.7 bytes
Versión de 198 bytes / 19.8 bytes
TODO: ¡ Más golf!
fuente
JavaScript ES6 (por el momento),
305289223 a 60% = 89,2 bytesFue
256 - 30% = 179.2 bytesCalifica para bonos estáticos y de establecimiento; ahora con extra ES6!
Función ES5, 115,6 bytes
fuente
o.slice(1,o.length))simplemente puede acortarseo.slice(1)), y creo que puede en líneav, ya que solo lo usa una vez (es decir, comienza su función conreturn s.replace(/\}$/, s.match(...).map...). Además, no creo que necesites un espacio entrereturny(.public|privateen tu expresión regular!CJam, 71 bytes
Pruébelo en línea en el intérprete de CJam .
fuente