javascript — скрипт для присвоения рефакторинга a.x = 3 методу-установщику a-> setX (3)

Я преобразовываю часть своего кода из JS в C ++, поэтому мне нужно реорганизовать прямое назначение переменных экземпляра в методы установки:

a.xx=3; в a->setXx(3);

а также методы получения:

...a.xx... в ...a->getXx()...

В настоящее время я использую shelljs (node.js) для преобразований.
Пример команды для переименования функции из oldMethod () в newMethod ():

sed('-i', /\boldMethod[ ]*\(/g, 'newMethod(', filename);

Предпочтительно, я бы использовал ту же технику для сеттеров / геттеров. Однако я открыт и для других приемлемых подходов.

Мои проблемы:

  1. Я не могу заставить работать помеченные замены
  2. Мне нужно будет использовать первую букву
  3. Я не уверен, как установить правильные условия для методов получения. Там нет четкого выражения, как X=Y; Я не могу просто повернуть все alphanum.alphanum в получатели, потому что это также заменит неправильные выражения, например a("foo.doo");
    Мои предложения:

    а. все равно сделайте это и вручную обновите неправильные замены

    б. предоставить набор допустимых имен переменных, например, "tag|possition|rotation|..."

0

Решение

В C ++ мы менее ценим использование «геттеров» и «сеттеров», поскольку на самом деле они делают немного больше, чем обходят, хотя и соблюдают инкапсуляцию.

Там нет ничего плохого в использовании a->xx=3;сделав xx член public, Это упростит ваши конверсии.

3

Другие решения

Мое решение состоит в том, чтобы перечислить все известные методы. Это менее гибко, но работает.

var inf = process.argv[2];

sed('-i', /\b([a-zA-Z0-9_]+)\.tag[ ]*=[ ]*(.+);/g, '$1->setTag($2);', inf);
sed('-i', /\b([a-zA-Z0-9_]+)\.tag\b/g, '$1->getTag()', inf);

sed('-i', /\b([a-zA-Z0-9_]+)\.z[ ]*=[ ]*(.+);/g, '$1->setZ($2);', inf);
sed('-i', /\b([a-zA-Z0-9_]+)\.z\b/g, '$1->getZ()', inf);

sed('-i', /\b([a-zA-Z0-9_]+)\.pos[ ]*=[ ]*(.+);/g, '$1->setPos($2);', inf);
sed('-i', /\b([a-zA-Z0-9_]+)\.pos\b/g, '$1->getPos()', inf);
0

По вопросам рекламы [email protected]