Задание
Думаю, всем нравится автоматическая генерация кода и экономия времени во время работы. Вы должны создать много классов и участников в течение дня, и вы не хотите создавать все это getters
вручную.
Задача состоит в том, чтобы написать программу или функцию, которая генерирует getters
для всех членов класса автоматически для вас.
Вход
В нашем языке объекты очень просты. Имена классов и членов должны начинаться с символа [a-zA-Z]
и могут содержать только символы [a-zA-Z0-9]
. Вот пример:
class Stack {
public overflow;
protected trace;
private errorReport;
}
Выход
Это правильный вывод на основе данного примера:
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;
}
}
Добытчик
Требования к getter
методу:
- Имя функции должно начинаться с имени,
get
за которым следует имя члена с заглавной буквы. - Функция не имеет параметров.
- Чтобы вернуть переменную используйте
return this->memberName;
. getters
иsetters
( см . Бонусы ) должны быть сгруппированы и должны следовать после всех объявлений переменных.
Пример:
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; }
Требования
- Создать программу или функцию.
- Входные данные могут поступать из STDIN, аргументов командной строки, аргументов функции, файла и т. Д.
- Любой выходной формат приемлем от простого
return
-значения до файла или записи в STDOUT. - Входы и выход не должны быть отформатированы пробелы, переводы строк, вкладки и т.д. Это действительный вход:
class A{protected a;}
. - Вы можете предположить, что ввод действителен, и ваша программа также может обрабатывать неожиданный ввод.
Бонусы
Вы можете получить до 10% от вашего первоначального количества байтов, сняв 30% за каждую функцию:
A: Ваша программа может адресовать только что добавленные переменные и добавляет getters
только отсутствующие ( public function getB() { return this->b; }
в данном случае):
class A {
public a;
public b;
public function getA() { return this->a; }
}
B: Ваша программа также генерирует setters
:
class A {
public a;
public getA() { return this->a; }
public setA(a) { this->a = a; }
}
C: Ваша программа может обрабатывать статические элементы:
class A {
public static c;
public static function getC() { return this->c; }
}
Это код гольф - поэтому выигрывает самый короткий ответ в байтах. Стандартные лазейки запрещены.
A
и B
должны ли предметы, которые имеют геттеры, но не сеттеры, иметь сеттеры на выходе?
this
в static
аксессоре?