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 getters
automá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 getter
método son:
- El nombre de la función debe comenzar con
get
seguido 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;
. getters
ysetters
( 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
return
valor 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 getters
solo 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
A
yB
deberían artículos que tienen captadores, pero no fijadores, tienen setters en la salida?this
en unstatic
descriptor 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 bytes
Califica 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 entrereturn
y(
.public|private
en tu expresión regular!CJam, 71 bytes
Pruébelo en línea en el intérprete de CJam .
fuente